?
1、創建一個目錄/data
記憶方法:英文make directorys縮寫后就是mkdir。
命令:
- mkdir /data
- 或
- cd /;mkdir data
- #提示:使用分號可以在一行內分割兩個命令。
實踐過程:
- 方法一:
- [root@oldboy66 ~]# mkdir /data
- #查看data目錄是否創建成功,ls是list列表的意思,-ld是ls的常用參數,是長格式查看目錄屬性,l表示長格式,d表示目錄
- [root@oldboy66 ~]# ls -ld /data
- drwxr-xr-x. 2 root root 4096 Nov 30 13:40 /data
- 方法二:
- #刪除方法一創建的目錄
- [root@oldboy66 ~]# rm -r /data
- #輸入y表示確認刪除,y是yes的縮寫
- rm: remove directory `/data'? y
- #進入根目錄/下
- [root@oldboy66 ~]# cd /
- #創建data目錄,不帶斜線/,因為已經進入了
- [root@oldboy66 /]# mkdir data
- #查看data目錄本身
- [root@oldboy66 /]# ls -ld data
- drwxr-xr-x. 2 root root 4096 Nov 30 13:44 data
總結:
cd后跟相對路徑或者絕對路徑,表示進入目錄,如果不跟任何東西,會進入當前用戶的家目錄。
相對路徑概念:不從/開始,而是從當前目錄開始,例如:data/,mnt/oldboy。
絕對路徑概念:從/開始的目錄,就叫絕對路徑,例如:/data/,/mnt/oldboy。
cd命令記憶方法:change directory。
mkdir [-mp] [目錄名稱] ?建立目錄
????-m:這個參數用來指定要創建目錄的權限,但是很少用,都會用chmod來處理。
????如:mkdir –m 777 /tmp/test,即建立一個權限為777的目錄。
????-p:這個參數用來遞歸創建目錄,mkdir的常用參數。
2、在/data下面建立一個文件oldboy.txt
命令:
- touch /data/oldboy.txt
- 或
- cd /data;touch oldboy.txt
- #創建文件也可以用echo等,只不過touch是專業的,也可用間接創建文件的命令,如vi,cat等。
- 例如:
- echo > /data/oldboy.txt
- 或
- > /data/oldboy.txt
實踐過程:
- 方法一:
- #在/data目錄下創建oldboy.txt
- [root@oldboy66 data]# touch /data/oldboy.txt
- #查看創建的oldboy.txt
- [root@oldboy66 data]# ls -l /data/oldboy.txt
- -rw-r--r--. 1 root root 0 Nov 30 14:04 /data/oldboy.txt
- 方法二:
- [root@oldboy66 /]# cd /data
- #如果同名文件存在,不會提示也不好覆蓋,會更新文件的時間戳
- [root@oldboy66 data]# touch oldboy.txt
總結:
touch"摸"。touch [文件名] 就是"摸"一下文件,如果文件不存在,就建立新文件,如果存在,就改變文件的訪問時間atime等時間戳信息。
路徑分隔區別:
windows的目錄分隔D:\PIC\oldboy。
linux的目錄分隔/data/。
3、為oldboy.txt增加內容為"I am studying linux"。
方法一:常規編輯方法
執行vi oldboy.txt進入vi編輯器(默認命令模式),點擊a或i進入編輯模式,敲入內容I am studying linux,然后按鍵盤上的esc鍵退出編輯模式(進入到命令模式),最后敲:wq保存并退出。wq解釋write quit。
此方法說明:
vi就是類似記事本一樣的linux下的常用編輯器,如果想功能更豐富可以用vim代替vi,vi/vim的內部有很多的命令技術點,例如i就是insert,進入插入編輯模式的狀態的意思,esc鍵是切換到命令模式,命令模式下可以敲冒號":"在后面才可以接命令參數,例如wq,w是write,q是quit。
vi 編輯器,相當于記事本,有編輯功能,但是較弱。
vim 復制編輯器,相當于emeditor,editplus,notepad++。
快捷鍵:TAB 命令、路徑補全。
方法二:單行或多行文本插入常用命令,內容都是存放到文件的尾部。
- echo "I am studying linux" >>/data/oldboy.txt
實踐過程:
- #特殊的編輯方法,通過echo命令使用單引號把引號的內容通過>>追加到/data/oldboy.txt,注意:是追加不是覆蓋
- [root@oldboy66 data]# echo "I am studying linux" >>/data/oldboy.txt
- #檢查追加的結果
- [root@oldboy66 data]# cat oldboy.txt
- I am studying linux
此法說明:
echo是一個打印輸出內容的一個常用命令,配合">或>>"可以為文件覆蓋及追加內容。">"意思為重定向,會清除文件里所有以前數據,">>"為內容追加,只在文件尾部追加需要的內容,還有一個較復雜不常用的類似命令printf。
特殊字符命令:
>重定向,會清除文件里所有以前的數據,增加
>>追加重定向,
方法三:寫腳本常用,追加多行,內容都放在文件的尾部。
- cat >>/data/oldboy.txt<<EOF
- I am studying linux
- EOF
- #注意:結尾的EOF要頂格寫,EOF也可以用別的字符替代,只要是一對就好。
方法二、方法三為命令行或腳本中常使用的辦法,都很重要。
方法二用于單行文本,方法三可以是多行文件,文本中如果有特殊字符,如$等需要用\轉義才行。
- echo '
- 111
- 222
- 333
- '>>oldboy.txt
方法四:
- [root@oldboy66 data]# cat >>/data/oldboy.txt
- I am studying linux
按ctrl+d或ctrl+c組合鍵兩遍結束編輯。此方法為特殊編輯方法。
總結:
echo是一個打印輸出內容的一個常用命令,配合">"或">>"可以為文件覆蓋或追加內容。echo $PATH打印出PATH的值。
重定向:意思是將"數據傳到其他地方"。將某個命令執行后本應該出現在屏幕的數據,傳輸到其他地方,執行命令時,這個命令可能會通過文件讀入數據,經過處理之后,再將數據輸出到屏幕。
>或1> 輸出重定向:把前面輸出的東西輸入到后邊的文件中,會刪除文件原有內容。
>>或1>> 追加重定向:把前面輸出的對象追加到后邊的文件中,不會刪除文件原有內容。
<或<0 輸入重定向:輸入重定向用于改變命令的輸入,后面指定輸入內容,前面跟文件名
<<或<<0 追加輸入重定向: 后跟字符串,用來表示"輸入結束",也可以ctrl+d來結束輸入。
2> 錯誤重定向:把錯誤信息輸入到后邊的文件中,會刪除文件原有內容。
2>> 錯誤追加重定向:把錯誤信息追加到后邊的文件中,不會刪除文件原有內容。
標準輸入(stdin):代碼為0,使用<或<<,數據流向從右向左。
標準正常輸出(stdout):代碼為1,使用>或>>,數據流向從左向右。
標準錯誤輸出(stderr):代碼為2,使用2>或2>>。
箭頭的方向就是數據流的方向。
特殊寫法:
- echo oldboy 2>a.txt 1>b.txt
- #2>&1 就是把標準錯誤重定向到標準輸出
- echo oldboy &>log.txt
- #也可以用>&
- echo oldboy >log.txt 2>&1
4、把oldboy.txt文件拷貝到/tmp下
命令:
- cd /data
- cp oldboy.txt /tmp/
- 提示:加cp -a,cp,-p保持屬性
總結:
cp [-aifpru] [源文件] [目標文件]
????-a:相當于-pdr
????-d:若源文件為鏈接文件(link file),則復制鏈接文件屬性而非檔案本身。
????-f:強制,若目標檔案已經存在且無法開啟,則移除后再嘗試。
????-i:若目標文件已經存在時,在覆蓋時會先詢問。
????-p:連同檔案的屬性一起復制過去,而非使用默認屬性。
????-r:遞歸,用于復制目錄。
????-u:若目標文件存在,則目標文件比源文件舊時才復制。
提示:如果源文件是多個,那么目的文件在最后,且是目錄。
cp的重要參數apr。
5、把/data目錄移動到/root下
命令:
- mv /data /root/
- 提示:如果希望帶目錄拷貝,盡量不要mv /data/ /root/,移動目錄時,源目錄結尾不要多余斜線。
總結:
mv [-ifu] [源文件/源目錄] [目的文件/目的目錄]
????-i:如果目的文件已存在,詢問是否覆蓋
????-f:強制執行,不會詢問
????-u:若目的文件存在,則比源文件新才會移動。
提示:如果源文件是多個,那么目的文件在最后,且是目錄。
如:f1、f2是文件,/d1、/d2是目錄
mv f1 f2:如果f2不存在,則相當于f1重命名為f2;如果f2存在,則f1重命名為f2,并覆蓋f2 。
mv f1 /d1:如果/d1不存在,則把f1移動到/下,并重命名為d1;如果/d1存在,則把f1移動到/d1下。
mv /d1 /d2:如果/d2不存在,則把/d1重命名為/d2;如果/d2存在,則把/d1移動到/d2下。
mv /d2 f1:如果f1不存在,則把/d2移動到當前目錄,并重命名為f1;如果f1存在,會提示f1是個文件,不能用目錄覆蓋。
6、進入root目錄下的data目錄,刪除oldboy.txt
命令:
- cd /root/data/
- rm oldboy.txt
刪除一個文件一般用rm oldboy.txt,此法會提示你確認。用rm –f oldboy.txt方法不會提示確認直接刪除,比較危險。
對于文件的刪除禁止用"rm –fr 文件名",這是殺雞用牛刀的做法,必須禁止掉,最多用"rm –f 文件名"。rm –fr 一般用來強制刪除目錄不提示,非常危險。
建議:
使用mv替代rm,也就是把文件移動到/tmp下,然后等/tmp分區將要滿時一次性刪除,減少犯錯。
find刪除
- [root@oldboy66 data]# find /root/data/ -type f -exec rm -f {} \;
在腳本中刪除文件或目錄時生產環境的使用方法一般為:
1、和xargs搭配用法
- #刪除15天以前的文件
- find . -type f -name "*.log" -mtime +15 |xargs rm -f
- #刪除目錄30天 慎用
- find . -type f -name "*.log" -mtime +30 |xargs rm -fr
2、使用find的-exec
- #在/logs目錄中查找更改時間在5日以前的文件并刪除它們
- find /logs -type f -mtime "*.log" -mtime +5 -exec rm {} \;
find命令的原理:
\ :特殊字符,讓一個有特殊意義的字符,脫掉馬甲。
.. :上級目錄
. :當前目錄
\. :代表.號
| :管道(把前一個命令結果的輸出交給后一個程序進行繼續處理)
-type :按文件類型查找
-name :按名字查找,查找的內容最好用雙引號括起來。
! :取反。
刪除目錄下除了oldboy.txt外的所有文件:
- [root@oldboy66 data]# find /root/data -type f ! -name "oldboy.txt" |xargs rm -f
- 或
- [root@oldboy66 data]# find /root/data/ -type f ! -name "oldboy.txt" -exec rm {} \;
linux面試題:刪除一個目錄下所有文件,但保留一個指定文件。
? ?
? ?
7、退出到上級目錄,刪除data目錄。
命令:
- cd ..或cd ../
- rm -r data或rmdir data
- #里面是空目錄不需要用-rf。
總結:
.. :相對路徑,表示當前目錄的上一級目錄,例如:/mnt/oldboy,mnt就是oldboy的上級目錄。
. :相對路徑,表示當前目錄,即當前命令行的目錄。
rm [-irf] [文件/目錄] ?刪除文件/目錄
????-i:詢問用戶是否正確刪除,用y或n來回答。
????-r:刪除目錄時加該選項,刪除目錄及目錄下的文件和目錄。
????-f:強制刪除,不用確認。
rmdir [-p] [目錄名] ?用來刪除空目錄,-p表示遞歸刪除目錄,目錄里不能有文件或者目錄
如:/a/b/c
rmdir /a/b/c :會刪除/a/b/c,而/a/b還在。
rmdir –p /a/b/c :會刪除/a,/a/b,/a/b/c。
但是rmdir /a,rmdir –p /a/b都會出錯,提示:Directory not empty。
8、限定輸出
已知文件test.txt內容為:
test
liyao
oldboy
請給出打印test.txt內容時,不包含oldboy字符串的目錄。
方法一:
head:頭部,取文件的前N行,默認前10行,取出前三行-3 。
- [root@oldboy66 ~]# head -2 test.txt
方法二:
grep:過濾器,把想要的或者不想要的分離開,-v排除。
- [root@oldboy66 ~]# grep -v "oldboy" test.txt
提示:也可以使用cat test.txt|grep –v "oldboy",這個命令雖然能實現,但是執行效率差很多。
方法三:
sed:刪除,d表示delete刪除,p表示print打印,-n取消sed的默認輸出,-i改變文件內容。
????sed –n '/過濾的內容/處理的命令' 文件
- [root@oldboy66 ~]# sed -e '/oldboy/d' test.txt
- [root@oldboy66 ~]# sed /oldboy/d test.txt
- [root@oldboy66 ~]# sed -e /^oldboy/d test.txt
- [root@oldboy66 ~]# sed -n /[^oldboy]/p test.txt
? ?
方法四:
awk:
- [root@oldboy66 ~]# awk /[^oldboy]/ test.txt
9、用一條命令完成創建目錄/oldboy/test,即創建/oldboy目錄和/oldboy/test目錄
命令:
- mkdir -p /oldboy/test
實踐過程:
- #遞歸創建目錄,一般第一級目錄不存在時用-p,否則報錯mkdir: cannot create directory `/oldboy/test': No such file or directory
- [root@oldboy66 /]# mkdir -p /oldboy/test
安裝系統補裝工具命令:
yum安裝或者rpm安裝、源代碼安裝
更新補丁執行(生產環境盡量不做,除非有已知的安全漏洞):
yum update
安裝tree:
- [root@oldbo [root@oldboy66 /]# yum install tree -y
- #查詢tree
- [root@oldboy66 /]# rpm -qa tree
- tree-1.5.3-3.el6.x86_64
- [root@oldboy66 /]# tree oldboy/
- oldboy/
- └── test
- 1 directory, 0 files
tree:顯示目錄樹結構
yum:linux里的包管理器,yum可以幫助解決依賴問題。
例如:yum install tree -y,作用下載tree包,然后調用rpm命令安裝tree包,如果需要依賴包,會自動下載并提前安裝。
rpm: -ivh(安裝顯示輸出)
rpm –ivh 包名.rpm(提前下載好),rpm安裝的最大問題是無法解決依賴問題。
10、已知/tmp目錄下存在test.txt文件,如何執行命令才能把/mnt/test.txt拷貝到/tmp下覆蓋掉/tmp/test.txt,而linux系統不提示是否覆蓋(root權限下)。
命令:
方法一:
/bin/cp /mnt/test.txt /tmp/test.txt
方法二:
\cp /mnt/test.txt /tmp/test.txt
提示:此題就是屏蔽掉系統默認的對應命令別名,默認執行cp的操作是調用了別名的,所以提示覆蓋。
cp命令默認是不會提示overwrite,但是cp的-i選項會提示,而一般Linux的用戶環境文件~/.bashrc中會把cp命名成alias cp='cp -i'。這樣在Linux下輸入cp命令實際上運行的是cp –i,加上一個"\"符號或者寫cp全路徑/bin/cp就是讓此次的cp命令不使用別名(cp -i)運行。
別名概念:
輸入alias查找當前別名。
- [root@oldboy66 /]# alias
- alias cp='cp -i'
- alias l.='ls -d .* --color=auto'
- alias ll='ls -l --color=auto'
- alias ls='ls --color=auto'
- alias mv='mv -i'
- alias rm='rm -i'
- alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
取消別名設置:unalias(臨時生效,重啟失效)
- [root@oldboy66 /]# unalias cp
- [root@oldboy66 /]# alias
- alias l.='ls -d .* --color=auto'
- alias ll='ls -l --color=auto'
- alias ls='ls --color=auto'
- alias mv='mv -i'
- alias rm='rm -i'
- alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
添加別名設置:
- [root@oldboy66 /]# alias cp='cp -i'
- [root@oldboy66 /]# alias
- alias cp='cp -i'
- alias l.='ls -d .* --color=auto'
- alias ll='ls -l --color=auto'
- alias ls='ls --color=auto'
- alias mv='mv -i'
- alias rm='rm -i'
- alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
自定義別名oldboy:
- #設置oldboy為別名,執行echo I am oldboy linux
- [root@oldboy66 /]# alias oldboy="echo I am oldboy linux"
- #查看oldboy別名
- [root@oldboy66 /]# alias|grep oldboy
- alias oldboy='echo I am oldboy linux'
- [root@oldboy66 /]# oldboy
- I am oldboy linux
- #取消oldboy別名
- [root@oldboy66 /]# unalias oldboy
- [root@oldboy66 /]# alias|grep oldboy
自定義rm:
- [root@oldboy66 /]# alias rm='echo "rm can not be used,pls use mv"'
- [root@oldboy66 /]# alias|grep rm
- alias rm='echo "rm can not be used,pls use mv"'
- [root@oldboy66 /]# rm -fr /root/oldboy/
- rm can not be used,pls use mv -fr /root/oldboy/
方法三:
unalias cp
cp /mnt/test.txt /tmp/test.txt
提示:命令行處理別名僅在當時生效,重啟系統后失效。
alias:查看以及定義別名
unalias:取消別名
~:用戶的家目錄,針對root,~就代表/root。
別名的配置文件,針對root用戶/root/.bashrc;所有用戶生效,/etc/bashrc或/etc/profile定義,生效執行soure /etc/bashrc或/etc/profile。
別名的作用:
1、通過給危險命令加一別保護參數,防止人為誤操作。
2、把很多復雜的字符串或命令變成一個簡單的字符串或命令。
11、只查看ett.txt文件(100行)內第20到第30行的內容。
命令:
sequence == seq序列
- #打印1到3
- [root@oldboy66 tmp]# seq 3
- 1
- 2
- 3
- #打印1到3
- [root@oldboy66 tmp]# seq 1 3
- 1
- 2
- 3
- 打印2到8
- [root@oldboy66 tmp]# seq 2 8
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- #打印1到7的奇數
- [root@oldboy66 tmp]# seq 1 2 7
- 1
- 3
- 5
- 7
- #打印0到7的偶數
- [root@oldboy66 tmp]# seq 0 2 7
- 0
- 2
- 4
- 6
Usage: seq [OPTION]... LAST
or: seq [OPTION]... FIRST LAST
or: seq [OPTION]... FIRST INCREMENT LAST
-s:指定序列的分割符
- [root@oldboy66 tmp]# seq -s "--" 5
- 1--2--3--4--5
- [root@oldboy66 tmp]# seq -s "@" 5
- 1@2@3@4@5
生成ett文件,seq 100 >ett.txt。
- [root@oldboy66 tmp]# seq 100 >ett.txt
方法一:
tail:尾巴,取出文件的最后N行,默認最后10行,取最后三行-n 3 。
????-f:跟蹤一個文件的尾部實時變化(tail –f ett.txt)。
- [root@oldboy66 /]# head -30 ett.txt|tail -11
- [root@oldboy66 /]# tail -81 ett.txt|head -11
方法二:
- #效率高(首選)
- [root@oldboy66 tmp]# sed -n '20,30p' ett.txt
- [root@oldboy66 tmp]# sed -n 20,30p ett.txt
取出第30行:
- [root@oldboy66 tmp]# sed -n '30p' ett.txt
sed命令與選項:
sed強大的功能,是由以下多種命令和選項聯合工作的結果。sed通過指定某一地址來決定對哪些行來進行處理,如果沒有指定地址,sed默認處理標準輸入所有的行。地址的形式可以是數字,正則表達式,或兩種結合。如果給出的是由逗號連接的兩個地址,則表示sed要處理的內容就是該兩個地址之間的行。
sed命令就是用來處理那些由地址指定的輸入行。
命令 | 功能 |
a\ | 在當前匹配行的后面添加一行或多行文本內容 |
c\ | 更改當前匹配行的文本,替換成新的文本,原文本行內容消失 |
d | 刪除當前模式空間所有的內容 |
D | 刪除當前模式空間內第一個\n之前的內容 |
i\ | 在當前匹配行之前插入一行或多行文本內容 |
h | 把模式空間的內容復制到保持空間,并覆蓋當前保持空間的內容 |
H | 把模式空間的內容追加到保持空間,原保持空間的內容依舊存在(注意兩行之間的\n) |
x | 交換當前模式空間和當前保持空間的內容 |
g | 與s聯合使用時,表示對當前行全局匹配替換 |
g | 取出當前保持空間的內容,并將其復制到模式空間,覆蓋掉原模式空間的內容 |
G | 取出當前保持空間的內容,并將其復制到模式空間,追加到原模式空間內容的后面(注意兩行之間的\n) |
p | 打印匹配行 |
P | 打印當前模式空間內容,直到第一個換行符(\n)為止 |
n | 讀取下一行內容,并復制到模式空間,取代原模式空間的內容 |
N | 讀取下一行內容,并復制到模式空間,追加到原模式空間內容的后面(注意兩行之間的\n) |
q | 第一個模式匹配完成后退出或立即退出 |
r | 從另一個文件中讀取文本,并加入到當前匹配行后面 |
s | 常說的查找并替換,用一個字符串替換成另一個 |
w | 將匹配的行寫入新的文件 |
y | 將字符轉換為另一個字符(對正則表達式不能使用y命令) |
! | 對所選行以外的所有行進行相應處理 |
= | 顯示匹配內容行的行號 |
? ?
sed選項:
選項 | 功能 |
-e | 允許多項編輯 |
-f | 后接sed腳本的文件名 |
-n | 取消默認輸出 |
-i | 修改文件內容 |
? ?
打印:
sed –n '2p' oldboy.txt (打印第二行)
sed –n '$p' oldboy.txt (打印最后一行)
sed –n '1,3p' oldboy.txt (打印第1到3行)
sed –n '/yass/'p oldboy.txt (打印匹配yass的行)
sed –n '4,/The/'p oldboy.txt (在第四行匹配模式The,若匹配,則打印)
sed –n '/\$/'p oldboy.txt (匹配元字符$)
sed –n '1,$'p oldboy.txt (打印整個文件,只需將執行范圍設為第一行到最后一行1,$,$意義最后一行)
sed –n '/.*ing/'p oldboy.txt (任意字符,使用模式/.*ing/查詢以ing結尾的任意單次)
sed –n '/movie/=' oldboy.txt (打印匹配行的行號)
sed –n –e '/movie/p' –e '/movie/=' oldboy.txt (打印匹配行的內容和行號)
sed '=' oldboy.txt|tail -2 (顯示行數或最大行號)
方法三:
- [root@oldboy66 tmp]# awk '{if(NR<31 && NR>19) print $1}' ett.txt
- 或
- [root@oldboy66 tmp]# awk '{if(NR<31 && NR>19) printf $1"\n"}' ett.txt
awk:一門語言,過濾內容(取列)
????awk '{print $1}' 文件 ?$1第一列,$2第二列
????awk –F "分隔符" '{print $1}' 文件 ?$1第一列,$2第二列,…,$(NF-1)(倒數第二列),$NF(最后一列)
案例:awk默認分隔符空格
- [root@oldboy66 tmp]# cat awk.txt
- oldboy oldgirl
- ddd fff
- [root@oldboy66 tmp]# awk '{print $1}' awk.txt
- oldboy
- ddd
- [root@oldboy66 tmp]# awk '{print $2}' awk.txt
- oldgirl
- fff
-F指定分隔符:
- [root@oldboy66 tmp]# awk -F ":" '{print $1}' /etc/passwd
指定輸出行之間的分隔符:
- [root@oldboy66 tmp]# awk -F ":" '{print $1 " " $3 "==" $5}' /etc/passwd
總結:
head [-n] [文件名]:后面直接跟文件名,顯示文件前10行。-n表示顯示文件前n行。
tail [-nf] [文件名]:后面直接跟文件名,顯示文件后10行。-n表示顯示文件后n行。
方法四:
- [root@oldboy66 tmp]# cat ett.txt|grep 20 -A 10
- [root@oldboy66 tmp]# cat ett.txt|grep 30 -B 10
- [root@oldboy66 tmp]# cat ett.txt|grep 25 -C 5
-A:除了顯示匹配的一行之外,并顯示該行之后的num行。
-B:除了顯示匹配的一行之外,并顯示該行之前的num行。
-C:除了顯示匹配的以后之外,并顯示該行前后各num行。
12、分析圖片服務日志,把日志(每個圖片訪問次數*圖片大小的總和)排行,取top10,也就是計算每個url的總訪問大小。
說明:這個功能可以用于IDC網站流量帶寬很高,然后通過分析服務器日志哪些元素占用流量過大,進而進行優化或裁剪該圖片,壓縮js等措施。
13、把/oldboy目錄及其子目錄下所有以擴展名.sh結尾的文件中包含./hostlists.txt的字符串全部替換為./idctest_iplist。
命令:
- [root@oldboy66 tmp]# find ./ -name "*.sh" -type f -exec sed -i 's#./hostlists.txt#./idctest_iplist#g' {} \;
解析:
sed替換:
sed –i 's#oldboy#oldgirl#g' a.txt
????s:查找并替換,用一個字符串替換成另一個。
????g:與s聯合使用時,表示對當前行全局匹配替換。
????-i:修改文件內容。
????#:分隔符,也可以用/、@等替換。
find查找:
find / -type f –name "a.txt"
組合:
替換當前目錄下面所有文件名為test.txt中的oldboy為oldgirl。
- [root@oldboy66 tmp]# find ./ -name "test.txt" -type f|xargs sed -i 's#oldboy#oldgirl#g'
- [root@oldboy66 tmp]# find ./ -name "test.txt" -type f -exec sed -i 's#oldboy#oldgirl#g' {} \;
- [root@oldboy66 tmp]# sed -i 's#oldboy#oldgirl#g' `find ./ -name "test.txt" -type f`
查看:
- [root@oldboy66 tmp]# find ./ -name "test.txt" -type f|xargs cat
- [root@oldboy66 tmp]# find ./ -name "test.txt" -type f -exec cat {} \;
- [root@oldboy66 tmp]# cat `find ./ -name "test.txt" -type f`
特殊字符總結:
符號 | 作用 |
> | 輸出重定向符,重定向內容到文件,清除已有的內容,然后加入新內容,如果文件不存在還會創建文件 |
>> | 追加輸出重定向符,>>追加內容到文件(中間無空格) |
< | 輸入重定向(箭頭朝向就是數據流的方向) |
<< | 追加輸入重定向 |
| | 管道,就像一個真實管道一樣,例如:水管左邊進水,右邊流出來。其他的功能,egrep "3306|1521" /etc/services |
\ | 轉義字符,讓有意義的字符脫掉它代表的意義。例如:正則里$表示以什么結尾,用\$表示$符號本身。 |
~ | 當前用戶的家目錄 |
.或./ | 一個點號是當前目錄,其他功能,正則,任意單個字符 |
..或../ | 兩個點號是當前目錄的上級目錄 |
/ | 根目錄,即linux里所有目錄的頂點。也是路徑分隔符,而windows里則為D:\工作目錄\ |
; | 命令分隔符 |
{} | 生成字符或數字序列(seq),一般配合echo等命令使用,find里的{}意思是前面命令的結果,mkdir stu{1..100} |
! | 1、!+字母,表示調出最近一次以此字母開頭的命令;2、!!表示使用最近一次操作的命令;3、!+數字,表示調出歷史的第幾條命令。 |
- | 用戶上一次所在的目錄。-由OLDPWD變量控制。 |
? ?
常用快捷鍵:
tab命令或路徑補全鍵,如果。
ctrl+c終止當前任務命令或程序。
ctrl+d退出當前用戶環境。相當于exit、logout。
ctrl+l清屏。
ctrl+shift+c(ctrl+insert)ssh客戶端SecureCRT里復制的命令。
ctrl+a:到開頭
ctrl+e:到結尾
ctrl+u:剪切光標前
ctrl+k:刪除光標后