标签: coreutils

如何使用 ls 显示权限的八进制表示法 - 八进制可以表示所有权限吗?

在查看我的系统上的man页面ls并搜索 Google 之后,我发现有一种方法可以使用awkperl在使用时显示八进制权限ls,但是bash还有什么更原生的吗?

ls -alh 的标准输出

$ ll
total 0
drwxr-xr-x   5 user  group   170B May 20 20:03 .
drwxr-xr-x  17 user  group   578B May 20 20:03 ..
-rw-r--r--   1 user  group     0B May 20 20:03 example
-rw-r--r--   1 user  group     0B May 20 20:03 example-1
-rw-r--r--   1 user  group     0B May 20 20:03 example-3
Run Code Online (Sandbox Code Playgroud)

所需的输出,包括权限的八进制表示

$ ll
total 0
drwxr-xr-x 1775  5 user  group   170B …
Run Code Online (Sandbox Code Playgroud)

ls coreutils

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

tar 在文件上工作的顺序是如何确定的?

$ touch dir/{{1..8},{a..p}}
$ tar cJvf file.tar.xz dir/
dir/
dir/o
dir/k
dir/b
dir/3
dir/1
dir/i
dir/7
dir/4
dir/e
dir/a
dir/g
dir/2
dir/d
dir/5
dir/8
dir/c
dir/n
dir/f
dir/h
dir/6
dir/l
dir/m
dir/j
dir/p
Run Code Online (Sandbox Code Playgroud)

我原以为它是按字母顺序排列的。但显然不是。这里的公式是什么?

linux tar gnu coreutils

20
推荐指数
2
解决办法
7484
查看次数

rm 上 -f 选项的真正意义是什么?

通过阅读 GNU coreutils 手册页rm,其中一个选项是-f,根据手册,

-f, --force
          ignore nonexistent files and arguments, never prompt
Run Code Online (Sandbox Code Playgroud)

现在,我做了一些测试并证明如果我使用类似的东西

rm -f /nonexisting/directory/
Run Code Online (Sandbox Code Playgroud)

它不会抱怨。

人们可以从这样的选择中真正获得什么?

另外,使用“删除目录”的最常见示例rm类似于

 rm -rf /delete/this/dir
Run Code Online (Sandbox Code Playgroud)

这个-r选项是有道理的,但是-f

options coreutils rm

19
推荐指数
2
解决办法
3万
查看次数

支持utf的coreutils?

cut今天用的时候发现它不把一个UTF-8字符当作一个字符,而是把3个字符当作一个字符来对待,因为它有3个字节长。

对于许多工具来说,这似乎通常是正确的。

是否有支持coreutilsUTF-8 的版本?

我的locale输出:

LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
Run Code Online (Sandbox Code Playgroud)

这是cut不起作用的时候

echo ?? | cut -c 2-
???
Run Code Online (Sandbox Code Playgroud)

正确的输出应该是

?
Run Code Online (Sandbox Code Playgroud)

如果cut -c使用多字节字符。

coreutils cut unicode

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

`set -e` 和 `grep` 习惯用法,用于在未找到模式时防止过早退出 shell 脚本

需要帮助 - 在 GNU/LINUX bash 上的 shell 脚本上下文中:

我总是使用set -e. 通常,grep如果grep退出状态1指示未找到模式,我希望并且不总是希望脚本终止执行。

我试图解决这个问题的方法如下:

(尝试 I)
如果set +o pipefail并使用类似的东西调用 grepgrep 'p' | wc -l那么我会得到所需的行为,直到未来的维护者启用pipefail. 另外,我喜欢启用pipefail所以这对我不起作用。

(试二)
使用一个sedawk和只打印匹配模式的行,然后wc匹配的行来测试匹配的模式。我不喜欢这个选项,因为使用sedtogrep似乎是解决我真正问题的方法。

(尝试 III)
这是我最不喜欢的 - 类似于:set +e; grep 'p'; set-e

任何见解/习语将不胜感激 - 谢谢。

grep bash gnu coreutils

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

按十六进制值排序

使用 coreutils sort,如何按十六进制值(字段)进行数字排序?我期待着类似的东西

sort -k3,3x file_to_sort
Run Code Online (Sandbox Code Playgroud)

然而,这样的x情况并不存在。

编辑:到目前为止我想出的最佳解决方案是:

{ echo ibase=16; cut -d' ' -f3 file_to_sort; } |
  bc | paste -d: - file_to_sort | sort -t: -k1,1n | cut -d: -f2-
Run Code Online (Sandbox Code Playgroud)

其中cut -d' ' -f3隔离搜索字段(这是-k3,3-这可能会有所不同,当然),和bc不转换为十进制(需要大写十六进制,没有0x前缀,匹配我的情况)。然后我加入、排序和拆分列。

最小样本输入:

5 hhf 25
3 ezh ae
1 hdh d12
2 ukr 9f
4 jjk 7
Run Code Online (Sandbox Code Playgroud)

预期输出(按hex第三列排序的文件):

4 jjk 7
5 hhf 25
2 ukr 9f
3 ezh ae
1 hdh …
Run Code Online (Sandbox Code Playgroud)

coreutils sort

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

命令的`tee`

tee可以将管道标准输入重定向到标准输出文件。

echo Hello, World! | tee greeting.txt
Run Code Online (Sandbox Code Playgroud)

上面的命令将在终端屏幕上显示问候语并将其保存在greeting.txt文件的内容中,如果没有该名称的文件,则创建该文件。

还有-a用于tee附加到现有文件而不是覆盖的开关。


是否有一种方便的方法将管道输入重定向到命令和标准输出而不是文件?

我正在尝试创建一个包装脚本,buku以便将其索引号指定的书签的 URL 复制到主要选择。

# bukuc:
#!/bin/sh
url=$(buku -f 1 -p $1 | cut -f 2) # NUMBER : URL
echo $url # DISPLAY
echo $url | xsel # PRIMARY SELECTION
Run Code Online (Sandbox Code Playgroud)

这里我用了echo 两个两次,第一次是在终端上显示,然后是保存在主选区(剪贴板)中。

我想象echo $url | teeC xsel在传递给下一个命令(链接命令)之前显示输出的某些东西或快捷方式,什么可以让我将整个命令链接在一行中,而无需将结果保存在变量中,如下所示:

buku -f 1 -p $1 | cut -f 2 | teeC xsel    
Run Code Online (Sandbox Code Playgroud)

我还可以使用它urlview …

io-redirection shell-script coreutils tee xsel

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

`test` 和 `[` - 不同的二进制文件,有什么区别吗?

我在回答另一个问题时注意到test[是不同的二进制文件,但[联机帮助页会显示test's. 除了对结局的要求],还有什么区别吗?如果不是,为什么它们分开二进制文件而不是符号链接?(它们也是bash内置bash函数,也没有区别。)

linux command-line utilities coreutils test

15
推荐指数
2
解决办法
715
查看次数

如何在 Bash 中运行 N 次中的 1 个命令

我想要一种随机运行命令的方法,比如 10 次中的 1 次。是否有内置或 GNU coreutil 来执行此操作,理想情况下是这样的:

chance 10 && do_stuff

哪里do_stuff只执行了 10 次?我知道我可以写一个脚本,但这似乎是一件相当简单的事情,我想知道是否有一种定义的方式。

bash gnu coreutils random shell-builtin

15
推荐指数
4
解决办法
2639
查看次数

带有 `-L` 标志的 `du` 命令的行为

du-L命令与命令行选项一起使用时,我注意到命令的奇怪行为。

我正在使用 Slackware 14 和 Coreutils 8.19。

要重现奇怪的行为,请创建两个文件夹:

mkdir foo
mkdir bar
Run Code Online (Sandbox Code Playgroud)

在其中一个文件夹中创建一个文件:

perl -e 'print "A"x10000' > foo/text

另一个文件夹中的符号链接:

ln -s ../foo/text bar/text

现在,如果你输入:

du -h -L bar

你会得到:

16k bar

由于符号链接被取消引用。但是如果你输入:

du -h -L *

你会得到:

16K     foo
4.0K    bar
Run Code Online (Sandbox Code Playgroud)

并且符号链接不会被取消引用。我错过了什么吗?

disk-usage coreutils symlink

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