重现步骤:
germar@host:~$ cd /tmp/
germar@host:/tmp$ touch test && chmod u+s test && ls -la test
-rwSr--r-- 1 germar germar 0 Nov 2 20:11 test
germar@host:/tmp$ chown germar:germar test && ls -la test
-rw-r--r-- 1 germar germar 0 Nov 2 20:11 test
Run Code Online (Sandbox Code Playgroud)
使用 Debian 挤压和 Ubuntu 12.04 进行测试
我有一个大(~60G)的压缩文件(tar.gz)。
我曾经split把它分成 4 部分,然后cat将它们重新连接在一起。
但是,现在,当我尝试估计未压缩文件的大小时,结果发现它比原始文件小?这怎么可能?
$ gzip -l myfile.tar.gz
compressed uncompressed ratio uncompressed_name
60680003101 3985780736 -1422.4% myfile.tar
Run Code Online (Sandbox Code Playgroud) 使用iproute2用户空间工具,可以使用ip命令动词link show(有时缩写为l sh)来显示网络设备。
输出生成不显示链接/接口设备的类型。
root@box:/# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether bc:97:e1:58:10:18 brd ff:ff:ff:ff:ff:ff
3: eno1np0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether bc:97:e1:58:10:1a brd ff:ff:ff:ff:ff:ff
4: eno2np1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop …Run Code Online (Sandbox Code Playgroud) 考虑以下命令:
sudo -i bash -c 'A=2; echo "|${A}|"; echo "|$A|";'
Run Code Online (Sandbox Code Playgroud)
当我在 Debian Linux 上运行它时,它会bash 4.2.37打印sudo 1.8.5p2:
|2|
|2|
Run Code Online (Sandbox Code Playgroud)
但是当我在 MacOS High Sierra 上运行它时,bash 3.2.57它sudo 1.8.17p1会打印:
|2|
||
Run Code Online (Sandbox Code Playgroud)
$A为什么没有花括号就不显示?
-i如果省略该选项,则不会发生这种情况- 两者2都会被打印。bash如果我只是跑而不经过,就不会发生这种情况sudo。
在回答SO 问题时遇到了这种行为。那里的回答者正在运行 Linux,并且bash 4.3.48得到sudo 1.8.16了丢失的输出。所以看起来它与sudo版本有关(或者可能是/etc/sudoers他的 Linux 和我的 Mac 的共同点)。
我正在通过 sed 从时钟输出管道以从数字中删除前导零。它看起来像这样:
clock -sf 'S%A, %B %d. %I:%M %P' | sed 's/\b0\+\([0-9]\+\)/\1/g'
Run Code Online (Sandbox Code Playgroud)
这工作正常并产生我想要的输出。
但是,当我尝试将输出重定向到文件时,文件中没有写入任何内容。以下不起作用。
clock -sf 'S%A, %B %d. %I:%M %P' | sed 's/\b0\+\([0-9]\+\)/\1/g' > testfile
Run Code Online (Sandbox Code Playgroud)
没有任何内容写入测试文件。我究竟做错了什么?
对于我的 powerlevel10k 自定义提示,我目前有此功能来显示自纪元以来的秒数,以逗号分隔。我将它显示在当前时间下,这样我总是有一个提示来大致记住当前纪元时间是什么。
function prompt_epoch() {
MYEPOCH=$(/bin/date +%s | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')
p10k segment -f 66 -t ${MYEPOCH}
}
Run Code Online (Sandbox Code Playgroud)
有人告诉我可以使用以下命令在没有分叉进程的情况下执行此操作:
$ zmodload -F zsh/datetime p:EPOCHSECONDS
$ printf "%'d" $EPOCHSECONDS
1,648,943,504
Run Code Online (Sandbox Code Playgroud)
但我不确定如何在不分叉的情况下做到这一点。我知道在获取 powerlevel10k 之前zmodload在 my 中添加该行,但是我不知道如何在没有 fork 的情况下进行格式化。~/.zshrc${EPOCHSECONDS}
如果我按照我知道的方式做,这就是我会做的:
function prompt_epoch() {
MYEPOCH=$(printf "%'d" ${EPOCHSECONDS})
p10k segment -f 66 -t ${MYEPOCH}
}
Run Code Online (Sandbox Code Playgroud)
但据我了解,每次调用提示时仍然会分叉一个进程,对吗?我是否误解了给出的建议,因为我认为我无法找到一种方法来获取最新纪元秒数而不运行某种需要分叉的进程,对吗?
我有一个这样的文件,用制表符分隔两列:
ENSG00000242268.2 0.07563
ENSG00000270112.3 0.09976
ENSG00000167578.15 4.38608
ENSG00000273842.1 0.0
ENSG00000078237.5 4.08856
Run Code Online (Sandbox Code Playgroud)
我想从第一列的末尾删除数字扩展名,因此输出将是:
ENSG00000242268 0.07563
ENSG00000270112 0.09976
ENSG00000167578 4.38608
ENSG00000273842 0.0
ENSG00000078237 4.08856
Run Code Online (Sandbox Code Playgroud)
简单地做sed 's/\..*$//'只返回第一列值,并使用与AWK字段分隔符'.',awk -F'.'去除从第二列中的值也作为有十进制数。
这里已经回答了一个类似的问题: removing extensions in a column
我仍然无法仅从第 1 列中删除。
如果我的 Ubuntu 系统上的条件为真,我想设置一个变量。
这证明我的 if 语句是正确的:
$ (if [ 1 == 1 ]; then echo "hi there"; fi);
hi there
Run Code Online (Sandbox Code Playgroud)
这证明我可以设置变量:
$ a=1
$ echo $a
1
Run Code Online (Sandbox Code Playgroud)
这表明在 if 语句中设置变量不起作用:
$ (if [ 1 == 1 ]; then a=2; fi);
$ echo $a
1
Run Code Online (Sandbox Code Playgroud)
任何想法为什么?我所有的谷歌研究表明它应该像这样工作......
我有一个 for 循环和 case 语句。for 循环有相当多的元素列表,case 语句将分配一个一维数组或一个向量。这些值将在之后的 for 循环中使用。我有以下代码。
发生的情况是 for 循环仅针对向量中的第一个值执行此操作。例如,如果 f=C,则情况为“C”) isotope=(6012 6013);;
for n in $isotope:它仅循环 6012,而不循环 6013。与 f=Ce 相同的问题,它仅循环 58136,而不循环其余部分。
# loop through elements
for f in C Ce
do
cd ${f}
case $f in
"Al") isotope=(13027) ;;
"C") isotope=(6012 6013);;
"Ce") isotope=(58136 58138 58140 58142);;
esac
for n in $isotope
do
....# loop through elements
for f in C Ce
do
cd ${f}
case $f in
"Al") isotope=(13027) ;;
"C") isotope=(6012 6013);;
"Ce") isotope=(58136 58138 …Run Code Online (Sandbox Code Playgroud)