小编Tob*_*ght的帖子

如何在文件末尾添加换行符?

使用版本控制系统时,当差异显示为 时,我对噪音感到恼火No newline at end of file

所以我想知道:如何在文件末尾添加换行符以摆脱这些消息?

shell bash text-processing newlines

237
推荐指数
8
解决办法
36万
查看次数

为什么 egrep [wW][oO][rR][dD] 比 grep -i word 快?

我使用grep -i得更频繁,我发现它比egrep等效的慢,我匹配每个字母的大写或小写:

$ time grep -iq "thats" testfile

real    0m0.041s
user    0m0.038s
sys     0m0.003s
$ time egrep -q "[tT][hH][aA][tT][sS]" testfile

real    0m0.010s
user    0m0.003s
sys     0m0.006s
Run Code Online (Sandbox Code Playgroud)

是否grep -i做额外的测试,egrep不?

performance grep

49
推荐指数
2
解决办法
4916
查看次数

我可以阻止“service foo status”通过“less”对其输出进行分页吗?

你如何阻止命令service <name> status使用less在它的输出?

我有一个脚本可以自动执行一些 sysadmin 操作,在我将服务器升级到 Ubuntu 16.04 后,它中断了,因为检查服务状态的操作被阻塞,因为它使用类似less显示输出的东西,特别是supervisor服务。

我有几个守护进程配置为运行,当运行时sudo service supervisor status,我得到:

* supervisor.service - Supervisor process control system for UNIX
   Loaded: loaded (/lib/systemd/system/supervisor.service; disabled; vendor preset: enabled)
   Active: active (running) since Mon 2017-02-06 20:35:34 EST; 12h ago
     Docs: http://supervisord.org
  Process: 18476 ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown (code=exited, status=0/SUCCESS)
 Main PID: 20228 (supervisord)
   CGroup: /system.slice/supervisor.service
           |- 7387 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7388 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A …
Run Code Online (Sandbox Code Playgroud)

systemd services

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

Linux 中信号是如何“传递”的?

我对用于描述 Linux 信号传递的术语感到困惑。大多数文本都会说“信号被传递到进程”或“信号被传递到线程”。

据我了解,当内核调用该处理程序时,信号被“传递”到驻留在进程中的信号处理程序。该进程本身是异步运行的,这个“交付”过程类似于 CPU 调用中断处理程序。中断处理程序(信号处理程序)不是进程线程,也不是该进程下运行的任何线程,对吗?它是由内核启动的一个单独的线程。

因此,信号不会传递给线程或进程,而是传递给驻留在进程中的信号处理程序,并且不一定与任何特定线程关联。如果这不正确,请告诉我,例如,信号处理程序和 pthread 之间的关联,它证明了“信号传递到 pthread”这一术语的合理性。

linux process kernel signals pthreads

43
推荐指数
3
解决办法
6526
查看次数

谁拥有 UNIX 商标?

我目前正在参加一门教授 UNIX 基础知识的课程,例如常用命令等。在对 UNIX 进行了一些挖掘之后,我遇到了关于谁拥有 UNIX 的法律斗争和 UNIX 战争的陷阱。我做了一些研究,但来源有点过时(大约 2003 - 2004 年)并且就谁拥有它而言有相互矛盾的信息。

以下是我找到的几个来源:

https://www.zdnet.com/article/who-really-owns-unix/ - 声明 Open Group 拥有它

https://www.informit.com/articles/article.aspx?p=175171&seqNum=2 - 声明 SCO 拥有它

阅读这些资料后,听起来 Open Group 声称拥有 UNIX 商标,而 SCO 声称拥有 UNIX 源代码。我理解正确吗?

historical-unix

40
推荐指数
2
解决办法
7928
查看次数

如何让 tr 了解非 ascii(unicode)字符?

我正在尝试从文件(UTF-8)中删除一些字符。我tr为此目的使用:

tr -cs '[[:alpha:][:space:]]' ' ' <testdata.dat 
Run Code Online (Sandbox Code Playgroud)

文件包含一些外来字符(如“??????????”或“àé”)。tr似乎不理解它们:它将它们视为非 alpha 并删除。

我试过更改我的一些语言环境设置:

LC_CTYPE=C LC_COLLATE=C tr -cs '[[:alpha:][:space:]]' ' ' <testdata.dat
LC_CTYPE=ru_RU.UTF-8 LC_COLLATE=C tr -cs '[[:alpha:][:space:]]' ' ' <testdata.dat
LC_CTYPE=ru_RU.UTF-8 LC_COLLATE=ru_RU.UTF-8 tr -cs '[[:alpha:][:space:]]' ' ' <testdata.dat
Run Code Online (Sandbox Code Playgroud)

不幸的是,这些都没有奏效。

我怎样才能tr理解Unicode?

linux text-processing unicode tr

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

如何在 debugfs 中的 ext4 文件系统上删除名为“filen/ame”(带斜杠)的文件?

玩 e2fsprogs debugfs,由于更改/意外,filen/ame创建了一个名为的文件。显然,正斜杠字符/用作路径名中的特殊分隔符。

仍在使用debugfs我想删除名为 的文件filen/ame,但我没有成功,因为该/字符没有被解释为文件名的一部分?

debugfs 是否提供删除包含斜杠的文件的方法?如果是这样怎么办?

我用了:

cd /tmp
echo "content" > contentfile
dd if=/dev/zero of=/tmp/ext4fs bs=1M count=50
mkfs.ext4 /tmp/ext4fs
debugfs -w -R "write /tmp/contentfile filen/ame" /tmp/ext4fs
debugfs -w -R "ls" /tmp/ext4fs
Run Code Online (Sandbox Code Playgroud)

输出:

debugfs 1.43.4 (31-Jan-2017)
 2  (12) .    2  (12) ..    11  (20) lost+found    12  (980) filen/ame
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法来删除filen/ame文件:

debugfs 1.43.4 (31-Jan-2017)
 2  (12) .    2  (12) ..    11  (20) lost+found    12  (980) filen/ame
Run Code Online (Sandbox Code Playgroud)

但这不起作用,只会产生:

debugfs …
Run Code Online (Sandbox Code Playgroud)

slash ext4 debugfs

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

如何在特定用户的 auth.log 中停止 sudo PAM 消息?

我正在使用 Zabbix 来监控我的环境并每 60 秒zabbix_agentd以用户身份执行zabbix一个自定义脚本;它用于sudo将此脚本作为root.

/var/log/auth.log我看到每 60 秒:

Aug 11 17:40:32 my-server sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Aug 11 17:40:32 my-server sudo: pam_unix(sudo:session): session closed for user root
Run Code Online (Sandbox Code Playgroud)

我想阻止此消息淹没我的日志。我在/etc/pam.d/sudo文件之前添加了以下行session required pam_unix.so

session [success=1 default=ignore] pam_succeed_if.so service in sudo quiet uid = 0
Run Code Online (Sandbox Code Playgroud)

并且消息消失了。

但问题是,当有人使用sudoas执行脚本时,我通过这种方式抑制了每条 PAM 消息root

我只想为用户zabbix(不是所有其他用户)停止消息。sudo知道zabbix用户想要以root特权执行脚本,有什么方法可以告诉 PAM?如何告诉 PAM …

authentication pam logs sudo

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

为什么 {} 开始在 Terminal.app 中显示为 äå?

我正在运行 CentOS 7.9,今天我的终端显示奇怪的字符。有些字母看起来不错,但有些符号显示为一些非英文字符。例如,我制作了一个包含以下内容的文本文件:

!@#$%^&*()_+{}
Run Code Online (Sandbox Code Playgroud)

当我打开这个vi或者nano它看起来正如我上面写的是正确的。但在终端中它看起来像这样:

$ cat chars.txt 
!É#$%Ü&*()_+äå

$ od -An -vtx1 < chars.txt
 21 40 23 24 25 5e 26 2a 28 29 5f 2b 7b 7d 0a
Run Code Online (Sandbox Code Playgroud)

这些奇怪的字符随处可见,即使在我打字时也是如此。这台机器一直工作到今天。我认为这是在我下载了一个二进制文件curl并忘记使用该-O参数之后发生的。重新启动并以其他用户身份登录没有帮助。我的语言环境设置如下;我不知道还有什么要找的。我使用的 shell 是 Bash 4.2 版,没什么异常。

$ 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)

编辑:说服务器的外壳是 bash 4.2 会更准确。我在 macOS Big Sur 上使用 Terminal.app 登录。

terminal-emulator character-encoding centos macos

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

“head”读取/消耗的输入行数可以多于其输出的行数吗?

给定以下 3 个脚本:

  1. printf 'a\nb\nc\n' > file && { head -n 1; cat; } < file
  2. printf 'a\nb\nc\n' | { head -n 1; cat; }
  3. { head -n 1; cat; } < <(printf 'a\nb\nc\n')

我期望每个的输出是:

a
b
c
Run Code Online (Sandbox Code Playgroud)

但对于其中一些系统,在某些系统上,情况并非如此。例如,在 cygwin 上:

$ printf 'a\nb\nc\n' > file && { head -n 1; cat; } < file
a
b
c
Run Code Online (Sandbox Code Playgroud)

$ printf 'a\nb\nc\n' | { head -n 1; cat; }
a
Run Code Online (Sandbox Code Playgroud)

$ { head -n 1; cat; } < <(printf 'a\nb\nc\n')
a …
Run Code Online (Sandbox Code Playgroud)

bash text-processing head

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