小编Ang*_*elo的帖子

>| 重定向有什么作用 做?

什么时候应该>|用于将输出重定向到文件而不是仅使用>?

当我看到这个时给出的解释是它保证首先截断目标文件。但我认为>已经暗示了这一点。

是否>|有用?

shell bash io-redirection

16
推荐指数
2
解决办法
3429
查看次数

列出带有前缀的变量,其中前缀存储在另一个变量中

我试图列出具有特定前缀的所有变量,但该前缀是动态确定的。例如:

prefix=apple_
apple_one=a1
apple_two=a2
Run Code Online (Sandbox Code Playgroud)

如果我只是这样做:

echo ${!apple_@}
Run Code Online (Sandbox Code Playgroud)

我可以得到以apple_开头的变量名。但是,我想以某种方式使用变量前缀来做到这一点。我尝试过的一切都会导致糟糕的替代。例如我不能:

echo ${!${prefix}@}
Run Code Online (Sandbox Code Playgroud)

bash string variable

9
推荐指数
2
解决办法
9257
查看次数

gawk 和 mawk 在字段分隔符方面有什么区别?

gawk 和 mawk 在字段分隔符方面有什么区别?特别是,我想弄清楚这里发生了什么:

\n

莫克:

\n
$ echo "100+50\xc2\xb020.5" | mawk -F '[+\xc2\xb0.]' '{ print $1" - "$2" - "$3" - "$4" - "$5; }'\n100 - 50 -  - 20 - 5\n
Run Code Online (Sandbox Code Playgroud)\n

呆呆地:

\n
$ echo "100+50\xc2\xb020.5" | gawk -F '[+\xc2\xb0.]' '{ print $1" - "$2" - "$3" - "$4" - "$5; }'\n100 - 50 - 20 - 5 -\n
Run Code Online (Sandbox Code Playgroud)\n

看起来 mawk 正在以某种方式引入一个额外的字段。什么是正确的行为?

\n

awk

9
推荐指数
2
解决办法
1086
查看次数

以不同的用户和组创建文件

我有一个 bash 脚本,它必须 rsync 才能下载在本地写入文件的文件,然后需要将所有者设置为 apache,并将组设置为特定用户组(该 apache 不是其成员)。

有没有办法创建具有这些所有权的文件,因为它们是由 rsync 进程写入的,而无需在事后使用 chmod 进行更改? 文件太多,以后浏览它们所花费的时间令人望而却步。

我必须为多个用户组执行此操作,因此我不应该将 apache 添加到这些组中,当然也不能将它们全部设为默认组。

换句话说:当 X 不是 Y 的成员时,root 是否可以以用户 X 和组 Y 的身份创建文件?

我试过使用 runuser,但我无法设置组(大概是因为 apache 不属于该组)。

我知道您可以使用 chmod 更改权限并添加任何用户/组组合。我要问的是是否有一种方法可以打开文件进行写入并在创建文件时使用任何用户/组组合。

尝试使用 sudo:

[root@centos7 tmp]# groups angelo
angelo : angelo wheel
[root@centos7 tmp]# groups apache
apache : apache
[root@centos7 tmp]# sudo -u angelo -g apache touch angelo-file
Sorry, user root is not allowed to execute '/bin/touch angelo-file' as angelo:apache on centos7
[root@centos7 tmp]# ls -ld angelo-file …
Run Code Online (Sandbox Code Playgroud)

bash permissions su chown

7
推荐指数
2
解决办法
5万
查看次数

是否有任何工具可用于随时间存储 SMART 数据?

我想随着时间的推移开始存储 SMART 数据,并根据磁盘 ID/序列号查看任何趋势。例如,可以让我每天从磁盘中获取一次智能信息并将其放入数据库中。Linux 中是否已经有用于此的工具,还是我必须自己推出?

hard-disk smart

7
推荐指数
2
解决办法
845
查看次数

“睡眠”是基于系统时钟还是经过的时间?

“睡眠”是基于系统时钟还是经过的时间?

例如,如果您执行:

sleep 1200
Run Code Online (Sandbox Code Playgroud)

并立即暂停你的系统10分钟,它会在另外10分钟后结束,还是会继续等待整整20分钟?

linux osx sleep

4
推荐指数
1
解决办法
601
查看次数

使用多个 exec 查找多个条件

我正在尝试构建一个具有导致多个操作的多个条件的 find 命令。有人建议我只使用一个 find 命令以提高效率。这是我所拥有的:

    find $target \
            \( ! -group $project -exec chgrp $project "{}" \;       \) , \
            \( ! -user $owner -exec chown $owner "{}" \;            \) , \
            \( ! -perm "$perms" -exec chmod "$perms" "{}" \;        \) , \
            \( -type d -exec chmod g+s "{}" \; \)
Run Code Online (Sandbox Code Playgroud)

它似乎确实做了一些事情,但是我得到:

发现:无效的表达

(: 找不到相关命令

在我试图执行的脚本中

bash find

3
推荐指数
1
解决办法
1755
查看次数

使用 tar 和 keep-old-files 选项进行错误处理

我正在使用选项 --keep-old-files 解压缩 tar 文件,这样我就不会破坏已经存在的文件。令人讨厌的是,当文件已经存在时,这会导致 tar 产生错误代码 #2(致命错误)。

对我来说这不应该被视为错误的原因很重要,因为我的脚本会在文件成功解包时记录日志,然后使用此日志来不重新解压缩该 tar 文件。

我可以完全忽略这个错误,而不是记录,并相信不会覆盖任何文件,但这有两个问题:它会生成很多错误消息,而且文件很多,所以我打开 tar 一次效率很低对于每个文件。

有什么办法可以使用--keep-old-files,忽略现有文件生成的错误,而不忽略其他错误?

tar

2
推荐指数
1
解决办法
1900
查看次数

文件压缩 - 如何在 Linux 中实现

我希望能够在磁盘上压缩某些文件(我需要保留,但很少使用)。我注意到chattr +c标记一个文件进行压缩,但它似乎并没有真正压缩文件。

在每个文件或每个目录的基础上实现文件压缩的​​最简单方法是什么?

linux filesystems compression xattr

1
推荐指数
1
解决办法
1750
查看次数