這段時間學習shell整理的筆記
第1章 文件安全與權限
顯示文件
ls -l
d 目錄。
l 符號鏈接(指向另一個文件
s 套接字文件。
b 塊設備文件。
c 字符設備文件。
p 命名管道文件。
創建一個文件:
touch myfile
更改文件權限:
chmod [who] operator [permission] filenam
who: u g o a
operator:+ - =
operator: r(4) w(2) x(1)
chown -R owner file
chgrp groupname file
id 自己信息
umask 002
ln [-s] source_path target_path
ln -s /usr/opt/monitor/regstar/reg.log /var/adm/logs/monitor.log
$ H O M E中查找文件名符合* . t x t的文件
$ find ~ -name "*.txt" -print
$ H O M E中查找文件名以一個大寫字母開頭的文件
$ find . -name "[A-Z]*" -print
/etc目錄中查找文件名以host開頭的文件
$ find /etc -name "host*" -print
查找文件權限位為 7 5 5的文件
$ find . -perm 755 -print
在/apps目錄下查找文件,但不希望在/ a p p s / b i n目錄下查找
$ find /apps -name "/apps/bin" -prune -o -print
在 $ H O M E目錄中查找文件屬主為d a v e的文件
$ find ~ -user dave -print
在/apps目錄下查找屬于a c c t s用戶組的文件
$ find /apps -group accts -print
查找沒有有效所屬用戶組的所有文件
$ fine/-nogroup-print
查找屬主帳戶已經被刪除的文件(在/ e t c / p a s s w d文件中沒有有效帳戶的文件)
$ find /home -nouser -print
查找更改時間在5日以內的文件
$ find / -mtime -5 -print
在/var/ a d m目錄下查找更改時間在3日以前的文件
$ find /var/adm -mtime +3 -print
假設現在的時間是2 3 : 4 0,希望查找更改時間在兩個小時以內的文件
$ touch -t 03111750 file
$ ls -l file
$ find . -newer file -print
為了在/ e t c目錄下查找所有的符號鏈接文件
$ find /etc -type l -print
為了在當前目錄下查找除目錄以外的所有類型的文件
$ find . ! -type d -print
查找文件長度大于1 M字節的文件
$ find . -size +1000000c -print
查找文件長度恰好為1 0 0字節的文件
$ find /home/apache -size 100c -print
查找長度超過1 0塊的文件(一塊等于5 1 2字節)
$ find . -size +10 -print
在當前的文件系統中查找文件(不進入其他文件系統)
$ find . -name "*.XC" -mount -print
首先匹配所有的文件然后再進入子目錄中查找
$ find / -name "CON.FILE" -depth -print
crontab 舉例: *(分鐘) *(小時) *(每月的幾日) *(月) *(每周星期幾)
第1列 分鐘1~5 9
第2列 小時1~2 3(0表示子夜)
第3列 日1~3 1
第4列 月1~1 2
第5列 星期0~6(0表示星期天)
第6列 要運行的命令
-u 用戶名。
-e 編輯c r o n t a b文件。
-l 列出c r o n t a b文件中的內容。
-r 刪除c r o n t a b文件。
表示每晚的2 1 : 3 0運行/ a p p s / b i n目錄下的c l e a n u p . s h
30 21* * * /apps/bin/cleanup.sh
每月1、1 0、2 2日的4 : 4 5運行/ a p p s / b i n目錄下的b a c k u p . s h
45 4 1,10,22 * * /apps/bin/backup.sh
在每天1 8 : 0 0至2 3 : 0 0之間每隔3 0分鐘運行/ a p p s / b i n目錄下的d b c h e c k . sh
0,30 18-23 * * * /apps/bin/dbcheck.sh
表示每星期六的11 : 0 0 p m運行/ a p p s / b i n目錄下的q t r e n d . s h
0 23 * * 6 /apps/bin/qtrend.sh
linux系統重起cron服務的方法為:/sbin/service crond restart
aix系統重起cron服務的方法為:kill -9 pid(cron服務),cron服務后自動重起。
創建一個新的crontab文件:
在 $ H O M E目錄下的. p r o f i l e文件
加入 EDITOR=vi; export EDITOR
vi davecron 建一個新的crontab文件
$ crontab davecron 提交crontab
如果你正在運行一個進程,而且你覺得在退出帳戶時該進程還不會結束,那么可以使用n o h u p命令
nohup command &
echo string
定義變量:
read name
輸入hello
echo $name
輸入文件—標準輸入 0
輸出文件—標準輸出 1
錯誤輸出文件—標準錯誤 2
command > filename 把把標準輸出重定向到一個新文件中
command > filename 2>&1 把把標準輸出和標準錯誤一起重定向到一個文件中
command 2 > filename 把把標準錯誤重定向到一個文件中
command >> filename 2>&1 把把標準輸出和標準錯誤一起重定向到一個文件中 (追加)
&&左邊的命令(命令1)返回真(即返回0,成功被執行后,&&右邊的命令(命令2)才能夠被執行
mv who.ini awho.ini && echo "it's success
sort file.txt 對文件排序
--------------------------------------------------
正則表達式介紹:
^ 只只匹配行首
$ 只只匹配行尾
* 只一個單字符后緊跟*,匹配0個或多個此單字符
[ ] 只匹配[ ]內字符。可以是一個單字符,也可以是字符序列。可以使用 -
表示[ ]內字符序列范圍,如用[ 1 - 5 ]代替[ 1 2 3 4 5 ]
\ 只用來屏蔽一個元字符的特殊含義。因為有時在 s h e l l中一些元字符有
特殊含義。\可以使其失去應有意義
. 只匹配任意單字符
pattern \ { n \ } 只用來匹配前面pattern出現次數。n為次數
pattern \ { n,\ } m 只含義同上,但次數最少為n
pattern \ { n,m \ } 只含義同上,但pattern出現次數在n與m之間
匹配以單詞t r o u b l e結尾的所有行
t r o u b l e $
要匹配所有空行
^ $
^ . $
使用\屏蔽一個特殊字符的含義
下列字符可以認為是特殊字符
$ . ' " * [ ] ^ | () \ + ?
注意^符號的使用,當直接用在第一個括號里,意指否定或不匹配括號里內容
[ ^ 0 - 9 ] 匹配任一非數字型字符
匹配字母A出現兩次,并以B結尾
A \ { 2 \ } B
匹配A至少4次
A \ { 4 , \ } B
A出現2次到4次之間
A \ { 2 , 4 \ } B
grep 查匹配的字符
-c 只輸出匹配行的計數。
-i 不區分大小寫(只適用于單字符)。
-h 查詢多文件時不顯示文件名。
-l 查詢多文件時只輸出包含匹配字符的文件名。
-n 顯示匹配行及行號。
-s 不顯示不存在或無匹配文本的錯誤信息。
-v 顯示不包含匹配文本的所有行。
所有. d o c文件中查找字符串“s o r t”
$ grep "sort" *.doc
精確匹配
$ grep "sort<tab>" *.doc
抽取包含S e p t的所有月份,不管其大小寫,并且此行包含字符串 4 8 3
$ grep "[Ss]ept' data.f | grep 483
對一個字符串使用grep
str="hello every one"
echo $str | grep "one"
測試是否已設置或初始化變量。如果未設置或初始化,就可以使用另一值:
$ { v a r i a b l e : - v a l u e }
$ cu='chen'
$ echo "the ask is ${cu:-hi} today" (如果未設置或初始化,就可以使用hi)
readonly 變量 變量設置為只讀
設置環境變量:
VARIABLE-NAME = v a l u e
Export VARIABLE-NAME
pg 分頁顯示
變量 ARIABLE-NAME ='chen' 輸出'chen'
變量 ARIABLE-NAME ="chen" 輸出 chen
打印當前系統上用戶數目:
echo "ther are 'who | wc -l' users on the system "
test測試:
- d 目錄 - s 文件長度大于0、非空
- f 正規文件 - w 可寫
- L 符號連接 - u 文件有s u i d位設置
- r 可讀 - x 可執行
test -r tt.txt
echo $? (正確顯示0,錯誤顯示1)
確定當前的運行級別:
$ who -r
$ runlevel
查看doc_part文件是否被打開,有哪些進程在使用:
$ fuser -m /root/doc_part
該命令可以顯示當前所使用的登錄用戶名
$ logname
可以使用tty來報告所連接的設備或終端
$tty
記錄當前會話
$script. 文件名
exit
意味著系統在10秒鐘之內不進行任何操作
$sleep 10
可以看二進制文件中所包含的文本
$strings 文件名
whereis命令能夠給出系統命令的二進制文件及其在線手冊的路徑
$whereis 命令
tr用法(字符轉換)
# tr -s "[a-z]" < a.txt >b.txt a.txt的字符有重復的小寫轉為b.txt文件
# cat da|tr -s "[a-z]"
# tr -s "[\012]" < a.txt 去掉空行
# tr -s "[\n]" < a.txt
# tr -s "[\015\032]" "[\012*]" < input_file 一般的dos到unix轉換命令
# echo "may May"|tr "[a-z]" "[A-Z]" 小寫轉大小
# cat a.txt|tr "[a-z]" "[A-Z]" >b.txt
# cat a.txt|tr "[A-Z]" "[a-z]" > b.txt 大小轉小寫
# tr -cs "[a-z][A-Z]" "[\012*]" < a.txt 只保留大小字母,并分行
sort分類:
# sort a.txt > b.txt
# uniq a.txt > b.txt 消除重復的行(只在行連續重復時才有效)
# uniq -u a.txt 只顯示不重復行
# uniq -d a.txt 只顯示有重復數據行
join(將來自兩個分類文本文件的行連在一起)
# join a.txt b.txt
# join -a1 a.txt b.txt 當有不匹配時,只顯示a.txt
# join -a1 -a2 a.txt b.txt 當有不匹配時,都顯示出來
split用來將大文件分割成小文件(將文件按每個最多1000行分割)
# split 文件
# split -100 文件 指定每個文件100行分割
paste按行將不同文件行信息放在一行
# ls | paste -d "" 以一列格式顯示輸出
# paste a.txt b.txt
cut用來從標準輸入或文本文件中剪切列或
# cut -c 1-3 c.txt 顯示每行從開頭算起1到3的字母
# cut -c 1-2,5-10 c.txt 顯示從1到2,還有5到10的字母
# cut -f 1,3 c.txt 顯示1和3欄的字符(使用tab分隔)
sed用法:文本編輯器(強大的文本過濾工具)
刪除:d命令
$ sed '2d' example-----刪除example文件的第二行。
$ sed '2,$d' example-----刪除example文件的第二行到末尾所有行。
$ sed '$d' example-----刪除example文件的最后一行。
$ sed '/test/'d example-----刪除example文件所有包含test的行。
替換:s命令
$ sed 's/test/mytest/g' example-----在整行范圍內把test替換為mytest。如果沒有g標記,則只有每行第一個匹配的test被替換成mytest
$ sed 's/^192.168.0.1/&localhost/' example-----&符號表示替換換字符串中被找到的部份。所有以192.168.0.1開頭的行都會被替換成它自已加 localhost,變成192.168.0.1localhost
寫入文件:w命令
$ sed -n '/test/w file' example 在example中所有包含test的行都被寫入file里
# sed '/^kai/a\\ this is a example' b.txt " this is a example"被插入到以kai開頭后面的新一行
# sed '/^kai/i\\ this is a example' b.txt " this is a example"被插入到以kai開頭后面的前一行
posted on 2010-09-17 15:43
xzc 閱讀(223)
評論(0) 編輯 收藏