Unix & Linux

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

3
如何从shell中检查stdin是否为/ dev / null?
在Linux上,shell脚本是否可以检查其标准输入是否从空设备(1,3)*重定向,理想情况下不读取任何内容? 预期的行为将是: ./checkstdinnull -> no ./checkstdinnull < /dev/null -> yes echo -n | ./checkstdinnull -> no EDIT mknod secretunknownname c 1 3 exec 6<secretunknownname rm secretunknownname ./checkstdinnull <&6 -> yes 我怀疑我“只是”需要读取输入设备的maj / min号。但是我找不到从外壳执行此操作的方法。 *没有必要/dev/null,但是任何空设备,即使使用手动创建也是如此mknod。
9 linux  shell  devices  stdin 

1
为什么ps *非常*偶尔无法找到有效的进程?
我遇到了一个奇怪的问题,即使ps -o args -p <pid>命令确实在所讨论的服务器上运行,命令也偶尔会找不到所讨论的进程。有问题的进程是用于启动某些Java应用程序的长期运行的包装器脚本。 该问题的“疯狂”现象似乎总是在清晨发生,因此有证据表明,该问题与所讨论的服务器上的磁盘负载有关,因为那时它们负载很重,但是通过运行psin在一个紧密的循环中提出问题,我最终可以重现该问题-每运行几百次,我就会收到一个错误。 通过运行以下bash脚本,我成功为失败和成功的运行生成了strace输出: while [ $? == 0 ] ; do strace -o fail.out ps -o args -p <pid> >/dev/null ; done ; strace -o good.out ps -o args -p <pid> 输出从比较fail.out和good.out,我可以看到getdents失败不知何故在运行系统调用返回比对过程系统的实际数量要少很多(与〜1100相比〜500级) grep getdents good.out getdents(5, /* 1174 entries */, 32768) = 32760 getdents(5, /* 31 …
9 linux  ps  procfs 

1
在控制台中与上一个回显相同的位置打印某些内容,并带有负向回显
在bash中,您可以强制转换为clear清除所有屏幕命令的命令。 并且,echo您可以在屏幕上打印任何内容。 在我的简单脚本中,我经常需要打印命令执行的百分比。 所以我可以做类似的事情。 echo "89%" echo "90%" echo "91%" 等等.. 我讨厌让屏幕充满百分比更新... 89% 90% 91% ... 我想了解的是是否有特殊的字符组合(例如“ \ 033 [01; 31m”),可以通过bash或php echo进行回显,并告诉控制台“删除上一个先前打印的字符。” 通过使用类似这样的方法:(php示例) echo str_repeat($neg_character, strlen($last_percentage_update_string)); echo $new_percentage_update_string; 我将把新的字符串打印在上一个字符串的确切位置上,而无需在屏幕上充满一行 否则,我会寻找一种始终使用bash和php脚本以其他方式执行相同操作的方法(请至少使用debian9控制台和php7包括实际的工作示例)
9 linux  bash  php  console 

4
升级到Debian测试(Buster)后,PulseAudio无法识别Intel HDA
从Debian 9稳定版升级到Debian 10测试后的整个夏天,我注意到一个问题:PulseAudio不再识别我的Intel HDA音频设备。当时我能够切换到通过nVidia HDMI连接的显示器的音频,因此我回避了问题,希望将来进行更新以解决该问题。他们没有。很快过去了几个月,我已经重新布置了工作区,现在需要让Intel HDA重新工作。 到目前为止,这是我看过的东西 Debian 10测试 内核看到它: # dmesg | grep HDA [ +0.005509] input: HDA Intel PCH Front Mic as /devices/pci0000:00/0000:00:1b.0/sound/card0/input17 [ +0.000073] input: HDA Intel PCH Rear Mic as /devices/pci0000:00/0000:00:1b.0/sound/card0/input18 [ +0.000057] input: HDA Intel PCH Line as /devices/pci0000:00/0000:00:1b.0/sound/card0/input19 [ +0.000054] input: HDA Intel PCH …

3
在read驱动的while循环中使用read作为提示?
我有一个用例,我需要在每次迭代开始时读入多个变量,并将用户的输入读入循环。 我不知道如何探索的解决方案的可能路径- 对于分配,请使用另一个文件句柄而不是stdin 使用for循环而不是... | while read ......我不知道如何在for循环内分配多个变量 echo -e "1 2 3\n4 5 6" |\ while read a b c; do echo "$a -> $b -> $c"; echo "Enter a number:"; read d ; echo "This number is $d" ; done

4
Linux如何识别用户?
我的意思是,如果两个用户具有相同的名称,那么系统在强制执行文件权限时如何知道他们实际上是不同的用户? 在考虑/home/old-arch重新安装系统之前要重命名我的家时,这个疑问浮现在脑海(我拥有/home自己的分区,并且不格式化它),这样我便可以拥有一个全新的原始文件/home/arch。我想知道新系统是否会向我授予文件的旧权限,或者它是否会将我识别为其他人arch。

5
在知道字符串的一部分的情况下查找字符串并返回字符串
例如,我有一个字符串 "Icecream123 AirplaneBCD CompanyTL1 ComputerYU1" 假设我知道我的字符串肯定包含子字符串IceCream,但我不知道它后面是什么。 在我的示例中,它可能是123,或者可能有所不同。 虽然我可以使用grep通过以下命令来检测字符串中是否存在“ Icecream”子字符串 echo $string | grep -oF 'Icecream'; 哪个会打印 Icecream 我想要一个命令来打印整个子字符串,在我的示例中是 Icecream123 当然,冰淇淋发生后的情况是随机的,并且事先未知,所以我不能做 $SUBSTRING=$(echo $string | grep -oF 'Icecream') $SUBSTRINGTRAIL=123 echo $SUBSTRING$SUBSTRINGTRAIL

3
如何从文件末尾删除最后一个逗号分隔符?
如何在Linux上的文件中删除最后一个逗号分隔符? 文件示例: "is_supported_kafka_ranger" : "true", "kafka_log_dir" : "/var/log/kafka", "kafka_pid_dir" : "/var/run/kafka", "kafka_user" : "kafka", "kafka_user_nofile_limit" : "128000", "kafka_user_nproc_limit" : "65536", 预期成绩: "is_supported_kafka_ranger" : "true", "kafka_log_dir" : "/var/log/kafka", "kafka_pid_dir" : "/var/run/kafka", "kafka_user" : "kafka", "kafka_user_nofile_limit" : "128000", "kafka_user_nproc_limit" : "65536"


3
在Debian 9上手动安装新内核的正确方法是什么?
我没有足够的信心单独执行此操作,并冒着服务器无法启动等风险。 我想从以下版本升级内核: $ uname -r 4.9.0-6-amd64 $ uname -v #1 SMP Debian 4.9.88-1+deb9u1 (2018-05-07) 到内核​​版本4.15或4.16。无论您推荐哪个。 我只是想知道如何列出可用的版本: $ apt-cache search linux-image | grep amd64 linux-headers-4.9.0-6-amd64 - Header files for Linux 4.9.0-6-amd64 linux-headers-4.9.0-6-rt-amd64 - Header files for Linux 4.9.0-6-rt-amd64 linux-image-4.9.0-6-amd64 - Linux 4.9 for 64-bit PCs linux-image-4.9.0-6-amd64-dbg - Debug symbols for linux-image-4.9.0-6-amd64 …
9 debian  kernel 

4
如何在许多大文件中找到重复的行?
我有约3万个文件。每个文件包含约10万行。一行不包含空格。单个文件中的行已排序并免费重复。 我的目标:我想找到两个或多个文件中所有重复的行,以及包含重复条目的文件的名称。 一个简单的解决方案是: cat *.words | sort | uniq -c | grep -v -F '1 ' 然后我会运行: grep 'duplicated entry' *.words 您看到更有效的方法了吗?


3
如何使用逗号分隔列表作为下一个命令的参数
我有一个脚本s1,输出以','分隔的数字列表1,2,3,4。现在,我想将这些数字s2作为参数提供给脚本,以便s2将在每个数字上运行并在单独的行中输出其结果。例如,如果s2将数字乘以2,这就是我要查找的结果: 2 4 6 8 我现在正在做的是: s1 | xargs -d "," | xargs -n1 s2 但是我觉得我这样做是愚蠢的!所以我的问题是: 正确的做法是什么? 我的解决方案的问题在于,它两次调用xargs并两次对输入进行迭代,这当然对我来说是不合理的。答案xargs -d "," -n1似乎不错,但我不确定是否只重复一次。如果是这样,请在您的回答中确认这一点,我会接受。顺便说一句,我宁愿不使用Perl,因为它仍在迭代两次,而且Perl在许多系统上可能不存在。
9 pipe  xargs  arguments 

3
如何验证我使用9.9.9.9 for DNS?
我的局域网上有几台计算机。其中大多数基于Ubuntu。路由器具有DD-WRT(v3.0-r33675M kongac版本:11/03/17)固件。 我已将DHCP设置为为所有计算机提供网络设置。路由器已设置为将9.9.9.9用于DNS服务器。 现在,我想验证我的计算机是否正在使用Quad9进行DNS,但是我无法这样做。我的计算机仅看到路由器,并且不知道它正在使用哪个DNS。 例如,命令(在Ubuntu中) sudo netstat -l --inet -n -v -p | grep :53 | grep -i udp 给 udp 0 0 127.0.1.1:53 0.0.0.0:* 因此,我无法验证我是否以这种方式使用了Quad9。 路由器无法识别此命令,因此无法以这种方式验证DNS设置。 我已经在计算机和DD-WRT命令行中尝试了这篇文章中的内容,但是没有帮助: 我使用的是什么DNS服务器? 如何正确验证我在使用Quad9进行DNS?
9 ubuntu  dns  dd-wrt 

1
坏块值得信赖吗?
我找不到任何关于坏块实际上认为是坏块的信息。我已经阅读了手册页,并在此处查看了很多问题,但是我找不到具体的问题。另外,坏块有多好?我应该相信结果吗?我的公司过去曾在Hirens Boot CD上使用Victoria来测试硬盘,但这在较新的计算机上并不总是一个好的选择。

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.