Unix & Linux

Linux,FreeBSD和其他类似Un * x的操作系统用户的问答



2
通过ssh运行命令时未获取点文件
当我交互式运行程序时,它可以正常运行: ssh somehost $ ~/some/path/somescript.py 当我直接通过ssh运行程序时,它不起作用。该变量PYTHONPATH未设置,因为.bashrc它不是源变量。 ssh somehost ~/some/path/somescript.py 如果我运行ssh somehost 'source ~/.bashrc; ~/some/path/somescript.py',它将正常运行。 但是后者不适用于其他一些人,例如,使用tcsh却根本不使用a ~/.bashrc)。 通过ssh在适用于所有shell的另一台主机上运行事物的命令是什么?

1
Bash尝试编写两个shell提示?
我正在查看连接到终端的正在运行的bash进程的strace输出,以进行教学。 我的bash进程具有PID 2883。 我输入 [OP@localhost ~]$ strace -e trace=openat,read,write,fork,vfork,clone,execve -p 2883 2> bash.strace 进入终端。然后,我进入bash流程,并进行以下交互: [OP@localhost ~]$ ls 看输出,我看到 strace: Process 2883 attached read(0, "l", 1) = 1 write(2, "l", 1) = 1 read(0, "s", 1) = 1 write(2, "s", 1) = 1 read(0, "\r", 1) = 1 write(2, "\n", 1) …
11 bash  tty  strace 

1
为什么不能为while循环反转输入重定向操作符的顺序?
在Bash中,您可以将输入重定向操作符移动到命令的前面: cat <<< "hello" # equivalent to <<< "hello" cat 为什么while循环无法执行相同的操作? while read -r line; do echo "$line"; done <<< "hello" # hello <<< "hello" while read -r line; do echo "$line"; done # -bash: syntax error near unexpected token `do' 我发现这有点令人困惑,因为您可以使用while循环。我是在做错什么还是仅仅是设计决定?

5
gzip是原子的吗?
是gzip原子的吗? 如果gzip在gzip压缩文件的过程中停止该过程,会发生什么情况? 如果它不是原子的,并且已经在gzip *.txt进程中按了Ctrl + C ,如何安全地恢复? (我不仅对如何恢复感到好奇,而且还对是否gzip特别是原子性感到好奇。)

3
为什么sh(不是bash)抱怨.bashrc中定义的函数?
打开终端会话时,我得到了这个: sh:导入“ read.json”的函数定义时出错 sh:导入“ ts-project”的函数定义时出错 sh不喜欢这些功能,因为它们看起来像: read.json(){ :: } 和 ts-project(){ :: } 真正的问题是-为什么要sh触摸/解释这些文件?我在MacOS上,以前曾经看过,这真是个谜。我认为只有bash会加载这些文件。 更新:bash和sh并没有什么不同。当我在终端中输入bash时,得到以下信息: alex$ bash beginning to load .bashrc finished loading .bashrc bash-3.2$ 当我sh在终端输入时,得到以下信息: alex$ sh sh: error importing function definition for `read.json' sh: error importing function definition for `ts-project' sh-3.2$

2
为什么没有文件插入系统调用
据我了解,在Linux中,只有用于操纵文件的sys_write syscall才会覆盖文件内容(或扩展到文件末尾)。 为什么在Linux中没有用于在文件中插入或删除内容的系统调用? 由于当前所有文件系统都不需要将文件存储在连续的内存块中,因此应该有可能实现高效的实现。(文件将变得碎片化。) 由于文件系统具有“写时复制”或“透明文件压缩”功能,因此当前插入内容的方式似乎效率很低。

2
为什么使用这种bash管道结构会丢失数据?
我正在尝试合并一些这样的程序(请忽略任何额外的包含,这是繁重的工作): pv -q -l -L 1 < input.csv | ./repeat <(nc "host" 1234) 重复程序的来源如下所示: #include <fcntl.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/epoll.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> #include <iostream> #include <string> inline std::string readline(int fd, const size_t len, const char delim = '\n') { std::string …

1
POSIX sed对于地址范围从已删除的行开始的“ 1d; 1,2d”有什么要求?
在对这个问题的评论中,出现了一个案例,其中各种sed实现在一个相当简单的程序上存在分歧,而我们(或至少我)无法确定规范对它的实际要求。 问题是从删除行开始的范围的行为: 1d;1,2d 即使在到达该命令之前删除了范围的开头,也应该删除第2行吗?我最初的期望是与BSD sed一致,“否”,而GNU sed说“是”,并且检查规范文本并不能完全解决问题。 符合我期望的是(至少)macOS和Solaris sed以及BSD sed。(至少)GNU和Busybox意见不同sed,这里有很多人。前两个通过SUS认证,而其他两个可能更广泛。哪种行为是正确的? 两个地址范围的规范文本显示: 然后,sed实用程序应按顺序应用其地址选择该模式空间的所有命令,直到命令开始下一个周期或退出为止。 和 具有两个地址的编辑命令应从与第一个地址匹配的第一个模式空间到与第二个地址匹配的下一个模式空间选择包含范围。[...]从选定范围后的第一行开始,sed将再次寻找第一个地址。此后,应重复该过程。 可以说,第2行是 内,不管开始点是否已删除“从通过相匹配的第二下一图案空间匹配的第一个地址中的第一图案空间包容范围”。另一方面,我希望第一个d继续进行下一个周期,而不给该范围一个开始的机会。UNIX™认证的实现可以实现我期望的功能,但可能不会达到规范的要求。 一些说明性的实验遵循,但关键的问题是:什么应该 sed在范围上已删除的行开始呢? 实验与范例 这个问题的简化展示是,它打印行的额外副本而不是删除它们: printf 'a\nb\n' | sed -e '1d;1,2p' 这提供sed了两行输入,a和b。该程序执行两件事: 用删除第一行1d。该d命令将 删除模式空间并开始下一个循环。和 从1到2中选择行范围,并明确打印出来,除了自动打印每行接收到的内容。因此,该范围内的一行应出现两次。 我的期望是应该打印 b 仅,由于不应用该范围,因为1,2在第1行期间从未达到该范围(因为已经d跳至下一个循环/行),因此范围内的包含从未被开始,a而已被删除。通常,sed与macOS和Solaris 10 兼容的Unix会产生此输出,与sedSolaris和BSD sed中的非POSIX一样。 另一方面,GNU sed打印 b b 表示它已经解释了范围。这在POSIX模式下都不会发生。Busybox的sed具有相同的行为(但并非总是相同的行为,因此它似乎不是共享代码的结果)。 进一步的实验 printf 'a\nb\nc\nd\ne\n' | sed -e '2d;2,/c/p' printf 'a\nb\nc\nd\ne\n' | …
11 sed  posix 

6
在特定日期关闭
我知道您可以通过安排特定时间的关机,shutdown -h 21:45并且由于其重复性,您不应该将crontabs用于此类事情。如何安排在特定日期(例如8月31日下午20:00)关闭?
11 ubuntu  shutdown 

2
删除所有在定界符前没有n个字符的行
我有一个很长的文本文件(从此处开始),其中应包含6个十六进制字符,然后是一个“ break”(显示为一个字符,在下面的代码降价中似乎无法正确显示),然后是几个单词: 00107B Cisco Systems, Inc 00906D Cisco Systems, Inc 0090BF Cisco Systems, Inc 5080 Cisco Systems, Inc 0E+00 ASUSTek COMPUTER INC. 000C6E ASUSTek COMPUTER INC. 001BFC ASUSTek COMPUTER INC. 001E8C ASUSTek COMPUTER INC. 0015F2 ASUSTek COMPUTER INC. 2354 ASUSTek COMPUTER INC. 001FC6 ASUSTek COMPUTER INC. 60182E ShenZhen Protruly Electronic …

5
如何分类人类可读的大小
我基本上是在寻找文件,然后按大小排序。如果我不按照人类可读的大小对脚本进行排序,那么该脚本就可以工作。但我希望尺寸能被人类读取。如何排序人类可读的尺寸? 例如: ls -l | sort -k 5 -n | awk '{print $9 " " $5}' 这按预期工作,我得到的文件大小以字节为单位递增: 1.txt 1 test.txt 3 bash.sh* 573 DocGeneration.txt 1131 andres_stuff.txt 1465 Branches.xlsx 15087 foo 23735 bar 60566 2016_stuff.pdf 996850 现在,我希望该大小能被人类读取,因此我在ls中添加了-h参数,现在某些文件出现了故障: ls -lh | sort -k 5 -n | awk '{print $9 " " $5}' …
11 find  ls  sort 

2
Bash脚本仅应杀死已启动的另一个脚本的实例
在当前情况下,某个脚本“ calling.sh”会在后台启动另一个脚本“ call.sh”,执行其他操作,休眠一会儿,然后以a终止“ call.sh” pkill called.sh。这很好。 然后,我还想在其他任何时候从其他终端以独立脚本的形式启动“ call.sh” ,无论是在启动calling.sh之前还是之后。这些独立的实例不应被“ calling.sh”杀死。 我该如何实现?直觉说,调用脚本应该能够告诉进程它是从与此同时运行的任何其他同名开始的。 作为变体,“ calling.sh”也可以启动“被调用”,这是“被调用.sh” 的符号链接。这会使上述情况的管理复杂化吗?使用符号链接需要进行哪些特定的警告和调整?
11 bash  process 


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.