Unix & Linux

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


2
为什么“命令1> file.txt 2> file.txt”的行为与“命令1> file.txt 2>&1”不同?
当您要将stdout和stderr都重定向到同一文件时,可以使用command 1>file.txt 2>&1或来实现command &>file.txt。但是,为什么行为command 1>file.txt 2>file.txt与以上两个命令不同? 以下是验证命令。 $ cat redirect.sh #!/bin/bash { echo -e "output\noutput" && echo -e "error" 1>&2; } 1>file.txt 2>&1 { echo -e "output\noutput" && echo -e "error" 1>&2; } 1>file1.txt 2>file1.txt { echo -e "error" 1>&2 && echo -e "output\noutput"; } 1>file2.txt 2>file2.txt { echo -e …

3
为什么Linux网络流量仅通过eth0?
我在服务器端有两个网卡eth0?192.168.8.140和eth1吗?192.168.8.142。客户端将数据发送到192.168.8.142,我希望iftop显示eth1的流量,但不会。所有网络都通过eth0,那么如何测试两个NIC? 为什么所有流量都经过eth0而不是eth1?我希望每个接口可以得到1 Gbit / s。我的设置或配置出了什么问题? 服务器 ifconfig eth0 Link encap:Ethernet HWaddr 00:00:00:19:26:B0 inet addr:192.168.8.140 Bcast:0.0.0.0 Mask:255.255.252.0 inet6 addr: 0000::0000:0000:fe19:26b0/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:45287446 errors:0 dropped:123343 overruns:2989 frame:0 TX packets:3907747 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:66881007720 (62.2 GiB) TX bytes:261053436 (248.9 MiB) Memory:f7e00000-f7efffff eth1 …

1
找到匹配项后Grep缓慢退出?
我正在尝试编写一个bash脚本来轮询btmon的设备连接。我有一个可行的解决方案,但是它的运行速度非常慢,而且看起来grep在找到匹配项(约25秒)后退出非常慢。我怎样做才能加快速度grep或完全避免使用它? #!/bin/bash COUNTER=0 while : do until btmon | grep -m 1 '@ Device Connected' do : done let COUNTER=COUNTER+1 echo on 0 | cec-client RPI -s -d 1 sleep 5 echo as | cec-client RPI -s -d 1 until btmon | grep -m 1 '@ Device Disconnected' do : …
20 bash  grep 




3
我如何确定我的sudoer权限是否超时?
我正在研究一个脚本,该脚本以sudo身份运行命令,并且仅在我的sudo特权超时时才回显一行文本,因此,只有在运行sudo命令时,才需要我的用户(不是root用户)再次输入其密码。 我该如何验证?请注意,$(id -u)即使以sudo的身份运行时,也会返回我当前的用户ID,因此无法检查以使其与0匹配... 我需要一种可以静静检查的方法。
20 sudo 

1
POSIX在命令替换内对此处引用的文档有何要求?
在此问题中,有人报告了一个使用here文档的问题,该文档在$(...)命令替换中使用带引号的定界符单词,其中\文档内部行末尾的反斜杠触发换行-换行,而在命令替换之外的相同here文档可以按预期工作。 这是一个简化的示例文档: cat <<'EOT' abc ` def ghi \ jkl EOT 这包括在行尾包含一个反引号和一个反斜杠。用引号引起来,因此主体内部不会发生扩展。在所有与伯恩相似的地方,我都能找到逐字逐句输出的内容。如果我将相同文档放在命令替换中,如下所示: x=$(cat <<'EOT' abc ` def ghi \ jkl EOT ) echo "$x" 然后它们不再表现相同: dash,ash,zsh,ksh93,BusyBox的ash,mksh,和SunOS 5.10 POSIX sh都给予该文件的逐字内容,如前。 Bash 3.2针对不匹配的反引号给出了语法错误。使用匹配的反引号,它尝试将内容作为命令运行。 Bash 4.3将“ ghi”和“ jkl”折叠到一行上,但是没有错误。该--posix选项不影响此。Kusalananda 告诉我(谢谢!)的pdksh行为也是如此。 在最初的问题中,我说这是Bash解析器中的错误。是吗?[更新:是 ]我可以从POSIX(全部来自Shell命令语言定义)中找到相关文本: §2.6.3命令替换: 使用$(command)格式,在右括号后到匹配的右括号后的所有字符构成命令。可以将任何有效的Shell脚本用于命令,但仅由重定向组成的脚本会产生未指定的结果。 §2.7.4此处文档: 如果对单词的任何部分加引号,则应通过对单词执行引号删除来形成定界符,并且此处文档行不得扩展。 第2.2.1节转义符(反斜杠): 如果<newline>跟在<backslash>之后,则外壳程序应将其解释为行继续。在将输入拆分为令牌之前,应删除<backslash>和<newline>。 §2.3令牌识别: 当io_here标记已被语法识别时(请参见Shell Grammar),紧接在下一个NEWLINE标记之后的一个或多个后续行构成一个或多个here-document的主体,并应根据Here-rule的规则进行解析-文件。 当不处理io_here时,外壳程序应通过将下面的第一个适用规则应用于其输入中的下一个字符,将其输入分解为令牌。... ... 如果当前字符是<反斜杠>,单引号或双引号,并且未加引号,则它将影响到后续字符的引号,直到引号文本的末尾。对引用的规则中所描述的引用。在令牌识别期间,不得实际执行任何替换,并且结果令牌应完全包含输入中出现的字符(<newline>联接除外),且未修改,包括在末尾之间的任何嵌入式或封闭引号或替换运算符。引用文字的内容。 …

4
使用`eval echo'总是安全吗?
eval通常不建议使用,因为它允许执行任意代码。但是,如果使用eval echo,则看起来字符串的其余部分将成为的参数,echo因此应该是安全的。我对此是否正确?
20 bash  echo 

2
压缩的硬盘图像很大
我只是使用此命令制作了一个新安装的双引导(Ubuntu和Windows)的映像(我已经使用了一段时间以获取较小的映像): dd if=/dev/sda | gzip > /mnt/drive.img.gz 在该驱动器上,使用不到500G中的60G。不过,该映像文件现在为409G。 那个怎么样?gzip是否不应该压缩所有这些零?如我所说,它是一个全新安装的系统。不会那么混乱。 现在我没想到文件大小是60G,但是400G对我来说似乎非常大。

3
Unix时间/官方时间在哪里测量?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Unix&Linux Stack Exchange 的主题。 3年前关闭。 免责事项: 我只是浏览了StackExchange网站列表约20分钟,试图弄清楚将其发布在何处。如果您知道任何更合适的网站,请在此提出问题。我将其发布在这里是因为Unix时间让我思考。 因此,众所周知,有unix时间,也有UTC。Unix时间一直在滴答滴答地计时,以秒为单位(每秒一秒),而UTC则尝试将时间保持在人类可读取的格式中,以与地球自转的相位保持一致。为此,UTC会不时插入leap秒。 由于时间是与重力有关的,因此经历时间的物体会受到其他加速度和相对速度的影响,因此这就引出了两个问题。让我们先简单一点:Unix时间在哪里测量?如果爱丽丝和鲍勃开始同意在同一地点的当前时间是1467932496.42732894722748(当然,一秒定义为9'192'631'770辐射周期,对应于铯133的两个能级之间的转换)原子在静止和0 K时),由于爱丽丝生活在海平面上而鲍勃生活在高山上,或者爱丽丝生活在北极,而鲍勃生活在赤道上,则经历了一个孪生悖论,他们不再同意了。那么,Unix时间如何精确定义? 您最初可能不会看到UTC的问题,因为肯定每个人都可以就地球何时完成轨道达成共识(这当然忽略了大陆板块的运动,但是我认为我们已经很好地弄清楚了这一点,因为使用GPS可以测量其运动非常精确,我们可以假设它们在模型中处于固定位置,并且不会随着大陆板块的移动而移动),无论它们是在高山上,在海平面上,在赤道上还是在北极上。可能会有一些时差,但不会累积。 但是第二秒被定义为9'192'631'770的辐射周期,对应于静止和0 K时铯133原子的两个能级之间的跃迁,而铯133原子并不关心地球的轨道。所以UTC决定在哪里插入一个闰秒,但是,必须有地球轨道的相位和测得的时刻之间的测量或预测移位某处由原子钟。那是哪里
20 timestamps  time 

4
如何使用Wayland自定义键盘映射
我在带有UK / GB键盘的Macbook上使用Linux,并自定义了键盘映射,以解决Apple奇怪的键盘布局引起的一些问题。我xmodmap经常这样做。我想尝试Wayland,但xmodmap不行。在Wayland中如何获得类似的结果?.Xmodmap我使用的文件包含以下内容: keycode 12 = 3 numbersign 3 sterling sterling sterling threesuperior sterling clear Control clear Mod4 add Control = Control_L Super_R add Mod4 = Super_L keysym Caps_Lock = NoSymbol Caps_Lock 第1行:在英国键盘上Shift- 3是£,因此#通常在附近有自己的键Return。但是在Mac上,#是通过Altgr- 获得的3。作为程序员,我使用的#远远超过£,所以这行将它们交换了过来。选择美国布局也可以实现这一点,但是在Linux中这样做还可以交换其他一些常用的键,而在OS X中,这些其他键不受美国/英国的影响。 第2-5行:将右键Cmd用作Right- Ctrl,因为此键盘没有物理右键Ctrl。 第6行:CapsLock仅当按时才起作用Shift。不是Mac专用的,这应该是所有OS和键盘的标准选项。

2
我可以自定义sudo“将报告此事件”消息吗?
在Linux或BSD系统上,是否可以自定义sudo“将报告此事件”消息?我已经在man sudo和man sudoers一个Ubuntu 16.04的机器,一台FreeBSD 10.2机器,并在Fedora 23的机器上,我还没有发现任何有用的东西。
20 sudo 

2
嵌套的双引号在投票很高的单行代码中
一个具有> 3.5K票数的StackOverflow 答案具有此一类功能,可用于分配给DIR当前bash脚本的目录: DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 我对嵌套的双引号感到困惑。据我所知,以下片段被双引号括起来: "$( cd " "${BASH_SOURCE[0]}" " && pwd )" ...,而=()$( dirname和())右边的其他所有内容均未引用。换句话说,我假设第二,第四和第六个"字符分别“关闭”了第一,第三和第五个"字符。 我知道"${BASH_SOURCE[0]}"实现了双引号,但是其他两对双引号的目的是什么? 另一方面,(尽管获得较高的投票分数)上述片段不正确,那么实现其名义意图的正确方法是什么? (按名义意图,我的意思是:将pwd第一个cd-ing 之后的返回值收集到由返回的目录中dirname "${BASH_SOURCE[0]}",并cd在子外壳中执行-ing,以便$PWD父外壳的保持不变。)

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.