Unix & Linux

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

2
比较时间的好方法?
我需要检查当前时间,如果不是我应该运行它的一天中的适当时间,则中止脚本。另外,如果其他任何人运行它,它都应该中止。 例如:我需要脚本仅在10 PM到2 AM(4小时窗口)之间启动时才能运行。 目前,我正在执行以下操作。花时间date +%k%M与硬编码进行比较 #!/bin/sh currTime=`date +%k%M` check_time_to_run() { tempTime=$1 if [ $tempTime -gt 200 -a $tempTime -lt 2200 ]; then echo "Time is between 2 AM and 10 PM. Aborting." exit 1 else echo "Time is after 10 PM and before 2 AM. Running normally." fi } …

4
您如何将信息页面输出为pdf?
如果man -t ls | ps2pdf - > ls.pdf对ls通过ps2pdfpdf 输出手册页有用,那信息页呢? 我已经尝试过类似以下的方法,但是没有成功: info -o info | ps2pdf - > info.pdf 所有这些操作就是输出一个名为info.pdf的空白pdf文件,并将正文输出到一个文本文件中。
10 pdf  man  info 

1
在不失去控制的情况下更改远程主机IP地址(Linux)
我怎样才能改变一个远程主机的主 IP地址,而不会断开所有(没有“无IP地址”状态)。 根据我的研究,此事在Internet上讨论不多。我发现的最佳资源有些棘手。 示例:将10.0.0.11/24更改为10.0.0.15/24 1. ssh root@10.0.0.11 2. ip addr add 10.0.0.15/24 dev eth0 3. logout 4. ssh root@10.0.0.15 5. ip addr del 10.0.0.11/24 dev eth0 问题:由于10.0.0.11是主要地址,所以最后一个命令将同时删除IP地址和连接丢失,并且在删除后会删除其辅助地址(10.0.0.15属于该地址)。 我知道我可以通过添加10.0.0.11/ 25(而不是24)来“作弊” 。但是,我认为从理论上讲是可以做到的。 你怎么看?
10 linux  ip  routing 

3
按下Escape键时关闭大写锁定
有没有什么办法来禁用CapsLock,只要Esc被按下。是的,我使用VIM!我实际上有另一种全大写字母键盘布局,Ctrl-6但是我觉得它很麻烦,并且宁愿只在Esc按下该按钮时才使操作系统禁用CapsLock 。另外,我经常通过SSH进入其他服务器几个小时,所以我在那儿有股票VIM。 请注意,我碰巧已经交换了CapsLock和Esc键。但是,当Esc按键被按下时(恰好CapsLock在键盘上贴了标签并且在旁边A),我需要它同时执行Escape和Disable-CapsLock-If-It-Is-Enabled。 这是在Kubuntu 12.10上。谢谢。
10 keyboard  xkb  kubuntu 

5
bash中路径名称的模式匹配
我想对目录中的子目录列表进行操作。考虑: for x in x86-headers/*/C/populate.sh; do echo $x; done 这给 x86-headers/elf/C/populate.sh x86-headers/gl/C/populate.sh x86-headers/gmp/C/populate.sh x86-headers/gnome2/C/populate.sh x86-headers/gtk2/C/populate.sh x86-headers/jni/C/populate.sh x86-headers/libc/C/populate.sh 但我想值对应于路径的第二部分 elf,gl等我知道如何去掉领先x86-headers。 for x in x86-headers/*/C/populate.sh; do i=${x##x86-headers/}; echo $i; done 这使 elf/C/populate.sh gl/C/populate.sh gmp/C/populate.sh gnome2/C/populate.sh gtk2/C/populate.sh jni/C/populate.sh libc/C/populate.sh 我也知道如何删除路径中的后续术语。即下降一级: cd x86-headers for x in */C/populate.sh; do i=${x%%/*}; echo $i; done 给 elf …


2
为什么$'\ 0'与''相同?
处理几个文件的一种常见方法是-不要为此而生: for f in $(ls); do … 现在,为了防止带有空格或其他奇怪字符的文件,一种幼稚的方法是: find . -type f -print0 | while IFS= read -r -d '' file; … 此处-d ''是,用于将ASCII NUL设置为的缩写-d $'\0'。 但是为什么会这样呢?为什么''和$'\0'一样?是因为Bash的C根目录带有空字符串始终以空值结尾吗?
10 bash 

2
“ grep -r foo *”与“ grep -r foo”。
使用grep -r时,您可以使用*或。搜索所有文件。似乎返回了相同的东西,但是真的一样吗? 假设我搜索“ foo”,那么我可以写 grep -r foo * 要么 grep -r foo . 有人会尝试解释两者之间的区别吗?和*?
10 grep  wildcards 

2
处理从find命令通过管道传输的文件名
我是Bash的新手,正在尝试做一些表面上看起来很简单的事情-在目录层次结构上运行find以获取所有* .wma文件,将输出管道传输到命令,然后将它们转换为mp3并将转换后的文件另存为.mp3。我的想法是该命令应如下所示(我不再使用音频转换命令,而是使用echo作为示例): $ find ./ -name '*.wma' -type f -print0 | xargs -0 -I f echo ${f%.*}.mp3 据我了解,-print0 arg将允许我处理具有空格的文件名(其中许多文件是音乐文件)。然后,我期待(由于xargs的原因)find中的每个文件路径都在f中捕获,并且使用子字符串match / delete从字符串末尾开始,我应该用mp3回显原始文件路径扩展名而不是wma。但是,我看到的不是这个结果,而是: *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 ... 所以我的问题(除了特定的“我在这里做错了什么”之外)是吗?在字符串操作操作中,是否需要对管道操作结果所产生的值与变量赋值所导致的值进行不同的处理? ?

4
列出当前PATH中的所有文件/二进制文件
有没有一种“简便”的方式来运行“ ls -la”样式的命令,以列出当前PATH中的所有文件/可执行二进制文件? (我打算将输出通过管道传递到grep,以查找前缀未知但基本已知的“名称”的命令,这种情况下,bash中的自动补全/制表符实际上是无用的。因此,某种形式的“反向自动完整功能” ...)
10 bash  ls  path  autocomplete 

1
交互式外壳在孤立的流程组中应该做什么?
(根据/programming/13718394/what-should-interactive-shells-do-in-orphaned-process-groups中的建议在UNIX中重新发布) 简短的问题是,如果外壳程序位于不拥有tty的孤立进程组中,它应该怎么办?但我建议阅读冗长的问题,因为这很有趣。 这是一种有趣且令人兴奋的方法,可以使用您喜欢的外壳将笔记本电脑变成便携式太空加热器(除非您是那些tcsh怪人之一): #include <unistd.h> int main(void) { if (fork() == 0) { execl("/bin/bash", "/bin/bash", NULL); } return 0; } 这导致bash将CPU固定在100%。zsh和fish的作用相同,而ksh和tcsh则对工作控制含糊其辞,然后再进行龙骨化处理,这虽然好一些,但效果不明显。哦,这是与平台无关的违规者:OS X和Linux都受影响。 我的解释(可能是错误的)如下:子外壳检测到它不在前台:tcgetpgrp(0) != getpgrp()。因此,它试图停止自身:killpg(getpgrp(), SIGTTIN)。但是它的进程组是孤立的,因为它的父级(C程序)是领导者并死亡,并且SIGTTIN发送给孤立进程组的操作只是被丢弃(否则什么也无法再次启动它)。因此,子外壳并没有停止,但是它仍然在后台,因此马上就可以再次执行所有操作。冲洗并重复。 我的问题是,命令行外壳程序如何检测到这种情况?正确的做法是什么?我有两个解决方案,都不是理想的: 尝试通知其pid与我们的组ID匹配的进程。如果使用失败ESRCH,则表明我们很可能成为孤儿。 尝试从中无阻塞读取一个字节/dev/tty。如果使用失败EIO,则表明我们很可能成为孤儿。 (我们跟踪此问题的是https://github.com/fish-shell/fish-shell/issues/422) 感谢您的想法!

4
不活动后autofs挂载不会断开
我在几个Linux服务器上安装了autofs,这些服务器正在连接到用户/ home目录的中央NFS服务器。在登录时挂载目录时,它的工作效果很好,但挂载似乎从未超时。我已经检查了/ etc / sysconfig / autofs,并且默认确实设置为300,所以这些应该在5分钟后超时。 重新启动autofs不会卸载所有目录,因此我知道它可以。 我尝试在目录上随机使用lsof,但是任何时候都没有打开文件。 我还安装了一个我不知道它处于活动状态的随机目录,但是这些目录从未卸载自己。其中一些服务器有10个以上的用户登录一次,而且安装数量从未下降。 我只是想找出一种更好的方法来找出原因。我在任何日志中都没有看到任何特定的内容。 任何建议表示赞赏。谢谢! 更新 我打开了对autofs的调试,但似乎并没有发现任何异常。这些日志是在最初安装/ home / user1 7分钟后和6分钟不活动后生成的。根据默认的5分钟,应该已将其卸载。我从未见过日志表明该尝试甚至试图卸载。 Jan 11 12:52:00 linux automount[26505]: st_expire: state 1 path /home Jan 11 12:52:00 linux automount[26505]: expire_proc: exp_proc = 3055176592 path /home Jan 11 12:52:00 linux automount[26505]: expire_proc_indirect: expire /home/user1 Jan 11 12:52:00 …
10 rhel  mount  nfs  autofs 


4
如何编写sed单线在每第三个字符后添加一个字符?
所以,我有一个看起来像这样的字符串: AUGGCCAUGGCGCCCAGAACUGAGAUCAAUAGUACCCGUAUUAACGGGUGA 我想将字符串分成3个字符的块,并用'+'号分隔。 AUG+GCC+AUG+GCG+CCC+AGA+ACU+GAG+AUC+AAU+AGU+ACC+CGU+AUU+AAC+GGG+UGA 我想和我的好朋友做到这一点sed。 我试过了 cat codons | sed -r 's/([A-Z]\{3\})/\1\+/g' ...没有成功。 我sed可以使用什么命令?

2
来自另一个目录的tar文件而不复制它们
对于这里的专家来说,这应该非常简单。 我有一个Linux帐户,用户磁盘配额仅为6GB。/opt当压缩达到1GB时,其中包含一些数据文件夹,其中包含约3GB的数据。中有一些符号链接data-folder。通常,为了进行工作备份,我通常执行以下操作。 cp -rvfL /opt/data-folder ~/ cd ~/ tar -zcvf data-folder.tar.gz data-folder rm -rvf data-folder 现在我已经消耗了2.5GB的用户磁盘配额,我只有足够的空间来将文件复制到我的家中,但不能tar再复制到我的家中。 有什么方法可以通过单个命令(例如,使用管道)将tar复制和复制文件夹。 附言:我无法/opt读入,因为我只有对的读取权限/opt。
10 files  tar  cp 

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.