AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-136107

cat's questions

Martin Hope
cat
Asked: 2018-10-30 11:52:56 +0800 CST

有条件地将变量设置为只读的函数

  • 4

如果我有一个脚本将变量只读​​设置为一些奇数值,并且errexit由于其他不安全的操作而设置:

#!/bin/bash
set -e 
declare -r NOTIFY=$(case "$OS" in (macosx) echo macos_notify ;; (linux) echo linux_notify ;; (*) echo : ;; esac)
declare -r SAY=_say # _say is a function
declare -r VERSION=0.99
set +e 

我第二次使用它来获取定义,因为它正在开发中:

$ . s.bash 

$ . s.bash 
bash: declare: NOTIFY: readonly variable
Exited

通常declare -r EXISTING_VAR既不会停止脚本也不会删除EXISTING_VAR.

但是对于errexit,分配给现有变量是可以理解的失败。简单的选项是删除-r或使用set +e该部分脚本。

除此之外,如果名称已经存在,是否可以编写一个 Bash 函数来代替declare -r但不重新分配?

我试过了:

# arg #1: var name, #2: value
set_var_once () {
  # test whether the variable with the 
  # name stored in $1 exists 
  if [[ -z "${!1}" ]] 
  then # if it doesn't, set it
    declare -r $1=$2
  fi
}

我也尝试过类似的东西eval "declare -r $1=$(eval $2)",感觉eval这里的某个地方需要,但我不确定在哪里。

所有版本的set_var_once结果都没有设置他们应该设置的变量。

bash shell-script
  • 3 个回答
  • 3363 Views
Martin Hope
cat
Asked: 2018-10-29 15:02:32 +0800 CST

在不更改 inode 的情况下原子地写入文件(保留硬链接)

  • 5

X在 Unix 上安全、原子地写入文件的常规方法是:

  1. 将新文件内容写入临时文件Y。
  2. rename(2) Y至X

在两个步骤中,我们似乎除了X“就地”改变之外什么也没做。

它可以防止竞争条件和意外数据丢失(其中X被破坏但Y不完整或被破坏)。

这样做的缺点(在这种情况下)是它不会写入Xin-place 引用的 inode;rename(2)使得X引用一个新的 inode 号。

当X一个文件的链接计数> 1(显式硬链接)时,现在它不像以前那样引用相同的inode,硬链接被破坏了。

消除该缺点的明显方法是就地写入文件,但这不是原子的,可能会失败,可能导致数据丢失等。

有什么方法可以像原子一样进行rename(2)但保留硬链接?

也许将Y(临时文件)的 inode 编号更改为与 相同X,并为其X命名?一个 inode 级别的“重命名”。

这将有效地写入XwithY的新内容所引用的 inode,但不会破坏其硬链接属性,并会保留旧名称。

如果假设的 inode “重命名”是原子的,那么我认为这将是原子的并且可以防止数据丢失/竞争。

rename inode
  • 1 个回答
  • 898 Views
Martin Hope
cat
Asked: 2018-10-18 09:23:24 +0800 CST

将 Linux 备份到 Windows 文件系统以供以后恢复

  • 0

我需要将我的 Linux 安装文件备份/复制到外部驱动器,以便我可以将它们恢复到新的更大的磁盘上。

用于恢复的目标磁盘是原来的两倍,并且会有更大的分区,ext4并且linux-swap. 对整个磁盘或其第一个分区进行映像并不是一个好的选择,因为两者都需要稍后重新分区,我想避免。

我正在备份到 exFAT 格式的驱动器,但是将 ext4 Linux 安装复制到 exFAT 存在一些问题

  • 可能会破坏文件系统中的重要硬链接和快速*符号链接ext4(会破坏 Linux)

  • 不会保留文件所有权/权限和setuid位(会破坏 Linux)

  • 不会保留功能(会破坏 Linux)

  • 也不会保留文件扩展属性(xattrs),因为我相信许多文件都有重要信息(我不关心 Unix ACL,因为我认为我没有任何文件使用它们)

如果我将文件直接复制到 NTFS、FAT32、exFAT 等,那么大部分元数据都会被破坏。

我不关心压缩,因为原始磁盘比我的备份驱动器小,但是(GNU)tar似乎只保留权限/所有权(使用-p和提取--same-owner)、链接和 xattrs,但需要文件功能支持来备份现代 Linux .

其他主要选项似乎是 CloneZilla Live 系统,cpio它似乎可以创建tar档案。

所以主要的选择是

  1. CloneZilla 或仅对分区进行映像
  2. tar本身,这可能会破坏事物
  3. cpio,这可能会受到tar存档格式的限制?

* 83,000 个符号链接中有 80,000 个是快速符号链接,如果可能,我想保持它们的快速性

linux backup
  • 1 个回答
  • 838 Views
Martin Hope
cat
Asked: 2018-09-09 16:10:30 +0800 CST

谁锁定了所有显示器刷新率?

  • 0

我有两个显示器(在“加入显示器”设置中)、一个 NVIDIA 1070 GTX 移动 GPU 和 OpenGL 4.6 上的 GNOME 3。

笔记本电脑内置显示器的刷新率设置为最高 120.02 Hz,第二台显示器(超过 VGA)的刷新率最高为 59.88 Hz。

未连接第二台显示器时,glxgears报告 20,000 FPS。但是,当连接第二台显示器并glxgears在内置显示器上运行时,glxgears锁定在 60 FPS,就好像在使用 Intel 集成 GPU。

X11 或 OpenGL 是否将所有显示器的刷新率锁定为最低通用率?

有没有办法防止这种情况并允许每台显示器有自己的刷新率,还是设计和必要的?

linux nvidia
  • 1 个回答
  • 693 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve