查看文章 |
一些常用命令
2009-11-09 22:07
3.如何在某个目录及其所属子目录的所有文件中查找字符串? 在程序维护过程中,有时需要在某个目录及其所属子目录的所有文件中查找某一个字符串, 为此可用下面两种方法(假设在*.cp文件中查找字符串"abc",结果放在文件out中): (1)cat /dev/null > out find ./ -name "*.cp" -exec grep "abc"{} >> out (2)find ./ -name "*.cp" | xargs grep "abc" > out 推荐使用第二种方法,因其系统开销小、速度快。 ******************************************************************************** cat/more/less cat [-n] filename : 将 filename 的内容读进来,显示在标准输出上。 问题在於 cat 它是不会停下来的,因此并不好用 more filename 如果你在使用中觉得已经看到了所要看的部份,可以按'q'离开 more 的使用。 less 的用法与 more 极类似,原先它就是为了弥补 more 只能往前方卷页的缺 点而设计。 less 的用法如下: less filename 其与 more 不同的是它可以按 y 来往上卷一行,并且可以用"?"来往回搜寻你所 要找的单字。 ******************************************************************************** tail -f filename 文件更新时可以自动显示 ******************************************************************************** typeset 1,无选项的执行typeset,则显示所有变量 2:typeset的-u选项可以将一个变量的字符变成大写 3:typeset的-l选项将一个变量的字符变成小写 4:typeset的-L选项把变量变成一个左对齐的4个字符串,有些像字符串截取 :-) /home/lee#typeset -L4 var=abcdefg /home/lee#echo $var abcd 5:typeset的-R选项把变量变成一个右对齐的4个字符串 /home/lee#typeset -R4 var=abcdefg /home/lee#echo $var defg 6:typeset的-Z选项把串变成一个空填充,占15个字符位的串,冒号用来保护空白符 /home/lee#typeset -Z15 var="abc ddd" /home/lee#echo "$var" ^^^^^^^^abc ddd #^为空白 /home/lee#typeset -LZ15 var="abc 123" /home/lee#echo "$var$var" abc 123 abc 123 7:变量n是一个被设置成一个整数的变量,typeset命令将整数n前面补齐0,共15个字符位 /home/lee#typeset -i n=24 /home/lee#typeset -Z15 n /home/lee#echo $n 24 8:变量answer被给定一个值--Yes并变成一个小写,左对齐,一个字符的串 /home/lee#typeset -lL1 answer=Yes /home/lee#echo $answer y typeset其他用法: typeset -i num #强制num为一个整数,如: /home/lee#typeset -i num=10 /home/lee#echo $num 10 /home/lee#typeset -i16 num=10 /home/lee#echo $num 16#a /home/lee#typeset -i2 num=10 /home/lee#echo $num 2#1010 /home/lee#typeset -i8 num=10 /home/lee#echo $num 8#12 typeset -x #显示被导出的变量 typeset a b c #如果在一个函数里定义,则把a b c创建为局部变量 typeset -r x=var#设置一个只读变量 ******************************************************************************** 1. ps ps 是用来显示目前你的 process 或系统 processes 的状况。 以下列出比较常用的参数: 其选项说明如下: -a 列出包括其他 users 的 process 状况。 -u 显示 user - oriented 的 process 状况 。 -x 显示包括没有 terminal 控制的 process 状况 。 -w 使用较宽的显示模式来显示 process 状况 。 -e 显示所有进程。 -f 全格式。 我们可以经由 ps 取得目前 processes 的状况,如 pid , running state 等。 2. kill kill 指令的用途是送一个 signal 给某一个 process 。因为大部份送的都是 用来杀掉 process 的 SIGKILL 或 SIGHUP ,因此称为 kill 。kill 的用法 为: kill [ -SIGNAL ] pid ... kill -l SIGNAL 为一个 singal 的数字,从 0 到 31 ,其中 9 是 SIGKILL ,也就是一 般用来杀掉一些无法正常 terminate 的讯号。其馀讯号的用途可参考 sigvec(2) 中对 signal 的说明。 你也可以用 kill -l 来察看可代替 signal 号码的数目字。kill 的详细情形 请参阅 man kill。 ******************************************************************************** 2. grep/fgrep grep 为一过滤器,它可自一个或多个档案中过滤出具有某个字串的行,或是 自标准输入过滤出具有某个字串的行。 fgrep 可将欲过滤的一群字串放在某一个档案中,然後使用 fgrep 将包含有 属於这一群字串的行过滤出来。 grep 与 fgrep 的用法如下: grep [-nv] match_pattern file1 file2 .... fgrep [-nv] -f pattern_file file1 file2 .... -n 把所找到的行在行前加上行号列出 -v 把不包含 match_pattern 的行列出 match_pattern 所要搜寻的字串 -f 以 pattern_file 存放所要搜寻的字串 ******************************************************************************** 指令名稱: touch(1) - 更新檔案的時間紀錄 說明: 藉由這個指令,我們可以同時或單獨變更檔案的兩種時間紀錄,讀取時間(access time)以及修改時間(modification time)。 選項: #NAME? 更改文件的讀取時間(access time) -c, --no-create 不建立任何新檔案 #NAME? 更改文件的修改時間(modification time) #NAME? 設定"特定時間"來代替"目前時間",格式 [[CC]YY]MMDDhhmm[.ss] #N/A 顯示程式用法資訊 #N/A 顯示程式本身的版本資訊 實例說明: 空檔案 # touch file-touch1 # ls -l total 0 -rw-r--r-- 1 root root 0 7月 9 13:53 file-touch1 # 一般狀況下使用 touch 指令變更檔案時間,如果檔案不存在,touch 會自動建立指定的檔案(空檔案)。如果不想因使用 touch 而建立任何新檔案,必須加上選項 -c # touch -c file-touch2 touch: setting times of `file-touch2': 沒有此一檔案或目錄 # 指令的執行結果是出現一段錯誤訊息,因為指定的檔案不存在。這正是加上選項 -c 的目的。 更新檔案時間 touch 指令一般是以下指令當時的電腦時間來作為更新檔案的時間。但也提供特殊的選項 -t 來 指定"特定的時間"作為更新時間。 為了舉例的方便,我原封不定地,拷貝一隻已建檔許久的系統程式 -- tcsh # cp -a /bin/tcsh . # ls --full-time total 288 -rwxr-xr-x 1 root root 288604 週一 6月 25 03:45:26 2001 tcsh # 這隻程式的最後修改時間是 -- 2001 年 6 月 25 日 3 點 45 分 26 秒。 現在,我因監控上的需要,打算將檔案時間變更為 2002 年 7 月 1 日 8 點 00 分 01 秒。最簡單有效的作法如下 # touch -t 200207010800.01 tcsh # ls --full-time total 288 -rwxr-xr-x 1 root root 288604 週一 7月 01 08:00:01 2002 tcsh 選項的語法很單純,就是直接鍵入西元的年月日時分數字即可,其間不需任何分隔。如果要加上秒數,做法比較特別,需使用小點"."來與前段區隔。 當然,在有需要時,touch 指令也支援"讀取時間"或"修改時間"的單獨變更。 # touch -at 200207022300 tcsh # ls -lu total 288 -rwxr-xr-x 1 root root 288604 7月 2 23:00 tcsh # 上例是單獨變更"讀取時間", 下例則是變更"修改時間" # touch -mt 200206302300 tcsh # ls -l total 288 -rwxr-xr-x 1 root root 288604 6月 30 23:00 tcsh # ls -lu total 288 -rwxr-xr-x 1 root root 288604 7月 2 23:00 tcsh # 以上這些例子,即是大體上 touch 的運用。這篇就暫時先寫到這裡好了。 本文出自 51CTO.COM技术博客******************************************************************************** 查看当前用户信息 #id |
最近读者: