小编Pau*_*omé的帖子

printf 中的破折号

我正在尝试使用 printf 在 bash 脚本中格式化一些漂亮的输出

例如:

-----------------------  
| This is some output | 
-----------------------
Run Code Online (Sandbox Code Playgroud)

但我偶然发现了一些我不明白的行为。

$ printf "--"
Run Code Online (Sandbox Code Playgroud)

给我错误:

printf: 用法: printf [-v var] 格式 [参数]

$ printf "-stuff"
Run Code Online (Sandbox Code Playgroud)

结果是

-bash: printf: -s: 无效选项

所以显然 printf 认为我试图传递一些参数,而我不是。

同时,完全出于偶然,我找到了这个解决方法:

-----------------------  
| This is some output | 
-----------------------
Run Code Online (Sandbox Code Playgroud)

给我

--- this works now ----
Run Code Online (Sandbox Code Playgroud)

谁能解释这种行为?

bash printf

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

如何从包含数千个文件的文件夹中移动 100 个文件?

我有一个包含数千个文件的目录。如何将 100 个文件(任何文件都可以)移动到另一个位置。

files mv

53
推荐指数
5
解决办法
10万
查看次数

.bashrc 中的 $debian_chroot 是什么?

debian_chroot我的.bashrc文件中的变量是什么?它在这里做什么?

PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
Run Code Online (Sandbox Code Playgroud)

bash ubuntu debian

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

ntpd 与 systemd-timesyncd - 如何实现可靠的 NTP 同步?

当我查询 NTP 守护进程的状态时,ntpdc -c sysinfo我得到以下输出:

system peer:          0.0.0.0
system peer mode:     unspec
leap indicator:       11
stratum:              16
precision:            -20
root distance:        0.00000 s
root dispersion:      12.77106 s
reference ID:         [73.78.73.84]
reference time:       00000000.00000000  Thu, Feb  7 2036  7:28:16.000
system flags:         auth monitor ntp kernel stats
jitter:               0.000000 s
stability:            0.000 ppm
broadcastdelay:       0.000000 s
authdelay:            0.000000 s
Run Code Online (Sandbox Code Playgroud)

这表示 NTP 同步失败。但是系统时间精确​​到 1 秒精度。当我在没有网络连接的情况下运行我的系统时,系统时间会偏离大约 10 秒。

这种行为表明系统有另一种同步时间的方式。我意识到还有systemd-timesyncd.service(配置文件位于/etc/systemd/timesyncd.conf)并timedatectl status给了我正确的时间:

      Local time: Thu 2016-08-25 10:55:23 CEST …
Run Code Online (Sandbox Code Playgroud)

ntpd ntp systemd-timesyncd

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

多彩多姿的 Grep

我试图让每个 grep 命令以不同的颜色突出显示其结果。我可以用这样的一行手动完成:

ls -l GREP_COLORS='mt=01;32' grep c | GREP_COLORS='mt=01;31' grep o | GREP_COLORS='mt=01;34' grep n | GREP_COLORS='mt=01;36' grep f
Run Code Online (Sandbox Code Playgroud)

每个c字符将以绿色突出显示,每个o字符将以红色突出显示,等等......

要使此示例正常工作,您需要确保始终使用 --color=alwaysgrep 命令。我已经在我的.bashrc 所以 grep 中设置了它总是有颜色:

export GREP_OPTIONS='--color=always'


我试图完成的是用别名包装这个功能,所以我每次grep都可以调用并拥有不同的GREP_COLORS值。我理解为每个新的管道 grep 考虑多个 shell,我试图通过创建一些文件(每种颜色一个)来解决这个问题,以表明它们已经被使用。

我做了一些尝试,但奇怪的是,这个似乎是“最好的”。我有这个.bashrc

alias mg="mygrep"
mygrep(){
    # define possible colors
    COLORS=("01;32" "01;31" "01;34" "01;36")
    COUNTER=0
    NUM=0
    # as long as the color has already been used, keep searching
    while [ -f /home/lior/Desktop/mygrep_$NUM ]; do
        # get a …
Run Code Online (Sandbox Code Playgroud)

shell grep bash pipe

32
推荐指数
2
解决办法
8007
查看次数

尝试编译内核会产生认证错误

我目前正在尝试遵循Hardening Debian for the Desktop Using Grsecurity指南,以便在我的 Kali Linux 桌面上安装带有 Grsecurity 的 4.5.7 内核。

我正在逐字跟踪该指令列表,除了我尝试将 Grsecurity 的测试补丁用于 4.5.7 内核并且我正在运行 Kali Linux 而不是直接的 Debian。

但是,每次我尝试编译内核时,都会在“CC certs/system_keyring.o”行之后收到此错误:

  CC      certs/system_keyring.o
make[2]: *** No rule to make target 'debian/certs/benh@debian.org.cert.pem', needed by 'certs/x509_certificate_list'.  Stop.
Makefile:951: recipe for target 'certs' failed
make[1]: *** [certs] Error 2
make[1]: Leaving directory '/home/jc/Downloads/linux-4.5.7'
debian/ruleset/targets/common.mk:295: recipe for target 'debian/stamp/build/kernel' failed
make: *** [debian/stamp/build/kernel] Error 2
Run Code Online (Sandbox Code Playgroud)

正如我发现的那样,对于任何内核,即使我没有应用补丁或修改,我也会收到此错误,因此它与我用来编译内核的工具(显然是某种系统钥匙串)有关。有人可以告诉我如何修复我的操作系统并编译我的内核吗?

PS这是输出cat /proc/version

Linux version 4.6.0-kali1-amd64 (devel@kali.org) (gcc version …
Run Code Online (Sandbox Code Playgroud)

compiling debian grsecurity linux-kernel kali-linux

32
推荐指数
4
解决办法
4万
查看次数

如何使用命令行解压 jsonlz4 文件(Firefox 书签备份)?

似乎有各种 JavaScript + 浏览器特定的解压缩方法,但是没有某种方法可以将 jsonlz4 文件转换为unlz4可以读取的内容吗?

compression firefox json lz4

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

What is the quickest way of replacing 0 by 1 and vice-versa in a stream?

Given a string composed of 0s and 1s, my goal is to replace 0 by 1 and vice-versa. Example:

Input

111111100000000000000
Run Code Online (Sandbox Code Playgroud)

Intended output

000000011111111111111
Run Code Online (Sandbox Code Playgroud)

I tried, unsuccessfully, the following sed command

echo '111111100000000000000' | sed -e 's/0/1/g ; s/1/0/g'
000000000000000000000
Run Code Online (Sandbox Code Playgroud)

What am I missing?

performance sed text-processing

23
推荐指数
3
解决办法
3998
查看次数

POSIX 在命令替换中引用此处的文档需要什么?

如何将 HEREDOC 文本带入 shell 脚本变量中?有人报告了一个问题,使用here 文档$(...)命令替换内使用带引号的分隔符,其中\文档内行尾的反斜杠触发换行符连接行继续,而命令替换的相同 here 文档按预期工作。

这是一个简化的示例文档:

cat <<'EOT'
abc ` def
ghi \
jkl
EOT
Run Code Online (Sandbox Code Playgroud)

这包括一行末尾的一个反引号和一个反斜杠。分隔符被引用,因此正文内部不会发生扩展。在所有 Bourne-alikes 中,我可以找到逐字输出内容。如果我将相同的文档放在命令替换中,如下所示:

x=$(cat <<'EOT'
abc ` def
ghi \
jkl
EOT
)
echo "$x"
Run Code Online (Sandbox Code Playgroud)

那么它们的行为不再相同:

  • dashashzshksh93、 BusyBox ashmksh和 SunOS 5.10 POSIXsh都像以前一样给出了文档的逐字内容。
  • Bash 3.2 给出了一个不匹配的反引号的语法错误。使用匹配的反引号,它尝试将内容作为命令运行。
  • Bash 4.3 将“ghi”和“jkl”折叠成一行,但没有错误。该--posix选项不影响此。Kusalananda告诉我(谢谢!)它的pdksh行为方式相同

在最初的问题中,我说这是 Bash …

shell-script posix command-substitution here-document

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

如何获取主机名和域名?

在 Unix (Solaris) 中是否有任何命令可以同时返回主机名和域名?

例如:

hostname -> servername
domainname -> us.xyz.com
Run Code Online (Sandbox Code Playgroud)

我需要 : servername.us.xyz.com

solaris hostname domain

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