Linux Command

http://bblove1234.blog.ubuntu.org.cn/category/linux-實踐記錄/

Diff 創建軟件補丁,用patch 打補丁

歸類於: UNIX SHELL 日誌 — harry199 @ 12:51 pm

diff 是生成源碼補丁的必備工具。其命令格式爲:
diff [命令行選項] 原始文檔 新文檔
常用命令行選項如下:
-r 遞歸處理目錄     -u 輸出統一格式(unified format)
-N patch 裏包含新文檔  -a patch 裏能夠包含二進制文檔
他的輸出在stdout 上,所以您可能需要把他重定向到一個文檔。
輸出格式保存了上下文(缺省是上下各三行,最少需要兩行),這樣,patch 的時候能夠允許行號不精確匹配的情況出現。另外,在 patch 文檔的開頭明確地用—和+++標示出原始文檔和當前文檔,也方便閱讀。
通常,我們需要對整個軟件包做修改,並生成一個patch 文檔,下面是典型的操作過程。
tar xzvf software.tar.gz # 展開原始軟件包, 其目錄爲
software
cp -a software software-orig # 做個修改前的備份
cd software   [修改,測試……]
cd ..
diff -ruNa software-orig software > software-my.patch
現在我們就能夠保存software-my.patch 做爲這次修改的結果,至於原始軟件包,能夠不必保存。等到下次需要再修改的時候,能夠用patch 命令把這個補丁打進原始包,再繼續工作。比如是在linux kernel 上做的工作,就不必每次保存幾十兆修改後的源碼了。這是好處之一,好處之二是維護方便,由於unified patch 格式有一定的模糊匹配能力,能減少原軟件包升級帶來的維護工作量。
patch
patch 程式根據補丁(patch)文檔修改一個文檔。補丁文檔通常是使用diff 程式建立的一個列表,這個列表包含如何修改原始文檔的一些指令。由於節省時間和空間,Patch 經常用於源代碼的修補。能夠想象一個有1MB 的程式包,這個程式包的下一個版本僅僅改變了前面一個版本的兩個文檔的內容,這個新版本能夠完全以一個1MB 的新版本進行發佈或以一個僅僅有1KB 的補丁文檔進行發佈。這個補丁文檔能夠對第一個版本的進行更新,更新後的版本就和第二個版本完全一致了。因此,假如已下載了第一個版本,那麼爲了下一個版本而進行的大數據量下載工作就能夠有效地避免。
常用命令行選項;
patch [命令行選項] [待patch 的文檔[patch]]
-pn patch level(n 是數字) -b[後綴] 生成備份,缺省是.orig 爲了說明什麼是patch level,這裏看一個patch 文檔的頭標記。
diff -ruNa xc.orig/config/cf/Imake.cf xc.bsd/config/cf/Imake.cf
— xc.orig/config/cf/Imake.cf Fri Jul 30 12:45:47 1999   +++ xc.new/config/cf/Imake.cf Fri Jan 21 13:48:44 2000
這個patch 假如直接應用,他會去找xc.orig/config/cf 目錄下的Imake.cf 文檔,假如您的源碼樹的根目錄是缺省的xc 而不是 xc.orig,除了mv xc xc.orig 之外,有無簡單的方法應用此patch 呢?patch level 就是爲此而設:patch 會把目標路徑名砍去開頭 patch level 個節(由/分開的部分)。在本例中,能夠用下述命令:
cd xc;
patch -p1 patch20020523.patch
遞歸的比較目錄 dir1 和 dir2 內,任何各文檔之不同處,並將不同處記錄到patch20020523.patch 文檔中。
patch -p1

2008-06-04

Vlinux_Windows下的shell子集(方便與日常文本處理)

歸類於: LINUX 實踐記錄 — harry199 @ 11:21 am

結合cygwin製作出的Vlinux小工具

包含有常用linux命令,awk、grep等正則表達式的相關處理功能

Windows的設定:

環境變量上添加Vlinux的解壓路徑後,

即可在cmd命令行上使用 ~

FIND 命令詳解

歸類於: LINUX 實踐記錄UNIX SHELL 日誌 — harry199 @ 11:04 am

find  path  -option  [  -print ]  [ -exec  -ok  command ]  {} /;
#-print 將查找到的文件輸出到標準輸出
#-exec  command  {} /;     —–將查到的文件執行command操作,{} 和 /;之間有空格
#-ok 和-exec相同,只不過在操作前要詢用戶

====================================================

-name  filename             #查找名爲filename的文件
-perm                       #按執行權限來查找
-user   username            #按文件屬主來查找
-group groupname            #按組來查找
-mtime  -n +n               #按文件更改時間來查找文件,-n指n天以內,+n指n天以前
-atime   -n +n              #按文件訪問時間來查
-perm                       #按執行權限來查找
-user   username            #按文件屬主來查找
-group groupname            #按組來查找
-mtime  -n +n               #按文件更改時間來查找文件,-n指n天以內,+n指n天以前
-atime   -n +n              #次募夢適奔淅牀檎椅募?n指n天以內,+n指n天以前
-ctime   -n +n              #按文件創建時間來查找文件,-n指n天以內,+n指n天以前
-nogroup                    #查無有效屬組的文件,即文件的屬組在/etc/groups中不存在
-nouser                     #查無有效屬主的文件,即文件的屬主在/etc/passwd中不存
-newer  f1 !f2              找文件,-n指n天以內,+n指n天以前
-ctime   -n +n              #按文件創建時間來查找文件,-n指n天以內,+n指n天以前
-nogroup                    #查無有效屬組的文件,即文件的屬組在/etc/groups中不存在
-nouser                     #查無有效屬主的文件,即文件的屬主在/etc/passwd中不存
-newer  f1 !f2              #查更改時間比f1新但比f2舊的文件
-type    b/d/c/p/l/f        #查是塊設備、目錄、字符設備、管道、符號鏈接、普通文件
-size     n[c]              #查長度爲n塊[或n字節]的文件
-depth                      #使查找在進入子目錄前先行查找完本目錄
-fstype                     #查更改時間比f1新但比f2舊的文件
-type    b/d/c/p/l/f        #查是塊設備、目錄、字符設備、管道、符號鏈接、普通文件
-size     n[c]              #查長度爲n塊[或n字節]的文件
-depth                      #使查找在進入子目錄前先行查找完本目錄
-fstype                     #查位於某一類型文件系統中的文件,這些文件系統類型通常可 在/etc/fstab中找到
-mount                      #查文件時不跨越文件系統mount點
-follow                     #如果遇到符號鏈接文件,就跟蹤鏈接所指的文件
-cpio                     #查位於某一類型文件系統中的文件,這些文件系統類型通常可 在/etc/fstab中找到
-mount                      #查文件時不跨越文件系統mount點
-follow                     #如果遇到符號鏈接文件,就跟蹤鏈接所指的文件
-cpio                       #對匹配的文件使用cpio命令,將他們備份到磁帶設備中
-prune                      #忽略某個目錄

====================================================
$find  ~  -name  “*.txt”  -print    #在$HOME中查.txt文件並顯示
$find  .   -name  “*.txt”  -print
$find  .   -name  “[A-Z]*”  -pri26nbsp;   #對匹配的文件使用cpio命令,將他們備份到磁帶設備中
-prune                              #忽略某個目錄

=====================================================
$find  ~  -name  “*.txt”  -print    #在$HOME中查.txt文件並顯示
$find  .   -name  “*.txt”  -print
$find  .   -name  “[A-Z]*”  -print  #查以大寫字母開頭的文件
$find  /etc  -name  “host*”  -print #查以host開頭的文件
$find  .  -name  “[a-z][a-z][0--9][0--9].txt”   -print  #查以兩個小寫字母和兩個數字開頭的txt文件
$find .  -perm  755  -print
$find  .  -perm -007  -exec ls -l {} /;  #查所有用戶都可讀寫執行的文件同-perm 777
$find  . -type d  -print
$find  .  !  -type  d  -print
$find  .  -type l  -print

$find  .  -size  +1000000c  -print       #查長度大於1Mb的文件
$find  .  -size  100c        -print      # 查長度爲100c的文件
$find  .  -size  +10  -print             #查長度超過期作廢10塊的文件(1塊=512字節)

$cd /
$find  etc  home  apps   -depth  -print  | cpio  -ivcdC65536  -o  /dev/rmt0
$find  /etc -name “passwd*”  -exec grep  “cnscn”  {}  /;  #看是否存在cnscn用戶
$find . -name “yao*”  | xargs file
$find  . -name “yao*”  |  xargs  echo   “” > /tmp/core.log
$find  . -name “yao*”  | xargs  chmod  o-w

======================================================

find  -name april*                      在當前目錄下查找以april開始的文件
find  -name  april*  fprint file        在當前目錄下查找以april開始的文件,並把結果輸出到file中
find  -name ap* -o -name may*  查找以ap或may開頭的文件
find  /mnt  -name tom.txt  -ftype vfat  在/mnt下查找名稱爲tom.txt且文件系統類型爲vfat的文件
find  /mnt  -name t.txt ! -ftype vfat   在/mnt下查找名稱爲tom.txt且文件系統類型不爲vfat的文件
find  /tmp  -name wa* -type l           在/tmp下查找名爲wa開頭且類型爲符號鏈接的文件
find  /home  -mtime  -2                 在/home下查最近兩天內改動過的文件
find /home   -atime -1                  查1天之內被存取過的文件
find /home -mmin   +60                  在/home下查60分鐘前改動過的文件
find /home  -amin  +30                  查最近30分鐘前被存取過的文件
find /home  -newer  tmp.txt             在/home下查更新時間比tmp.txt近的文件或目錄
find /home  -anewer  tmp.txt            在/home下查存取時間比tmp.txt近的文件或目錄
find  /home  -used  -2                  列出文件或目錄被改動過之後,在2日內被存取過的文件或目錄
find  /home  -user cnscn                列出/home目錄內屬於用戶cnscn的文件或目錄
find  /home  -uid  +501                 列出/home目錄內用戶的識別碼大於501的文件或目錄
find  /home  -group  cnscn              列出/home內組爲cnscn的文件或目錄
find  /home  -gid 501                   列出/home內組id爲501的文件或目錄
find  /home  -nouser                    列出/home內不屬於本地用戶的文件或目錄
find  /home  -nogroup                   列出/home內不屬於本地組的文件或目錄
find  /home   -name tmp.txt   -maxdepth  4  列出/home內的tmp.txt 查時深度最多爲3層
find  /home  -name tmp.txt  -mindepth  3  從第2層開始查
find  /home  -empty                     查找大小爲0的文件或空目錄
find  /home  -size  +512k               查大於512k的文件
find  /home  -size  -512k               查小於512k的文件
find  /home  -links  +2                 查硬連接數大於2的文件或目錄
find  /home  -perm  0700                查權限爲700的文件或目錄
find  /tmp  -name tmp.txt  -exec cat {} /;
find  /tmp  -name  tmp.txt  -ok  rm {} /;

find   /  -amin   -10       # 查找在系統中最後10分鐘訪問的文件
find   /  -atime  -2         # 查找在系統中最後48小時訪問的文件
find   /  -empty              # 查找在系統中爲空的文件或者文件夾
find   /  -group  cat        # 查找在系統中屬於 groupcat的文件
find   /  -mmin  -5         # 查找在系統中最後5分鐘裏修改過的文件
find   /  -mtime  -1        #查找在系統中最後24小時裏修改過的文件
find   /  -nouser             #查找在系統中屬於作廢用戶的文件
find   /  -user   fred       #查找在系統中屬於FRED這個用戶的文件

查當前目錄下的所有普通文件
——————————————————————————–

# find . -type f -exec ls -l {} /;
-rw-r–r–    1 root     root        34928 2003-02-25  ./conf/httpd.conf
-rw-r–r–    1 root     root        12959 2003-02-25  ./conf/magic
-rw-r–r–    1 root     root          180 2003-02-25  ./conf.d/README
查當前目錄下的所有普通文件,並在- e x e c選項中使用ls -l命令將它們列出

=================================================
在/ l o g s目錄中查找更改時間在5日以前的文件並刪除它們:
$ find logs -type f -mtime +5 -exec  -ok  rm {} /;

=================================================
查詢當天修改過的文件
[root@book class]# find  ./  -mtime  -1  -type f  -exec  ls -l  {} /;

=================================================
查詢文件並詢問是否要顯示
[root@book class]# find  ./  -mtime  -1  -type f  -ok  ls -l  {} /;
< ls … ./classDB.inc.php > ? y
-rw-r–r–    1 cnscn    cnscn       13709  1月 12 12:22 ./classDB.inc.php
[root@book class]# find  ./  -mtime  -1  -type f  -ok  ls -l  {} /;
< ls … ./classDB.inc.php > ? n
[root@book class]#

=================================================
查詢並交給awk去處理
[root@book class]# who  |  awk  ‘{print $1″/t”$2}’
cnscn   pts/0

=================================================
awk—grep—sed

[root@book class]# df  -k |  awk ‘{print $1}’ |  grep  -v  ‘none’ |  sed  s”///dev////g”
文件系統
sda2
sda1
[root@book class]# df  -k |  awk ‘{print $1}’ |  grep  -v  ‘none’
文件系統
/dev/sda2
/dev/sda1

1)在/tmp中查找所有的*.h,並在這些文件中查找“SYSCALL_VECTOR”,最後打印出所有包含”SYSCALL_VECTOR”的文件名

A) find  /tmp  -name  “*.h”  | xargs  -n50  grep SYSCALL_VECTOR
B) grep  SYSCALL_VECTOR  /tmp/*.h | cut   -d’:'  -f1| uniq > filename
C) find  /tmp  -name “*.h”  -exec grep “SYSCALL_VECTOR”  {}  /; -print

2)find / -name filename -exec rm -rf {} /;
find / -name filename -ok rm -rf {} /;

3)比如要查找磁盤中大於3M的文件:
find . -size +3000k -exec ls -ld {} ;

4)將find出來的東西拷到另一個地方
find *.c -exec cp ‘{}’ /tmp ‘;’

如果有特殊文件,可以用cpio,也可以用這樣的語法:
find dir -name filename -print | cpio -pdv newdir

6)查找2004-11-30 16:36:37時更改過的文件
# A=`find ./ -name “*php”` |  ls -l –full-time $A 2>/dev/null | grep “2004-11-30 16:36:37″

SHELL腳本編程,常用命令說明

歸類於: LINUX 實踐記錄UNIX SHELL 日誌 — harry199 @ 9:50 am

shell中命令行的常用用法

shell執行選項
-n 測試shell script語法結構,只讀取shell script但不執行
-x 進入跟蹤方式,顯示所執行的每一條命令,用於調度
-a Tag all variables for eXPort
-c “string” 從strings中讀取命令
-e 非交互方式
-f 關閉shell文件名產生功能
-h locate and remember functions as defind
-i 交互方式
-k 從環境變量中讀取命令的參數
-r 限制方式
-s 從標準輸入讀取命令
-t 執行命令後退出(shell exits)
-u 在替換中如使用未定義變量爲錯誤
-v verbose,顯示shell輸入行

/************************************************************************************ CMD 代表在shell中以命令行模式執行的shell語法
LANG 代表在shell中的基本shell語法及其用法
TT 代表shell編程中的特殊情況,及其使用方式
/************************************************************************************

#!/bin/ksh shell的 Linux下腳本語言的解釋器(用來說明當前的腳本語言類型)

特殊用法 ^代表行首 $代表結尾

CMD——date得用法: DATE=’date +”%m/%d %T”‘
date +”%m/%d %T”
date +”%y%m%d%H%M”
date +%Y%m%d-%H%M%S
LastExecTime=`date -d “$1 $2″ +”%s”`
LastExecTime=`expr $LastExecTime – 60 /* 5`
date -d “2008/12/12″ OR date -d “2008-12-12″ 顯示字符串的內容而不是NOW當前的時間
%s Displays the number of seconds since January 1, 1970, Coordinated Universal Time (CUT).//

CMD——touch 的用法 -a access time 設定訪問時間
-m modify time 設定修改時間
touch -m -t 09021130 test.txt 以當年爲時間,設置修改時間爲09/02 11:30
qoo@pdm20111[/work/qoo/tmp/wangj]touch -m -t 0602011130 deltmp.sh
qoo@pdm20111[/work/qoo/tmp/wangj]l
-rwxr-xr-x 1 qoo qoo 53 Feb 01 2006 deltmp.sh*

CMD——管道得用法 ps -ef | grep “PDDB”$TARGET”.exec” | grep -v grep | awk ‘{print $2}’`(對指定的進程進行輸出及查詢)

CMD——cut的用法 cut -d 指定與空格和tab鍵不同的域分隔符。
cut -d’:’ -f1 抽出以‘:’爲分隔符的第一個域中的內容
cut -b18- 將文件中每行第18以後字符全部剪出
cut -b18 只剪出每行的第18個字符
- c用來指定剪切範圍,如下所示:
- c 1,5-7 剪切第1個字符,然後是第5到第7個字符。
-c1-50 剪切前5 0個字符。

CMD——uniq的用法 grep SYSCALL_VECTOR /tmp/*.h | cut -d’:’ -f1| uniq > filename
在這裏uniq去除重複的行文本
-c 打印每一重複行的重複次數
uniq -u輸出唯一行 -d 輸出重複行

CMD——tr ” ” “/n” 將空格換成/n

CMD——特殊賦值 kill -USR1 `cat $DIR_WORK/PDDB”$t”.exec.pid`(通過cat命令獲取文件ID並傳參給kill)

CMD——find的用法 find . -name “*.java” -type f -print |xargs grep “BBBB” /dev/null
-type f 爲指定按照正則表達式的方式進行搜索
find . -type f -exec ls -l {} /;
exec選項後面跟隨着所要執行的命令,然後是一對兒{ },一個空格和一個/,最後是一個分號;
find /logs -type f -mtime +5 -exec rm {} /;爲了在/logs目錄中查找更改時間在5日以前的文件並刪除它們;
find . -name system -prune -o -name “*.txt” -type f -print | grep -v “FAILURE_NOTICE.txt” 忽略system目錄,查找當前目錄下txt文件,排除其中的”FAILURE_NOTICE.txt”

CMD——rsh的用法 rsh host -l username 在遠程主機上登陸shell並執行命令
# rsh $clm -l $cluser /usr/local/bin/mvs-ftp -i $tmp1 -o $tmp2
# rsh $clm -l $cluser chmod 666 $tmp2

CMD——ssh的用法 在執行 sshd 之前可以指定它的 port,例如:sshd –p 999
若有安裝 SSL,可以指定 SSL 的 port 443,例如:sshd –p 443
這樣就可以經過 SSL 及 SSH 雙重的保護,但必須去指明使用的 port
ssh –l user –p 443 mouse.oit.edu.tw 才行,若不指明則仍然使用預設的port 22

CMD——expr的用法 用來計算的  $var=expr $var + 1

LANG——路徑變量的賦值 STD=”/prod/qoo” (注意雙引號的作用,亦可不用)
LANG——引用變量 $STD(使用$符加變量名的方式)
LANG——文件包含: . /prod/qoo/run/etc/SONYBIN.def (注意點後有個空格,後面既是所要包含的文件全路徑)
LANG——參數的用法 [ ! -d $DIR_WORK ] 以此爲例進行說明類似的還有
-d 確認文件夾是否存在
-f 具有強制的作用,亦可用來判定文件的存在(不太確定?)普通文件
-t 指定爲交互模式
-L 符號連接
-z 測試變量是否爲空 -z $VAR 當變量爲空是 條件爲真
-w 文件可寫
-r 文件可讀
-s 文件長度大於0、非空
-x 可執行
-eq 等於
-e 測試文件是否存在
-z 空串。
-n 非空串。
LANG——FOR得用法 for TARGET in 0700 (將0700賦予TARGET進行循環,以此類推)
do
done
LANG——if 得用法 if[ ]; then
do something
fi
LANG——wc的用法 wc 幾行匹配,有多少個字,這些字佔用多少字節的空間
-c 有多少個字
-l 只顯示包含匹配字符的行號
-w
LANG——expr index=`expr $index + 1 ` 邏輯運算符 即index=index+1

LANG——cat的特殊用法 cat -v filename //查看文件中的特殊字符
cat -b /etc/named.conf // -b 只能對非空白行進行編號 -n 可以對所有行進行編號

TT——$$ 獲取當前進程號 PID=$$;export PID ($$爲當前的進程ID,通過export關鍵字將進程ID導入環境變量)

TT——讀文件操作 `cat $ResultFile | awk ‘{print $1}’ | sort -u` 從目標$ResultFile文件中讀取數據,輸出第一個域,並去掉多餘行

TT——讀文件的另一種方法 while read LINE
do
echo “$LINE”
:
done <$FILENAME

TT——#@ 傳參 if [[ ${#@} /dev/null 2>&1 &

TT——命令的賦值 使用數字鍵 1 左邊的鍵碼將命令括起來 如:`ls` ,通過此法可獲取命令行的輸出數據

TT——字符串拼串 STSFILE=STA*.txt ,如左邊所示:將任意形式的變量或字符組合在一起

TT—— more PDE50K | more 另一種JOB執行方式,它可以將執行的信息全部的輸出來,並分屏顯示

TT—— let 的用法 let "cun=cun-400" // 執行該條語句

TT—— -mtime n File's data was last modified n*24 hours ago 最後修改時間爲N天前的文件數據

TT—— java -cp -classpath ${JAVA_HOME}/java -Xmx128m -cp ${CLASSPATH} ${JOB} $1 >> $LogFile
將JAVA的classpath加入環境搜索路徑
#java -cp -classpath //set search path for application class and resources
java -X #-X print help on non-standard options

----------------------------------------------------------------------------------------------------------------
#
# AWK COMMAND SHELL中正則表達式之AWK命令
#
----------------------------------------------------------------------------------------------------------------

awk '{print $3,$2}' 抽出第二和第三列中的內容,常配合如下用法 grep ls cat等等
ps -ef | awk '{print $3,$2}'

awk -v tms=$file -v表示爲變量分配一個值

ll | grep haha*.txt | awk '{print $3,$2}'
awk '{split(s,a,fs)}' 在fs上將s分成序列a
如awk 'BEGIN {print split("123#456#678",myarray,"#")}'
以#爲分隔符將字符串劃分成myarray數組
awk -F, '{print $1 "," $3 }' 以,號爲分隔符提取字段 或awk -F',' '{print $1 "," $3 }'

CMD——AWK內置的字符串函數的用法
/******************************************************************
gsub(r,s) 在整個$ 0中用s替代r
gsub(r,s,t) 在整個t中用s替代r
index(s,t) 返回s中字符串t的第一位置
length(s) 返回s長度
match(s,r) 測試s是否包含匹配r的字符串
split(s,a,fs) 在fs上將s分成序列a
sprint(fmt,exp) 返回經fmt格式化後的exp
sub(r,s) 用$0中最左邊最長的子串代替s
substr(s,p) 返回字符串s中從p開始的後綴部分
substr(s,p,n) 返回字符串s中從p開始長度爲n的後綴部分
******************************************************************/

----------------------------------------------------------------------------------------------------------------

關於文件描述符的説明

----------------------------------------------------------------------------------------------------------------

默認情況下始終有3個"文件"處於打開狀態, stdin (鍵盤), stdout (屏幕), and stderr (錯誤消息輸出到屏幕上).
exec 3< $g_tmp1 打開文件$g_tmp1併爲其分配描述符 3
exec <filename 命令會將stdin重定向到文件中. 從這句開始, 後邊的輸入就都來自於這個文件了, 而不是標準輸入了(通常都是鍵盤輸入).

exec 3' date.file

shell中SED命令的用法一 -n 整個文件都打印出來,並且匹配行打印了行號。如果只關心實際行號,使用- e選項。
shell中SED命令的用法二 sed -e 's:%host%:'$hostname':' -e 's:%userid%:'$userid':' -e 's:%passwd%:'$passwd':'
-e 's:%ipaddress%:'$ipaddress':' -e 's:%cluser%:'$cluser':' -e 's:%clpasswd%:'$clpasswd':'
-e 's:%clfile%:'$clfile':' -e 's:%hostfile%:'$hostfile':' -e 's:%hostjcl%:'$hostjcl':'
-e 's:%timeout%:'$timeout':' $template > $tmp1
date >> $G_DATAFILE
以上中 將%host% 替換成$hostname 並送到標準輸出 (完成字符串的替換)

----------------------------------------------------------------------------------------------------------------

TEST COMMAND命令的用法 在bash和pdksh環境中,test命令用來測試條件表達式

----------------------------------------------------------------------------------------------------------------
其用法如下:
test expression
test命令可以和多種系統運算符一起使用。這些運算符可以分爲四類:整數運算符、字符串運算符、文件運算符和邏輯運算符

1) 整數運算符
int1 -eq int2 如果int1 和int2相等,則返回真。
int1 -ge int2 如果int1 大於等於int2,則返回真。
int1 -gt int2 如果int1 大於int2,返回真。
int1 -le int2 如果int 1小於等於int 2,則返回真。
int1 -lt int2 如果int 1小於int2,則返回真。
int1 -ne int2 如果int1 不等於int2,則返回真。
2) 字符串運算符
str1 = str2 如果str1 和str2相同,則返回真。
str1 != str2 如果str1 和str2不相同,則返回真。
-n str 如果str 的長度大於零,則返回真。
-z str 如果str 的長度等於零,則返回真。
3) 文件運算符
-d filename 如果filename 爲目錄,則返回真。
-f filename 如果filename 爲普通的文件,則返回真。
-r filename 如果filename 可讀,則返回真。
-s filename 如果filename 的長度大於零,則返回真。
-w filename 如果filename 可寫,則返回真。
-x filename 如果filename 可執行,則返回真。
4) 邏輯運算符
! expr 如果expr 爲假,則返回真。
expr1 -a expr2 如果expr1 和expr2同時爲真,則返回真。
expr1 -o expr2 如果expr1 或expr2有一個爲真,則返回真。

tcsh中沒有test命令,但它同樣支持表達式。tcsh支持的表達式形式基本上和C語言一樣。
這些表達式大多數用在if和while命令中。

----------------------------------------------------------------------------------------------------------------

COMM COMMAND 説明

----------------------------------------------------------------------------------------------------------------

如果想對兩個有序的文件進行比較,可以使用comm命令。

語法:comm [- 123 ] file1 file2

說明:該命令是對兩個已經排好序的文件進行比較。其中file1和file2是已排序的文件。comm讀取這兩個文件,然後生成三列輸出:僅在file1中出現的行;僅在file2中出現的行;在兩個文件中都存在的行。如果文件名用”- “,則表

示從標準輸入讀取。

選項1、2或3抑制相應的列顯示。例如
comm – 12就只顯示在兩個文件中都存在的行;
comm – 23只顯示在第一個文件中出現而未在第二個文件中出現的行;
comm – 123則什麼也不顯示。

—————————————————————————————————————-

MVS-FTP COMMAND 説明

—————————————————————————————————————-
ftp -i -n 這意味着不要自動登錄,而是關閉交互模式。這使得腳本可以使用user命令進行登錄
-v 表示禁止遠程服務器迴應
ftp -i -n -v 43.17.42.25 <<EOF
user padics padics

ftp -i -n $DEST_HEST<<FTPIT
user anonymous $USER@$THISHOST

—————————————————————————————————————-

用SHELL匹配正則表達式 舉例説明

—————————————————————————————————————-
[0-2][0-4]/{2/}/.[0-2][0-4]/{2/}/.[0-2][0-4]/{2/} // this is a ipadress regular by bash shell

RECORD=`echo $LINE | awk ‘ { if($6~/GET/ && $7~/’”$DMZ_SERVER”‘/ && $7~//_/) printf(”%s”,$4) }’ ` //其中~代表匹配正則表達式,~其後要緊跟正則表達式

2008-01-09

SHELL 文件操作

歸類於: LINUX 實踐記錄 — harry199 @ 4:56 pm

讀取並修改文件最後一行內容

old=hehe.txt
new=haha.txt

line=`cat -n hehe.txt | awk ‘{print $1}’ | tail -1`  //輸出文件行號

$line=expr $line – 1  //排除文件最後一行

out=`head -$line  hehe.txt` >haha.txt //將修改後的內容寫入臨時文件中

echo “new test word” >>haha.txt //追加上最後一行

的新內容

rm $old
mv $new $old  //更換成原來的文件名

2008-01-08

shell 查詢並刪除相關文件

歸類於: LINUX 實踐記錄 — harry199 @ 4:21 pm

UNIX_AIX SHELL

本腳本用於刪除指定目錄下的過期文件,並保留特定文件
過程分爲三步:
1. find命令 查找所要求的 txt 普通文件
2. 可用 xargs ls -l 來將結果以列表形式輸出,並對輸出列表中的內容進行排查 如:grep -v “FAILURE_NOTICE.txt”
其中 grep -v “./system/” 用來排查不需要處理的路徑
3. 最後通過系統調用 xargs 或 -exec 來執行刪除操作

find . -name “*txt” -type f -print | xargs ls -l | grep -v “FAILURE_NOTICE.txt” | grep -v system | awk ‘{print $9}’ | xargs rm -rf

find . -name “*txt” -type f -print | grep -v “FAILURE_NOTICE.txt” | grep -v “./system/” | xargs rm -rf

注:KSH上的以上操作爲

 find . -name system -prune -o -name “*.txt” -type f -print | grep -v “FAILURE_NOTICE.txt”

詳細內容請參考附件

2007-12-11

redhat 9 分辨率的調節

歸類於: LINUX 實踐記錄 — harry199 @ 8:22 pm

IBM R32 筆記本安裝 Redhat 9 出現 屏幕分辨率爲800×600 而不能調節的問題。
經過調查及實踐,現將解決辦法整理如下:
1. 爲了便於操作,ROOT 圖形界面,在 /etc/X11/XF86Config 目錄或 /etc/XF86config 目錄下找到 XF86config,用 Vi 打開,便於編輯.
  Section “Monitor”
  Identifier “Monitor0″
  VendorName “Monitor Vendor”
  ModelName “未探測過的顯示器”
  HorizSync 31.5 – 37.9
  VertRefresh 48.0 – 65.0
  Option “dpms”
EndSection

Section “Device”
  Identifier “Videocard0″
  Driver “radeon”
  VendorName “Videocard vendor”
  BoardName “ATI Radeon Mobility M6″
  VideoRam 16384
EndSection

Section “Screen”
  Identifier “Screen0″
  Device “Videocard0″
  Monitor “Monitor0″
  DefaultDepth 24
  SubSection “Display”
  Depth 24
  Modes “800*600″ “600*480″
  EndSubSection
EndSection

將上面的800*600 600*480,改成”1024×768″ “800×600″,保存退出。
2. 使用 redhat-config-xfree86 命令
運行 #redhat-config-xfree86 linux系統將自動檢測顯示器並保存配置
我正是應用此命令完成了我的IBM本本設定!!!!

發佈了30 篇原創文章 · 獲贊 4 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章