Articles of unix

删除指定时间以前的所有文件并logging其function

我一直在努力这一段时间,经过大量的search决定是时候从专家的帮助。 我试图删除目录中的所有文件/filestodelete并在/filestodelete文件中记下他们,到目前为止,我已经想出了: find /filestodelete -mtime +93 -exec sh -c 'rm -rfv {}' > "/something/deletions.log" 当我尝试运行这个时,收到的错误是: find: missing argument to `-exec' (我把/something/deletions.log放在引号中,因为它实际上可能有空格 – 它被另一个bash脚本调用)。 在此先感谢您的帮助。

将非标准字符写入Linux命令行

我遇到了一些问题。 为了做我正在尝试的,我需要能够input纯hex值到命令行的标准input(特别是在程序内部的gets()调用),而不使用IOredirect。 我通常使用ctrl + u +数字来input相当于input的hex值的ascii字符,但是我需要能够input空字符/退格/等,terminal要么忽略或解释为一个动作,而不是一个字符。 如果我使用pipe道或IOredirect,则在初始input和程序closures后无法与程序交互。 有没有人有任何想法? 我想可能的解决scheme是: find一种方法来手动input字符,并保留它们 find一种方法来input的字符不是Unicode或ASCII,但仍将被接受为字节信息 find一种方法来将inputredirect到从命令行解释的程序,然后以某种方式说服它将input的控制立即返回到命令行 第三个我什至不知道是可能的或有用的,因为我不完全确定为什么程序不工作,如果它从任何东西,但直接从命令行获取信息,我所知道的是,我必须手动input否则它不会运行。 有没有人有任何想法的3个选项,或任何其他你可以想到的? 我很难过 (哦,如果有人可以解释为什么有时Ctrl + U +数字输出与input数字完全不同的hex值的字符,我很好奇,但我不认为它会帮助我反正目前的问题。)

查找生成的核心转储的可执行文件

有没有一种方法可以将版本信息(如git commit hash)embedded到ELF可执行文件中,从而可以从其生成的核心转储中检索它?

绕过Linux集群网关 – 直接从您的桌面节点

从我的桌面我通常执行这个命令去linux群集: 我有这个在我的.bash_profile alias gothere="ssh -i ~/.ssh/id_rsa_macmini_mine pdubois@thelinux.cluster.co.jp" 然后用它调用它去到集群: dhcp190-206:~ pdubois-macmini$ gothere Last login: Tue Mar 25 15:41:03 2014 from dhcp190-206.mycompany-u.ac.jp [pdubois@thelinuxcluster ~]$ 然后,一旦我到达该群集的网关,我再次这样做去节点: alias blogin="bsub -Is -q intj bash -l" 调用这种方式去节点: [pdubois@thelinuxcluster ~]$ blogin Job <221825> is submitted to queue <intj>. <<Waiting for dispatch …>> <<Starting on clusternode61>> [pdubois@clusternode61 ~]$ 我的问题是,有没有办法将上述两步简化为一步? 这样我就可以从我的桌面直接进入群集节点。

在expect脚本中包含#include

所以我在使用期望脚本制作TestCases时遇到了麻烦,我有10个TestCases,它们都以相同的“函数”(例如login和注销或closures某些标志)开始和结束,是否有可能包含它们或从我的远程执行它们脚本,像spawn login.exp甚至更好地把他们的function? TC01.exp #!/usr/bin/expect -f set timeout 5 #example of getting arguments passed from command line.. #not necessarily the best practice for passwords though… set server [lindex $argv 0] set user [lindex $argv 1] set pass [lindex $argv 2] set no [lindex $argv 3] set counter 0 # connect to server via ssh, login, and […]

理解sed命令中的正则expression式

我正在学习Sed,我一直在敲我的脑袋,理解这个命令一个小时,下面是我书中的例子: $ sed -n -e '/^[^|]*|[^|]*|56/w dpt_56' -e '/^[^|]*|[^|]*|89/w dpt_89' tel2.txt $ cat dpt_56 Karama Josette|256 rue de la tempete|56100|Lorient|85.26.45.58 Zanouri Joel|45/48 boulevard du Gard|56100|Lorient|85/56/45/58 $ cat dpt_89 Joyeux Giselle|12. rue de la Source|89290|Vaux|45.26.28.47 她是我所理解的: – 这个命令的目的是在dpt_56文件中存储来自56 …区的人的行,对于dpt_89的89区也是如此。 我不明白的是“|”的目的或效果 和“^”字符在正则expression式=>什么做^[^|]*|[^|]*|56是什么意思? 我所看到的只是“select不以零次或几次开始的每一行”|“或者有几次没有时间”|“但是我感到困惑。

find_task_by_pid()的替代方法

我需要访问我的系统调用中给定的PID任务。 显然,函数find_task_by_pid()是在较早版本的Linux内核中为此目的服务的。 它似乎只有functionsearch任务与新的内核(如3.13)可用的pid是find_task_by_vpid()。 对于给定的pid,调用此函数是否会返回与前一个函数相同的任务? (虚拟(本地)PID是什么意思?)如果没有,是否有相当于find_task_by_id()的函数?

基于Unix的shell相对于退出subprocess的默认行为?

我正在实现一个基于Unix的基本shell。 shell维护一个在后台运行的subprocess列表,并停止进程。 如果退出shell: shell是否会杀死在后台运行/停止的所有subprocess? 要么 shell是否简单地忽略在后台或停止状态下存在的subprocess,只能在以后被init使用? 请注意,我需要知道Unix shell的确切行为。 我在这里find了答案,但仍然没有谈到Unix shell的确切实现。

Cronjob不运行bash脚本

我写了一个小脚本来检查openvpn是否正在运行,如果没有运行,就启动它。 这是我正在运行的脚本 #!/bin/bash **-x** ps auxw | grep openvpn | grep -v grep > /dev/null if [ $? != 0 ] then /etc/init.d/openvpn start > /dev/null log="/root/ServerRestart.log" echo "The Openvpn Server was restarted at\n" > $log date >> $log fi 这里是crontab: * * * * * /root/vpnmonitor.sh 它显示在syslog中,它运行的脚本,但它似乎并没有实际执行,脚本从terminal运行时工作正常。

Bash脚本parsingHTML文件

我正在使用shell脚本来获取FedEx软件包的跟踪信息。 当我执行脚本的时候,我传递了跟踪号码(我在互联网上find一个虚拟号码),并使用curl: #$1=797843158299 curl -A Mozilla/5.0 -b cookies -s "https://www.fedex.com/fedextrack/WTRK/index.html?action=track&action=track&action=track&tracknumbers=$1=1490" > log.txt curl命令的输出是HTML代码,我需要的信息是在标记行之间: <!–TRACKING CONTENT MAIN–> <div id="container" class="tracking_main_container"></div> 在部分是我需要parsing的交付信息。 我对脚本相当陌生,并且尝试了一些我在网上find的“sed”build议,但是没有任何东西可以工作。