Linux命令(二)

六、網(wǎng)絡(luò)管理與相關(guān)應(yīng)用;
七、vi/vim編輯器;
八、Shell編程

六、網(wǎng)絡(luò)管理與相關(guān)應(yīng)用

# arp -a | awk '{print $4}'  //得到網(wǎng)卡的 MAC地址
# dd if=/dev/zero bs=4096 count=1048576 | ssh [user@ip](mailto:user@ip) 'cat > /dev/null'  //不浪費(fèi)磁盤的情況下測試網(wǎng)絡(luò)速度(通過 ssh 發(fā)送 4 GB 數(shù)據(jù)到遠(yuǎn)程主機(jī),但不會(huì)占用任何磁盤空間)
# dmesg | grep eth  //顯示每個(gè)網(wǎng)卡的硬件配置信息
# echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all  //關(guān)閉ping
# echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all  //重啟ping
# ethtool eth0  //顯示或改變網(wǎng)卡設(shè)置(參考:man ethtool)
# ifconfig //查看當(dāng)前有效網(wǎng)絡(luò)接口信息
# ifconfig -a  //查看當(dāng)前所有網(wǎng)絡(luò)接口信息
# ifconfig eth0 //查看指定網(wǎng)絡(luò)接口eth0信息
# ifconfig eth0 192.168.1.11  //設(shè)置eth0接口IP地址(標(biāo)準(zhǔn)掩碼)(相當(dāng)于動(dòng)態(tài)修改IP)
# ifconfig eth0 192.168.1.11 netmask 255.255.255.128 //設(shè)置eth0接口IP地址及子網(wǎng)掩碼
# ifconfig eth0 hw ether 000C1254D321 //更改網(wǎng)卡物理地址
# ifconfig lo  //查看lo狀態(tài)
# ifdown eth0  //禁用eth0網(wǎng)絡(luò)接口
# ifdown lo  //關(guān)閉本地回環(huán)網(wǎng)絡(luò)接口
# ifup eth0  //啟用eth0網(wǎng)絡(luò)接口
# ifup lo  //啟動(dòng)本地回環(huán)網(wǎng)絡(luò)接口# ip ad sh  //顯示IP地址等信息
# iptables -L  // 查看防火墻設(shè)置
# iptraf  //可交互式IP網(wǎng)絡(luò)監(jiān)控工具# mii-tool -v  //查看網(wǎng)卡有關(guān)信息
# netconfig  //設(shè)置網(wǎng)絡(luò)環(huán)境
# netstat -antp  // 查看所有已經(jīng)建立的連接
# netstat -apt  //顯示所有TCP應(yīng)用程序所使用的端口號(hào),并顯示使用此端口號(hào)的進(jìn)程
# netstat -lntp  // 查看所有監(jiān)聽端口
# netstat -s // 查看網(wǎng)絡(luò)統(tǒng)計(jì)信息
# netstat -tulnp  //目前系統(tǒng)上已在監(jiān)聽的網(wǎng)絡(luò)連接及其PID
# ping 10.52.19.187  //檢測到10.52.19.187之間是否連通
# ping -c 5 10.52.19.187  //向10.52.19.187發(fā)送5個(gè)分組報(bào)文
# ping -s 6553 -c 5 10.52.19.187  //向10.52.19.187發(fā)送5個(gè)分組、每組大小為6553字節(jié)的報(bào)文(注:最大分組報(bào)文不能超過65507字節(jié))
# ping -c 8 -i 3 -s 1024 -t 25 10.52.19.187  //向10.52.19.187以3秒間隔、包大小1024字節(jié)、IP生存期25、8個(gè)包發(fā)送報(bào)文
# route -n  // 查看路由表
# tracepath 10.52.19.189  //顯示連接到10.52.19.189的路由
# traceroute -n 10.52.19.190  //對(duì)到達(dá)10.52.19.190的路由進(jìn)行跟蹤,且使用IP地址表示每一跳主機(jī)
# ss  //顯示網(wǎng)絡(luò)套接字信息,它允許顯示類似netstat一樣的信息
# wget 192.168.20.148  //從網(wǎng)站192.168.20.148下載資料
 
動(dòng)態(tài)增加IP
# traceroute 211.148.192.136 //檢測到目的IP經(jīng)過的路由信息
# hostname //查看主機(jī)名稱
# hostname luo //設(shè)置主機(jī)名稱為 luo
# ping 192.168.1.10 //Ping主機(jī)192.168.1.10
# ifconfig eth0 add 10.52.19.147
# ifconfig eth0:0 broadcast 10.52.19.255
 
DNS域名
# nslookup 待解析域名(或IP)
# nslookup 211.148.192.136 //反向解析IP---域名
# nslookup [www.163.com](http://blog.chinaunix.net/link.php?url=http://www.163.com%2F)   //解析指定的域名---IP
# route add default gw 192.168.1.1 //添加默認(rèn)網(wǎng)關(guān)為192.168.1.1
# route del default gw 192.168.1.1 //刪除默認(rèn)網(wǎng)關(guān)為192.168.1.1
 
NFS服務(wù)
# exportfs -auv   //停止輸出所有共享目錄
# exportfs -av  //輸出啟用所有共享目錄
# exportfs -rv    //重新輸出共享目錄
# mount -t nfs 192.168.2.10:/luo /wei //在客戶機(jī)上掛載共享目錄到/wei
# service iptables stop //關(guān)閉防火墻
# service nfs start //啟動(dòng)nfs服務(wù)
# service portmap start //啟動(dòng)portmap服務(wù)
# showmount -a    //顯示NFS服務(wù)器的客戶與被掛載目錄
# showmount -d    //顯示NFS服務(wù)器被掛載的目錄
# vi /etc/exports  //修改共享配置文件(加共享目錄)
showmount -e 192.168.2.10 6  //在客戶上查看服務(wù)器共享目錄
 
配置文件
vi /etc/hosts  vi /etc/network //修改主機(jī)名稱配置文件
vi /etc/rc.local //修改mac地址配置文件
vi /etc/resolv.conf //修改DNS配置文件
vi /etc/sysconfig/network-scripts/ifcfg-eth0 //修改網(wǎng)卡配置文件
vi /var/spool/cron/username  //修改cron任務(wù)配置文件
vi /var/spool/mail  //修改郵件配置文件

七、vi/vim編輯器

也可建立vi到vim的符號(hào)連接(即實(shí)際調(diào)用的是vim)
# mv /bin/vi /bin/vi.bak
# ln -s /usr/bin/vim /bin/vi
 
進(jìn)入vi的命令:
vi  直接進(jìn)入編輯并創(chuàng)建新文件
vi filename  編輯文件(不存在則創(chuàng)建文件),并將光標(biāo)置于第一行首
vi +n filename  打開文件,并將光標(biāo)置于第n行首
vi + filename   打開文件,并將光標(biāo)置于最后一行首
vi +/pattern filename  打開文件,并將光標(biāo)置于第一個(gè)與pattern匹配的串處
vi -r filename   在上次正用vi編輯時(shí)發(fā)生系統(tǒng)崩潰,恢復(fù)文件
vi file1....filen   打開多個(gè)文件,依次進(jìn)行編輯
vi -o aaa bbb   水平窗口打開aaa,bbb兩個(gè)文件
vi -O aaa bbb   垂直窗口打開aaa,bbb兩個(gè)文件(Ctrl+W兩次可在多個(gè)文件間切換)多文本編輯的按鍵::n  編輯下一個(gè)文件:N  編輯上一個(gè)文件:files  列出目前這個(gè)vi的打開的所有文件多窗口情況下的按鍵功能::sp [filename]  打開一個(gè)新窗口,如果有加filename,表示在新窗口打開一個(gè)新文件,否則表示兩個(gè)窗口為同一個(gè)文件內(nèi)容(同步顯示)
[ctrl]+w+j[ctrl]+w+↓   按鍵的按法是:先按下[ctrl]不放,再按下w后放開所有的按鍵,然后再按下j(或向下箭頭鍵),則光標(biāo)可移動(dòng)到下方的窗口[ctrl]+w+k[ctrl]+w+↑    同上,不過光標(biāo)移動(dòng)到上面的窗口[ctrl]+w+q    其實(shí)就是:q結(jié)束離開。例如,想要結(jié)束下方的窗口,那么利用[ctrl]+w+↓移動(dòng)到下方窗口后,按下:q即可離開,也可以按下[ctrl]+w+q
塊選擇的按鍵意義:v  字符選擇,將光標(biāo)經(jīng)過的地方反白選擇
V  行選擇,將光標(biāo)經(jīng)過的行反白選擇
Ctrl + v  塊選擇,可以用長方形的方式選擇數(shù)據(jù)
y  將反白的地方復(fù)制起來
d  將反白的地方刪除
恢復(fù)命令:
u  恢復(fù)最后一個(gè)指令之前的結(jié)果.  繼續(xù)最后一個(gè)指令的執(zhí)行結(jié)果
ctrl+r  撤銷恢復(fù)
U  恢復(fù)光標(biāo)該行之所有改變
 
移動(dòng)光標(biāo)命令:
h   光標(biāo)左移一個(gè)字符
l   光標(biāo)右移一個(gè)字符
space  光標(biāo)右移一個(gè)字符
Backspace  光標(biāo)左移一個(gè)字符
k或Ctrl+p  光標(biāo)上移一行
j或Ctrl+n   光標(biāo)下移一行
Enter   光標(biāo)下移一行
w或W   光標(biāo)右移一個(gè)字至字首
b或B   光標(biāo)左移一個(gè)字至字首
e或E   光標(biāo)右移一個(gè)字至字尾
)   光標(biāo)移至句尾
(   光標(biāo)移至句首
}  光標(biāo)移至段落開頭
{  光標(biāo)移至段落結(jié)尾
nG  光標(biāo)移至第n行首
n+  光標(biāo)下移n行
n-  光標(biāo)上移n行
n$  光標(biāo)移至第n行尾
H   光標(biāo)移至屏幕頂行
M   光標(biāo)移至屏幕中間行
L   光標(biāo)移至屏幕最后行
0  (注意是數(shù)字零)光標(biāo)移至當(dāng)前行首
$  光標(biāo)移至當(dāng)前行尾
 
翻屏命令:
Ctrl+u  向文件首翻半屏
Ctrl+d  向文件尾翻半屏
Ctrl+f  向文件尾翻一屏
Ctrl+b  向文件首翻一屏
nz  將第n行滾至屏幕頂部,不指定n時(shí)將當(dāng)前行滾至屏幕頂部
 
插入文本、復(fù)制與粘貼:
i   在光標(biāo)前插入
I   在當(dāng)前行首插入
a  在光標(biāo)后插入
A  在當(dāng)前行尾插入
o  在當(dāng)前行之下新開一行
O  在當(dāng)前行之上新開一行
r  替換當(dāng)前字符
R  替換當(dāng)前字符及其后的字符,直至按ESC鍵
s  從當(dāng)前光標(biāo)位置處開始,以輸入的文本替代指定數(shù)目的字符
S  刪除指定數(shù)目的行,并以所輸入文本代替之
ncw或nCW  修改指定數(shù)目的字
nCC  修改指定數(shù)目的行
yy  p  復(fù)制當(dāng)前行,并粘貼到下一行nyy  n為數(shù)字。復(fù)制光標(biāo)所在的向下n行,例如20yy,則是復(fù)制20行y1G  復(fù)制光標(biāo)所在行到第一行的所有數(shù)據(jù)yG   復(fù)制光標(biāo)所在行到最后一行的所有數(shù)據(jù)y0    復(fù)制光標(biāo)所在的那個(gè)字符到該行行首的所有數(shù)據(jù)y$    復(fù)制光標(biāo)所在的那個(gè)字符到該行行尾的所有數(shù)據(jù)  
shift + i  在該行之首插入字符
shift + a   在該行末尾輸入字符
shift + r  改寫自光標(biāo)位置及后面的所有內(nèi)容
shift +o  在光標(biāo)之上新增一行輸入字符
 
刪除命令:
ndw或ndW  刪除光標(biāo)處開始及其后的n-1個(gè)字
d0  刪至行首(為數(shù)字0)
d$  刪至行尾shift + d  剪切至行尾
dd  刪除一行
ndd  刪除自光標(biāo)開始的n行
s  刪除光標(biāo)所在之字符,并進(jìn)入輸入模式直到《ESC》
S  刪除光標(biāo)所在之該行資料,并進(jìn)入輸入模式直到《ESC》
x或X  刪除一個(gè)字符,x刪除光標(biāo)后的,而X刪除光標(biāo)前的 nx  n為數(shù)字,連續(xù)向后刪除n個(gè)字符。如,要連續(xù)刪除10個(gè)字符,則:“10x”
Ctrl+u  刪除輸入方式下所輸入的文本
 
搜索及替換命令:
/pattern  從光標(biāo)開始處向文件尾搜索pattern
?pattern  從光標(biāo)開始處向文件首搜索pattern
n  在同一方向重復(fù)上一次搜索命令
N  在反方向上重復(fù)上一次搜索命令
:s/p1/p2/  替換當(dāng)前行第一個(gè)p1為p2
:s/p1/p2/g  將當(dāng)前行中所有p1均用p2替代
:n1,n2s/p1/p2/g  將第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g  將文件中所有p1均用p2替換
: 1,$s/old/new/g  將文件中所有的『old』改成『new』: 1,$s/old/new/gc  將文件中所有的『old』改成『new』,并在改前提示用戶確認(rèn)
: 10,20s/^/ /  將第10行至第20行資料的最前面插入5個(gè)空格
: %s/^m//g  刪除文件中所有的^M符號(hào)
 
選項(xiàng)設(shè)置:
all  列出所有選項(xiàng)設(shè)置情況
term  設(shè)置終端類型
ignorance  在搜索中忽略大小寫
list  顯示制表位(Ctrl+I)和行尾標(biāo)志($)
number  顯示行號(hào)
report  顯示由面向行的命令修改過的數(shù)目
terse  顯示簡短的警告信息
warn  在轉(zhuǎn)到別的文件時(shí)若沒保存當(dāng)前文件則顯示NO write信息
nomagic  允許在搜索模式中,使用前面不帶“\”的特殊字符
nowrapscan  禁止vi在搜索到達(dá)文件兩端時(shí),又從另一端開始
mesg  允許vi顯示其他用戶用write寫到自己終端上的信息
 
最后行方式命令:
:n1,n2 co n3  將n1行到n2行之間的內(nèi)容拷貝到第n3行下
:n1,n2 m n3  將n1行到n2行之間的內(nèi)容移至到第n3行下
:n1,n2 d   將n1行到n2行之間的內(nèi)容刪除 
:e filename  打開文件filename進(jìn)行編輯
:e! dd   強(qiáng)制關(guān)閉當(dāng)前文件(不保存)打開新文件dd
: e!  放棄修改重新編輯  
:q!  不保存文件并退出vi
:r fff 在當(dāng)前位置讀入fff文件
:set nonu 不顯示行號(hào)
:set nu 顯示行號(hào)
:w  保存輸入的內(nèi)容到當(dāng)前文件
:w eee 另存為eee文件
:wq  保存并退出
:x  保存當(dāng)前文件并退出
:n1,n2 w eee  將文件中n1行至n2行的內(nèi)容保存成eee文件:!command  暫時(shí)離開vi到命令行模式下執(zhí)行command的顯示結(jié)果。例如,“:! ls /home”即可在vi當(dāng)中查看/home下面以ls輸出的文件信息
 
寄存器操作:
"?nyy  將當(dāng)前行及其下n行的內(nèi)容保存到寄存器?中,其中?為一個(gè)字母,n為一個(gè)數(shù)字
"?nyw  將當(dāng)前行及其下n個(gè)字保存到寄存器?中,其中?為一個(gè)字母,n為一個(gè)數(shù)字
"?nyl  將當(dāng)前行及其下n個(gè)字符保存到寄存器?中,其中?為一個(gè)字母,n為一個(gè)數(shù)字
"?p  取出寄存器?中的內(nèi)容并將其放到光標(biāo)位置處。這里?可以是一個(gè)字母,也可以是一個(gè)數(shù)字
ndd  將當(dāng)前行及其下共n行文本刪除,并將所刪內(nèi)容放到1號(hào)刪除寄存器中vim操作環(huán)境(不建議修改/etc/vimrc文件;建議手動(dòng)修改~/.vimrc文件)
vim常用指令示意圖

vim常用指令示意圖

八、shell編程

# grep $LOGNAME /etc/passwd  //顯示當(dāng)前登錄用戶使用的shell
# sh  //啟動(dòng)bsh(為Bourne Shell的簡稱---伯恩shell)
# bash  //啟動(dòng)bash(為Bourne Again Shell的簡稱)
# csh  //啟動(dòng)C Shell

# type [-tpa] name  //bash shell的內(nèi)置命令。
type:不加任何參數(shù)時(shí),type會(huì)顯示出name是外部命令還是bash內(nèi)置命令 
-t :當(dāng)加入-t參數(shù)時(shí),type會(huì)將name以下面這些字眼顯示出它的意義:      
file:表示為外部命令       
alias:表示該命令為命令別名所設(shè)置的名稱;       
builtin:表示該命令為bash內(nèi)置的命令功能。
-p :如果后面接的name為外部命令時(shí),才會(huì)顯示完整文件名;
-a :會(huì)由PATH變量定義的路徑中,將所有含name的命令都列出來,包含alias

# cp/var/spool/mail/root  /etc/crontab \>  /etc/fstab  /root 
//將三個(gè)文件復(fù)制到root目錄下(如果命令串太長的話,可以用兩行來輸出)。
“\[Enter]”為轉(zhuǎn)義符,
“>”為系統(tǒng)自動(dòng)出現(xiàn)的,不需要輸入。

# source  ~/.bashrc  //將主文件夾的~/.bashrc的設(shè)置讀入目前的bash環(huán)境中
# .  ~/.bashrc   //將主文件夾的~/.bashrc的設(shè)置讀入目前的bash環(huán)境中

# ll -d/etc/cron*  //找出/etc/下面以cron為開頭的文件名
# ll -d/etc/?????  //找出/etc/下面文件名剛好是五個(gè)字母的文件名
# ll -d/etc/*[0-9]*  //找出/etc/下面文件名含有數(shù)字的文件名
# ll -d/etc/[^a-z]*  //找出/etc/下面文件名開頭非為小寫字母的文件名
# cp -a /etc/[^a-z]*/tmp  //將上例找到的文件復(fù)制到 /tmp中
# last | cut -d  ' '  -f1 | sort  //將輸出的數(shù)據(jù)僅取賬號(hào),并加以排序
# last | cut -d  ' '  -f1 | sort  | uniq  //將輸出的數(shù)據(jù)僅取賬號(hào),排序后僅取出一位
# last | cut -d  ' '  -f1 | sort  | uniq  -c  
//將輸出的數(shù)據(jù)僅取賬號(hào),排序后僅取出一位并顯示每個(gè)賬號(hào)登錄的總次數(shù)
# last | grep [a-zA-Z]| grep -v ‘wtmp’| wc -l  //顯示登錄系統(tǒng)的總?cè)藬?shù)
# last | tee  last.list | cut -d  “ “  -f1  //將last的輸出存一份到last.list文件中
# ls -l/home | tee  ~/homefile | more  
//將ls的數(shù)據(jù)存一份到~/homefile,同時(shí)屏幕也有輸出信息
# ls -l/ | tee  -a  ~/homefile | more  //加上-a參數(shù)則能將信息累加
# cp/etc/passwd  /root/passwd &&unix2dos /root/passwd 
# file/etc/passwd /root/passwd
# cat/root/passwd | tr -d  ‘\r’ > /root/passwd.linux
# ll  /etc/passwd  /root/passwd*  
//將/etc/passwd轉(zhuǎn)存成dos斷行到/root/passwd中,再將^M 符號(hào)刪除。\r指的是dos的斷行字符 ^M
# cat  -A /etc/man.config 
# cat/etc/man.config | col  -x | cat  -A | more 
//利用cat  -A 顯示所有特殊按鍵,最后以 col將[tab]轉(zhuǎn)成空白。
//上面看到的^I符號(hào)就是tab,如此一來,[tab]按鍵會(huì)被替換成為空格鍵,輸出就美觀多了

# mancol > /root/col.man
# vi/root/col.man
# mancol | col  -b > /root/col.man  //將col的man page轉(zhuǎn)存成為/root/col.man的純文本文件
通配符與特殊符號(hào)   意義
*      代表『 0 個(gè)到無窮多個(gè)』任意字符
?      代表『一定有一個(gè)』任意字符
[ ]    同樣代表『一定有一個(gè)在括號(hào)內(nèi)』的字符(非任意字符)。
例如 [abcd] 代表『一定有一個(gè)字符, 可能是 a, b, c, d 這四個(gè)任何一個(gè)』
[ - ]  若有減號(hào)在中括號(hào)內(nèi)時(shí),代表『在編碼順序內(nèi)的所有字符』。
例如 [0-9] 代表 0 到 9 之間的所有數(shù)字,因?yàn)閿?shù)字的語系編碼是連續(xù)的!
[^ ]   若中括號(hào)內(nèi)的第一個(gè)字符為指數(shù)符號(hào) (^) ,那表示『反向選擇』,
例如 [^abc] 代表 一定有一個(gè)字符,只要是非 a, b, c 的其他字符就接受的意思。
bash 環(huán)境中的特殊符號(hào)   內(nèi)容
#      批注符號(hào):這個(gè)最常被使用在 script 當(dāng)中,視為說明!在后的數(shù)據(jù)均不運(yùn)行
\      跳脫符號(hào):將『特殊字符或通配符』還原成一般字符
|      管線 (pipe):分隔兩個(gè)管線命令的界定(后兩節(jié)介紹);
;      連續(xù)命令下達(dá)分隔符:連續(xù)性命令的界定 (注意!與管線命令并不相同)
~      用戶的家目錄$      取用變量前導(dǎo)符:亦即是變量之前需要加的變量取代值
&      工作控制 (job control):將命令變成背景下工作
!      邏輯運(yùn)算意義上的『非』 not 的意思!
/      目錄符號(hào):路徑分隔的符號(hào)
>, >>  數(shù)據(jù)流重導(dǎo)向:輸出導(dǎo)向,分別是『取代』與『累加』
<, <<  數(shù)據(jù)流重導(dǎo)向:輸入導(dǎo)向  
' '    單引號(hào),不具有變量置換的功能
" "    具有變量置換的功能!
` `    兩個(gè)『 ` 』中間為可以先運(yùn)行的命令,亦可使用 $( )
( )    在中間為子 shell 的起始與結(jié)束
{ }    在中間為命令區(qū)塊的組合!
基礎(chǔ)正則表達(dá)式字符 (characters) 
^word意義:待查找的字符串(word)在行首范例:查找行首為 # 開始的那一行,并列出行號(hào) 
grep -n '^#' regular_express.txt word$ 意義:待查找的字符串(word)在行尾范例:將行尾為 ! 的那一行列印出來,并列出行號(hào) 
grep -n '!$' regular_express.txt . 意義:代表一定有一個(gè)任意字符的字符范例:查找的字符串可以是 (eve) (eae) (eee) (e e), 但不能僅有 (ee),亦即 e 與 e 中間“一定”僅有一個(gè)字符,而空格符也是字符 
grep -n 'e.e' regular_express.txt \ 意義:轉(zhuǎn)義字符,將特殊符號(hào)的特殊意義去除范例:查找含有單引號(hào) ' 的那一行 
grep -n \' regular_express.txt * 意義:重復(fù)零個(gè)到無窮多個(gè)的前一個(gè) RE(regular)字符范例:找出含有 (es) (ess) (esss) 等等的字符串,注意,因?yàn)?* 可以是 0 個(gè),所以 es 也是符合帶查找字符串。
另外,因?yàn)?* 為重復(fù)“前一個(gè) RE 字符”的符號(hào), 因此,在 * 之前必須要緊接著一個(gè) RE 字符喔。例如任意字符則為 “.*”  
grep -n 'ess*' regular_express.txt [list] 意義:從字符集合的 RE 字符里面找出想要選取的字符范例:查找含有 (gl) 或 (gd) 的那一行,需要特別留意的是,在 [] 當(dāng)中代表一個(gè)待查找的字符, 
例如“ a[afl]y ”代表查找的字符串可以是 aay, afy, aly 即 [afl] 代表 a 或 f 或 l 的意思 
grep -n 'g[ld]' regular_express.txt [n1-n2] 意義:從字符集合的 RE 字符里面找出想要選取的字符范圍范例:查找含有任意數(shù)字的那一行。
需特別留意,在字符集合 [] 中的減號(hào) - 是有特殊意義的,他代表兩個(gè)字符之間的所有連續(xù)字符。但這個(gè)連續(xù)與否與 ASCII 編碼有關(guān),因此,你的編碼需要配置正確(在 bash 當(dāng)中,需要確定 LANG 與 LANGUAGE 的變量是否正確)。
例如所有大寫字符則為 [A-Z] grep -n '[A-Z]' 
regular_express.txt [^list] 意義:從字符集合的 RE 字符里面找出不要的字符串或范圍范例:查找的字符串可以是 (oog) (ood) 但不能是 (oot) ,那個(gè) ^ 在 [] 內(nèi)時(shí),代表的意義是“反向選擇”的意思。
例如,我不要大寫字符,則為 [^A-Z]。
但是,需要特別注意的是,如果以 grep -n [^A-Z] regular_express.txt 來查找,卻發(fā)現(xiàn)該文件內(nèi)的所有行都被列出,為什么?因?yàn)檫@個(gè) [^A-Z] 是“非大寫字符”的意思, 因?yàn)槊恳恍芯蟹谴髮懽址?例如第一行的 "Open Source" 就有 p,e,n,o等小寫字符 
grep -n 'oo[^t]' regular_express.txt \{n,m\} 意義:連續(xù) n 到 m 個(gè)的前一個(gè) RE 字符,若為 \{n\} 則是連續(xù) n 個(gè)的前一個(gè) RE 字符,若是 \{n,\} 則是連續(xù) n 個(gè)以上的前一個(gè) RE 字符范例:在 g 與 g 之間有2個(gè)到3個(gè)的o存在的字符串,亦即 (goog)(gooog) 
grep -n 'go\{2,3\}g' regular_express.txt 

# dmesg | grep -n -color=auto‘eth’  
//用dmesg列出內(nèi)核信息,
//再以grep找出內(nèi)含eth的那些行,并顯色、加上行號(hào)

# dmesg | grep -n -A3 -B2 -color=auto ‘eth’  
//承上,在關(guān)鍵字所在行的前兩行與后三行也一起找出來顯示
# test -e /pa/lamprj && echo "exist" || echo "Not exist"  
//檢查/pa/lamprj目錄是否存在

文件測試的標(biāo)志與意義:

關(guān)於某個(gè)文件名的“文件類型”判斷,
如 test -e filename 表示存在否 
-e  該文件名是否存在?(常用) 
-f  該文件名是否存在且為文件(file)(常用) 
-d  該文件名是否存在且為目錄(directory)(常用) 
-b  該文件名是否存在且為一個(gè) block device 設(shè)備 
-c  該文件名是否存在且為一個(gè) character device 設(shè)備 
-S  該文件名是否存在且為一個(gè) Socket 文件
-p  該文件名是否存在且為一個(gè) FIFO (pipe) 文件
-L  該文件名是否存在且為一個(gè)連結(jié)文件關(guān)於文件的權(quán)限檢測,
如 test -r filename 表示可讀否 (但 root 權(quán)限常有例外) 
-r  檢測該文件名是否存在且具有“可讀”的權(quán)限 
-w  檢測該文件名是否存在且具有“可寫”的權(quán)限
-x  檢測該文件名是否存在且具有“可執(zhí)行”的權(quán)限
-u  檢測該文件名是否存在且具有“SUID”的屬性
-g  檢測該文件名是否存在且具有“SGID”的屬性
-k  檢測該文件名是否存在且具有“Sticky bit”的屬性
-s  檢測該文件名是否存在且為“非空白文件” 兩個(gè)文件之間的比較,
如:test file1 -nt file2 
-nt  (newer than)判斷 file1 是否比 file2 新 
-ot  (older than)判斷 file1 是否比 file2 舊 
-ef  判斷 file1 與 file2 是否為同一文件,可用在判斷 hard link 的判定上。 

主要意義在判定兩個(gè)文件是否均指向同一個(gè) inode 關(guān)於兩個(gè)整數(shù)之間的判定,
例如 test n1 -eq n2 -eq  兩數(shù)值相等 (equal) 
-ne  兩數(shù)值不等 (not equal) 
-gt  n1 大於 n2 (greater than) 
-lt  n1 小於 n2 (less than) 
-ge  n1 大於等於 n2 (greater than or equal) 
-le  n1 小於等於 n2 (less than or equal) 判定字串的數(shù)據(jù) 
test -z string  判定字串是否為 0,若 string 為空字串,則為 true 
test -n string  判定字串是否非為0,若 string 為空字串,則為 false                  
注:-n 亦可省略 test str1 = str2  判定 str1 是否等於 str2 ,若相等,則回傳 true 
test str1 != str2 判定 str1 是否不等於 str2 ,若相等,則回傳 false 

多重條件判定,
例如:test -r filename -a -x filename -a  兩個(gè)條件同時(shí)成立!
例如 test -r file -a -x file,則 file 同時(shí)具有 r 與 x 權(quán)限時(shí),才回傳 true 
-o  任何一個(gè)條件成立!
例如 test -r file -o -x file,則 file 具有 r 或 x 權(quán)限時(shí),就可回傳 true !   

反相狀態(tài),
如 test ! -x file ,當(dāng) file 不具有 x 時(shí),回傳 true 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容