文章目錄
- 其他文章:
- 2 檔案系統命令
- 2.1 虛擬目錄樹!!!
- 2.2 df
- 2.3 mount
- 2.4umount
- 3 系統操作命令
- 3.1 du!!!
- 3.2 stat!
- 3.3 touch!!
- 4 文本操作命令
- 4.1cat!!!
- 4.2head!!
- 4.3 tail!!!
- 4.4 管道| !!!
- 4.5 xargs!!
- 4.6資料重定向!!!
- 4.7cut
- 4.8 sort
- 4.9 sed !!
- 4.10 awk
- 4.11 wc
- 4.12 vi/vim 編輯器的使用!!!
- 5 檔案壓縮與打包
其他文章:
Linux——(1)基本命令
Linux——(2)檔案系統、系統操作、文本操作命令、檔案壓縮與打包
2 檔案系統命令
2.1 虛擬目錄樹!!!
虛擬目錄樹的各個目錄用途
| 目錄 | 用途 |
|---|---|
| / | 虛擬目錄的根目錄,通常不會在這里存盤檔案 |
| /bin | 二進制目錄,存放許多用戶級的 GNU 工具 |
| /boot | 啟動目錄,存放啟動檔案 |
| /dev | 設備目錄,Linux 在這里創建設備節點 |
| /etc | 系統組態檔目錄 |
| /home | 主目錄,Linux 在這里創建用戶目錄 |
| /lib | 庫目錄,存放系統和應用程式的庫檔案 |
| /media | 媒體目錄,可移動媒體設備的常用掛載點 |
| /mnt | 掛載目錄,另一個可移動媒體設備的常用掛載點 |
| /opt | 行程目錄,存放現有硬體及當前繼承的相關資訊 |
| /proc | 虛擬目錄的根目錄,通常不會在這里存盤檔案 |
| /root | root 用戶的主目錄 |
| /sbin | 系統二進制目錄,存放許多 GNU 管理員級工具 |
| /srv | 服務目錄,存放本地服務的相關檔案 |
| /sys | 系統目錄,存放系統硬體資訊的相關檔案 |
| /tmp | 臨時目錄,可以在該目錄中創建和洗掉臨時作業檔案 |
| /usr | 大量用戶級的 GNU 工具和資料檔案都存盤在這里 |
| /var | 可變目錄,用以存放經常變化的檔案,比如日志檔案 |
2.2 df
查看系統掛載的磁盤情況
df
以人能看懂的格式顯示
df -h
列出根目錄下的內容
ls /
進到 boot 目錄
cd /boot
在 linux 中用到了虛擬目錄樹,它的存在就是為了解耦應用和底層存盤,
2.3 mount
將光驅掛載到/mnt 目錄:
mount /dev/cdrom /mnt
進入到/mnt 目錄
cd /mnt
查看磁盤磁區的掛載情況:
df -h
2.4umount
卸載掉掛載的磁區/mnt
umount /mnt
注意卸載/mnt 時,當前目錄不能在/mnt 下面,否則報出如下圖所示提示:
再次查看磁盤磁區的掛載情況:
df -h
重新掛載
mount /dev/cdrom /mnt
如果沒有掛載,則訪問父目錄的檔案夾
再次查看
df -h
3 系統操作命令
3.1 du!!!
du 可以為目錄遞回地匯總每個 FILE 的磁盤使用情況,
? du:檔案系統的磁盤使用量或是目錄使用量
- a :列出所有的檔案與目錄容量
- h :以人們較易讀的容量格式(G/M)顯示 重要
- s :列出總量而已,而不列出每個各別的目錄占用容量
- k :以 KBytes 列出容量顯示
- m :以 MBytes 列出容量顯示


添加-s 引數可以生成指定目錄的匯總資訊,也就是共占用多大的磁盤空間
du -s ./
添加-h 引數可以顯示為人類可以讀懂的格式
du -sh ./
將路徑寫成./*統計當前目錄下每項內容占用的磁盤空間資訊
du -sh ./*


3.2 stat!
顯示檔案的元資料
stat /etc/profile
change 和 modify 的不同
modify 指的是檔案內容被修改的時間
change 表示檔案元資料被修改的時間

3.3 touch!!
touch 已存在的檔案,抹平各個時間
touch 不存在的檔案,則創建檔案
4 文本操作命令
4.1cat!!!
直接查看一個檔案的內容可以使用 cat,tac,nl 這幾個指令
cat(concatenate):

cat 是 concatenate 的縮寫,其功能時間一個檔案的內容連續的輸出,該命令適合看行 數較少的檔案,另外,需要查看一般 DOS 檔案時,可以通過-A 選項來顯示換行符和[tab],
tac(反向輸出):

與上面的 cat 命令進行比較,是由最后一行先顯示,
tac 功能與 cat 類似,但是是由檔案最后一行反向連續輸出到螢屏上,
nl(添加行號列印):

nl 可以將輸出的檔案內容自動的加上行號,

4.2head!!
head(取出前面幾行,Centos6.5 使用/etc/man.config 檔案):

4.3 tail!!!
命令格式:tail [ -n number] 檔案
選項與引數:
- n:后面接數字,代表顯示幾行的意思
- f:表示持續偵測后面檔案內容的改變,知道按下 Ctrl+c 才會結束 tail 的偵測,
默認情況下顯示最后 10 行:
[root@node1 ~]# tail profile
如果先要顯示最后 20 行,就要如下:
[root@node1 ~]# tail -n 20 profile
[root@node1 ~]# tail -f profile
4.4 管道| !!!
[root@bk1 ~]# ps -aux |grep ssh
[root@bk1 ~]# yum list |grep mysql
如何顯示檔案中間的幾行?
[root@node1 ~]# head -n 20 profile |tail -n 10
可以省略為:
[root@node1 ~]# head -20 profile |tail -10
管道左側的輸出作為右側的輸入
echo “/” | ls -l 顯示內容錯誤(不是預期的結果),因為 ls 不需要輸入,只需要引數
4.5 xargs!!
將前面輸出作為后面命令的引數
echo "/" | xargs ls -l
? xargs:命令
- 1,在標準輸入中讀取到的內容!
- 2,自己的引數理解為一個字串
? 模仿 shell,做 blank 切分,第一個子字串為命令 - 3,將步驟 1 的內容做為步驟 2 的命令的選項引數拼接起來
- 4,執行得到的結果
4.6資料重定向!!!
- 標準輸入(stdin):編號為 0
- 標準輸出(stdout):編號為 1
- 標準錯誤輸出(stderr):編號為 2
- 1>:以覆寫的方法,將正確的資料輸出到檔案;
- 1>>:以累加的方法,將正確的資料輸出到檔案;
- 2>:以覆寫的方法,將錯誤輸出的資料輸出到檔案;
- 2>>:以累加的方法,將錯誤輸出的資料輸出到檔案;
ls -l >> ok1.log
ls -l > ok2.log
ls hello 2>/root/err.log
ls hello / 1>/root/log.log2>/root/err.log
ls 1>/dev/null
ls 2>/tmp/err.log
既向控制臺輸出,也向檔案寫入
ls -l / | tee ok2.log
tee 命令,將輸入分成兩個輸出
4.7cut
cut:顯示切割的行資料
- s:不顯示沒有分隔符的行
- d:指定分隔符對源檔案的行進行分割
- -f 選定顯示哪些列
? m-n m 列到 n 列
? -n 第一列到 n 列
? m- 第 m 列到最后一列
? n 第 n 列
? x,y,z 獲取第 x,y,z 列
以:作為分隔符,切割 passwd,輸出從第 3 個欄位到第 5 個欄位

輸出前兩列內容:

輸出欄位 3 到最后一個欄位

指定輸出的分隔符:

輸出第 7 個欄位:

如果有的行沒有分隔符,則輸出會包含臟資料

可以使用-s 選項:
不列印沒有分隔符的行:

顯示 1,3,7 列
– output-delimiter 指定輸出的時候的各字符分隔符

4.8 sort
排序:字典序和數值序
sort:排序檔案的行
- n:按數值排序
- r:倒序 reverse
- t:自定義分隔符
- k:選擇排序列
- f:忽略大小寫
sort.txt
a b 1
dfdsa fdsa 15
fds fds 6
fdsa fdsa 8
fda s 9
aa dd 10
h h 11
默認字典序排序

指定欄位分隔符,按照第 2 個欄位的字典序排序

指定欄位分隔符,按照第 3 個欄位的值數值序排序

4.9 sed !!
sed:行編輯器
sed [選項] ‘AddressCommand’ file…
-
-i:直接修改源檔案
-
-r:表示使用擴展正則運算式
-
d:洗掉符合條件的行
-
a\string:在指定的行后追加新行,內容為 string
\n:用于換行 -
i\string:在指定行前添加新行,內容是 string
-
s/string1/string2/:查找并替換,默認只替換每行第一次模式匹配到的字串
g:行內全域替換 i:忽略大小寫 s///,s###,s@@@:用于避免字符沖突 \(\) \1\2
sed:行編輯器 Address
- 可以不指定
- 給定范圍
- 查找指定行/str/
sed.txt

第一行下插入一行
sed "1a\hello world" sed.txt
直接修改檔案
sed -i "1a\hello world" sed.txt
洗掉第 2 行
sed -i "2d" sed.txt
洗掉檔案中的每一行
sed "d" sed.txt
原來的內容要列印,匹配的行要列印,找到的行會列印兩次
sed "/[0-9]/p" sed.txt
匹配行中包含 0-9 任意一個字符的行,只列印找到的行
sed -n "/[0-9]/p" sed.txt
將 filesystem替換為 FS
sed "s/filesystem/FS/" sed.txt
忽略大小寫
sed "s/filesystem/FS/i" sed.txt
不僅忽略大小寫還要行內全域替換
sed "s/filesystem/FS/gi" sed.txt
cp /etc/inittab ./
將檔案中的默認運行級別改為 5
sed "s/[0-6]/5/" inittab
發現將所有匹配的都修改了(注意并未修改原檔案),匹配訪問太廣了,
更精確匹配方案的寫法應該為如下命令:
sed "s/id:[0-6]:initdefault:/5/" inittab
但是還存在問題,匹配后被修改內容問匹配出的部分,范圍過大,解決辦法:
反向參考
sed "s/\(id:\)[0-6]\(:initdefault:\)/\15\2/" inittab
分析:
sed "s/\(id:\)[0-6]\(:initdefault:\)/\15\2/" inittab
id:num:initdefalut: \15\2
id:5:initdefault:
也可以寫成:
sed -r "s/(id:)[0-6](:initdefault:)/\15\2/" inittab
./edit_inittab.sh
查找/etc/profile 中包含 PATH 的行,將這些行寫到指定的檔案:hello.log 中
sed -n "/PATH/w hello.log" /etc/profile
4.10 awk
awk:
- awk 是一個強大的文本分析工具
- 相對于 grep 查找,sed 編輯,awk 在對資料分析并生成報告時更為強大
- awk 把檔案逐行讀入,以
空格和制表符作為默認分隔符將每行切片,切開的部分 再進行各種分析處理,
awk -F [’:’] ‘{pattern + action}’ filename
-
支持自定義分隔符
-
支持正則運算式匹配
-
支持自定義變數,陣列 a[1] a[tom] map(key)
-
支持內置變數
FS 設定輸入域分隔符,等價于命令列 -F 選項 NF 瀏覽記錄的域的個數 NR 已讀的記錄數 OFS 輸出域分隔符 ORS 輸出記錄分隔符 RS 控制記錄分隔符 -
支持函式
-
print、split、substr、sub、gsub
-
支持流程控制陳述句,類 C 語言
-
if、while、do/while、for、break、continue
搜索/etc/passwd 有 root 關鍵字的所有行
cp /etc/passwd ./
awk '/root/ { print $0}' passwd
統計/etc/passwd 檔案中,每行的行號,每行的列數,對應的完整行內容
awk -F ':' '{print NR "-" NF "-" $0}' passwd
只是顯示/etc/passwd 的賬戶:
awk -F':' '{print $1}' passwd
只是顯示/etc/passwd 的賬戶和賬戶對應的 shell,而賬戶與 shell 之間以逗號分割,
awk -F':' '{print $1 "," $7}' passwd
制表符拼接欄位
awk -F':' ' { print $1"\t" $7} ' passwd
在所有行開始前添加列名 name,shell,在最后一行添加"shell,end"

awk -F ":" '
BEGIN{
print "name,shell"
}
{
print $1","$7
}
END{
print "shell,end"
}
' passwd
? 案例報表統計:合計每人 1 月總消費,0:manager,1:worker
Tom 0 2020-10-11 car 3000
John 1 2020-01-13 bike 1000
vivi 1 2020-01-18 car 2800
Tom 0 2020-01-20 car 2500
John 1 2020-01-28 bike 3500
解決方案:
awk '{
split($3,date,"-")
}
END{
for(i in date){
print i"\t"date[i]
}
}
' emp.txt
角色處理:
if $2 ==0
map_name_role[$1] = “manager”
else
map_name_role[$1] = “worker”
整合:
awk '{
split($3, date, "-")
if (date[2] == "01"){
map_name_sala[$1]+=$5
if($2=="0"){
map_name_role[$1]="Manager"
}else{
map_name_role[$1]="Worker"
}
}
}
END{
for(name in map_name_sala){
print name"\t"map_name_sala[anme]"\t"map_name_role[name]
}
}' awk.txt
4.11 wc
wc [選項串列]… [檔案名串列]…
DESCRIPTION 描述
對每個檔案輸出行、單詞、和位元組統計數,如果指定了多于一個檔案則還有一個 行數的總計,沒有指定檔案或指定的
檔案是 -,則讀取標準輸入,
- -c, --bytes, --chars 輸出位元組統計數,
- -l, --lines 輸出換行符統計數,
- -L, --max-line-length 輸出最長的行的長度,
- -w, --words 輸出單詞統計數,
- –help 顯示幫助并退出
- –version 輸出版本資訊并退出

4.12 vi/vim 編輯器的使用!!!

i 進入編輯模式
a 在選定字符后插入字符
o 在當前行下添加新行
O 在當前行上添加新行
I 在當前行首進入編輯模式
A 在當前行末進入編輯模式
ESC 退出編輯模式
: 末行模式
ESC,ESC 退出末行模式
ZZ 在命令模式保存并退出編輯器
:wq 保存并退出編輯器
:w 保存編輯器內容
:q! 不保存退出編輯器
移動游標
h 左 j 下 k 上 l 右
w 移動到下一個單詞的詞首
e:跳至當前或下一個單詞的詞尾
b:跳至當前或下一個單詞的詞首
0:絕對行首
^:行首的第一個非空白字符
$:絕對行尾
G:檔案末尾
3G:第三行
gg:檔案開頭
ctrl-f 向下翻頁 forward
ctrl-b 向上翻頁 backward
洗掉替換單個字符
x:洗掉游標位置字符
3x:洗掉游標開始 3 個字符
r:替換游標位置字符
dw 洗掉單詞
dd 洗掉整行
D:洗掉游標所在位置到行尾
yw 復制單詞
yy 復制 1 行
nyy 復制 n 行,n 是數字
p 粘貼 paste
u:撤銷 undo
ctrl+r:重做 操作結束后使用 u 退回到上次操作,則 ctrl+r 重做 . 重復上一步操作
set:設定
:set nu number 顯示行號
:set nonu nunumber 取消行號的顯示
:set readonly 設定只讀
:/after
n,N
?向上查找
:! 執行命令
查找并替換
s/str1/str2/gi
/:臨近 s 的第一個為邊界字符 :/ @ #(為了防止內容和邊界字符重復,可以使用 @和#做邊界字符)
g:一行內全部替換
i:忽略大小寫
n:行號
.:當前游標行
+n:偏移 n 行
$:末尾行,$-3
%:全文 :%d 洗掉全文
:.,$-1d 從當前行洗掉到倒數第二行
:.,+3d 從當前行再往下數三行洗掉
:.,13d 從當前行到第 13 行洗掉
5 檔案壓縮與打包
壓縮:指通過某些演算法,將檔案尺寸進行相應的縮小,同時不損失檔案的內容,
打包:指將多個檔案(或目錄)合并成一個檔案,方便傳遞或部署,
壓縮檔案或打包檔案常見的擴展名:*.tar.gz, *.tar.bz2;linux 系統一般檔案 的擴展名用途不大,但是壓碩訓打包檔案的擴展名是必須的,因為 linux 支持的壓縮命令 較多,不同的壓縮技術使用的壓縮演算法區別較大,根據擴展名能夠使用對應的解壓演算法,
常見檔案擴展名:
- *.tar.gz tar 程式打包的檔案,并且經過 gzip 的壓縮
- *.tar.bz2 tar 程式打包的檔案,并且經過 bzip2 的壓縮
TAR 命令,選項與引數:
- -c :建立打包檔案,
- -t :查看打包檔案的內容含有哪些檔案
- -x :解打包或解壓縮的功能,可以搭配-C(大寫)在特定到特定目錄解開
- -j :通過 bzip2 的支持進行壓縮/解壓縮:此時檔案最好為 *.tar.bz2
- -z :通過 gzip 的支持進行壓縮/解壓縮:此時檔案最好為 *.tar.gz
- -v :在壓縮/解壓縮的程序中,將正在處理的檔案名顯示出來
- -f filename:-f 后面跟處理后檔案的全名稱(路徑+檔案名+后綴名)
- -C 目錄:這個選項用在解壓縮,若要在特定目錄解壓縮,可以使用這個 選項 -p :保留備份資料的原本權限與屬性,常用于備份(-c)重要的組態檔
注意 -c, -t, -x 不可同時出現在一串指令列中
TAR 常用的指令組合!!!
- 打包與壓縮:
tar –zcv –f [/路徑/]filename.tar.gz 被壓縮的檔案或目錄
tar –jcv –f [/路徑/] filename.tar.bz2 被壓縮的檔案或目錄
練習:將/etc 目錄下的所有檔案打包并壓縮/tmp/part1/tar/etc01.tar.gz
將/etc 目錄下的所有檔案打包并壓縮/tmp/part1/tar/etc02tar.bz2
- 查詢:
tar –ztv –f [/路徑/] filename.tar.gz
tar –jtv –f [/路徑/] filename.tar.bz2
- 備份:
tar –zpcv –f [/路徑/]filename.tar.gz 被備份檔案或目錄
tar –jpcv –f [/路徑/]filename.tar.bz2 被備份檔案或目錄
- 解壓到當前目錄:
tar –jxv –f [/路徑/] filename.tar.bz2
tar –zxv –f [/路徑/] filename.tar.gz
- 解壓到指定目錄:
tar -jxv -f [/路徑/] filename.tar.bz2 –C 指定目錄
tar -zxv -f [/路徑/] filename.tar.gz -C 指定目錄
- 注意:filename 前帶路徑表示該路徑下的,反之表示當前目錄下
- 將/etc 壓縮到/tmp/下 etc01.tar.gz
- 方式一:filename.tar.gz 前不帶路徑
[root@node1 ~]# cd /tmp/
[root@node1 tmp]# tar -zcvf etc01.tar.gz /etc/
- 方式二:filename.tar.gz 前帶路徑
[root@node1 ~]# tar -zcvf /tmp/etc01.tar.gz /etc
- 將/tmp/下 etc01.tar.gz 解壓到/tmp/目錄下
[root@tedu ~]# cd /tmp/ #首先進入對應目錄
[root@tedu tmp]# tar -zxvf etc01.tar.gz
- 將/tmp/下 etc01.tar.gz 解壓到/usr/目錄下
[root@tedu tmp]# tar -zxvf etc01.tar.gz -C /usr 或者
[root@tedu tmp]# tar -zxvC /usr -f etc01.tar.gz
我是小白弟弟,一個在互聯網行業的小白,立志成為一名架構師
https://blog.csdn.net/zhouhengzhe?t=1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/278567.html
標籤:其他
上一篇:nfs檔案共享服務
