Linux基礎命令(二) 1. 壓縮,解壓縮命令 壓縮格式:gz、bz2、xz、zip、Z 1.1 gzip 壓縮,壓縮後文件以.gz結尾,壓縮後會刪除原文件 [root@zzd ~]# gzip 1.txt //將1.txt壓縮,以.gz結尾 -d 解壓縮,解壓完成後刪除原文件 [root@zzd ...
Linux基礎命令(二)
目錄
1. 壓縮,解壓縮命令
壓縮格式:gz、bz2、xz、zip、Z
1.1 gzip
壓縮,壓縮後文件以.gz結尾,壓縮後會刪除原文件
[root@zzd ~]# gzip 1.txt //將1.txt壓縮,以.gz結尾
-d 解壓縮,解壓完成後刪除原文件
[root@zzd ~]# gzip -d 1.txt.gz //將1.txt.gz解壓
-# #用1-9代替,指定壓縮比,預設為6
1.2 gunzip
解壓縮,解壓縮完成後會刪除原文件
[root@zzd ~]# gunzip 1.txt.gz //將1.txt.gz解壓
1.3 zcat
不解壓的情況下查看文件的內容
[root@zzd ~]# zcat 1.txt.gz //不解壓,查看壓縮文件里的內容
1 2 4
2 4 6
5 6 8
3 5 9
2 8 5
5 6 8
1 3 7
1 2 4
2 8 5
1 2 4
3 5 9
2 4 6
1.4 bzip2
壓縮,壓縮後文件以.bz2結尾,壓縮後刪除原文件。bzip2是一款比gzip有著更大壓縮比的壓縮工具,使用格式相近
[root@zzd ~]# bzip2 1.txt //將1.txt壓縮,以.bz2結尾
-d 解壓縮,解壓完成後刪除原文件
[root@zzd ~]# bzip2 -d 1.txt.bz2 //將1.txt.bz2文件解壓
-k 壓縮時保留原文件
[root@zzd ~]# ls
1.txt
[root@zzd ~]# bzip2 -k 1.txt //壓縮完後保留原文件
[root@zzd ~]# ls
1.txt 1.txt.bz2
-# #用1-9代替,指定壓縮比,預設為6
1.5 bunzip2
解壓縮,解壓縮完成後刪除原文件
[root@zzd ~]# bunzip2 1.txt.bz2 //將1.txt。bz2文件解壓
1.6 bzcat
不解壓的情況下查看文件的內容
[root@zzd ~]# bzcat 1.txt.bz2 //不解壓,查看文件內容
1 2 4
2 4 6
5 6 8
3 5 9
2 8 5
5 6 8
1 3 7
1 2 4
2 8 5
1 2 4
3 5 9
2 4 6
1.7 xz
壓縮,壓縮後文件以.xz結尾,壓縮完成後刪除原文件。比bzip2有著更大壓縮比的壓縮工具,使用格式近似
[root@zzd ~]# xz 1.txt //將文件1.txt壓縮,以.xz結尾
-d 解壓縮,解壓縮後刪除原文件
[root@zzd ~]# xz -d 1.txt.xz //將文件1.txt.xz解壓
-k 壓縮時保留原文件
[root@zzd ~]# xz -k 1.txt //壓縮時保留原文件
-# #用1-9代替,指定壓縮比,預設為6
1.8 unxz
解壓,解壓完成後刪除原文件
[root@zzd ~]# unxz 1.txt.xz //解壓1.txt。xz
1.9 xzcat
不解壓的情況下查看文件內容
[root@zzd ~]# xzcat 1.txt.xz //不解壓,查看文件內容
1 2 4
2 4 6
5 6 8
3 5 9
2 8 5
5 6 8
1 3 7
1 2 4
2 8 5
1 2 4
3 5 9
2 4 6
1.10 zip
既歸檔又壓縮的工具,zip可以壓縮目錄,壓縮完成後保留原文件
[root@zzd ~]# zip test.zip 1.txt //將1.txt進行歸檔並壓縮為test.zip
[root@zzd ~]# zip Test-dir.zip test/* //將目錄test/歸檔並壓縮為Test-dir.zip
1.11 unzip
解壓縮,解壓完成後不刪除原文件
[root@zzd ~]# unzip Test-dir.zip //將Test-dir.zip解壓
1.12 tar
歸檔工具,只歸檔不壓縮
Linux的文件沒有尾碼
-c 創建歸檔文件
-f 操作的歸檔文件,此選項後面只能跟想要操作文件名
[root@zzd ~]# tar -cf test.tar test/* //將test目錄歸檔為test.tar
-x 還原歸檔
[root@zzd ~]# tar xf test.tar //將test.tar還原歸檔
-v 顯示歸檔過程
[root@zzd ~]# tar -vcf test.tar test/* //將test目錄歸檔為test.tar並顯示歸檔過程
test/test1/
test/test2/
-p 歸檔時保留許可權信息,只有管理員才能使用此選項
-C 將展開歸檔的文件保存至指定目錄下
[root@zzd ~]# tar -xf test.tar -C /opt/ //將test。tar還原歸檔到指定目錄
[root@zzd ~]# ls /opt/
test
-tf 不展開歸檔,查看文件歸檔了那些文件
[root@zzd ~]# tar -tf test.tar //不展開歸檔,查看歸檔文件test.tar的內容
test/
test/test1/
test/test2/
-zcf 歸檔並調用gzip壓縮工具
-jcf 歸檔並調用bzip2壓縮工具
-Jcf 歸檔並調用xz壓縮工具
[root@zzd ~]# tar -zcf test.tar.gz test/ //歸檔並調用gzip壓縮工具
[root@zzd ~]# file test.tar.gz //查看test.tar.gz的文件類型
test.tar.gz: gzip compressed data, last modified: Sat Jul 2 09:51:50 2022, from Unix, original size 10240
[root@zzd ~]# tar -jcf test.tar.bz2 test/ //歸檔並調用baip2壓縮工具
[root@zzd ~]# file test.tar.bz2 //查看test.tar.bz2的文件類型
test.tar.bz2: bzip2 compressed data, block size = 900k
[root@zzd ~]# tar -Jcf test.tar.xz test/ //歸檔並調用xz壓縮工具
[root@zzd ~]# file test.tar.xz //查看test.tar.xz的文件類型
test.tar.xz: XZ compressed data
2. 查看文本
2.1 cat
拼接文件內容並輸出至標準輸出(屏幕)
-n 顯示行號
[root@zzd ~]# cat 001 //將001文件的內容標準輸出
ashfasdf
[root@zzd ~]# cat 001 002 003 //將001、002、003的內容憑藉並標準輸出
ashfasdf
sdlvnnxcbxbf
nstelazbf
[root@zzd ~]# cat -n 001 002 003 //顯示行號
1 ashfasdf
2 sdlvnnxcbxbf
3 nstelazbf
//使用cat查看文件內容時會將文件的所有內容全部載入到記憶體,所以應當避免使用cat查看打開巨大文件
2.2 more
全屏查看文件內容,只能從前往後看,不能從後往前看,文件內容顯示完後退出
[root@zzd ~]# more anaconda-ks.cfg
2.3 less
全屏顯示文件內容,可從前往後亦可從後往前(“空格”向後翻,“b”向前翻,“q”退出),推薦使用
[root@zzd ~]# less anaconda-ks.cfg
2.4 head
從頭部開始列印文件內容,預設列印10行
-n 指定要列印的行數,可以是-n 5也可以是-5
[root@zzd ~]# head -5 passwd //列印passwd頭部開始的5行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
2.5 tail
從尾部開始列印文件內容,預設列印10行
-n 指定要列印的行數,可以是-n 5也可以是-5
[root@zzd ~]# tail -5 passwd //列印passwd尾部開始的5行
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
unbound:x:997:994:Unbound DNS resolver:/etc/unbound:/sbin/nologin
sssd:x:996:993:User for sssd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
rngd:x:995:992:Random Number Generator Daemon:/var/lib/rngd:/sbin/nologin
//如果想要列印passwd文件里的第五行該怎麼辦?
[root@zzd ~]# head -5 passwd | tail -1
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
3.文本處理
3.1 cut
截取文件內容
-d 指定欄位分隔符
-f 指定要顯示的欄位
-f 1,3 顯示1和3
-f 1-3 顯示1到3
[root@zzd ~]# cat qwer //標準輸出qwer文件內容
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@zzd ~]# cut -d : -f 1,3 qwer //以":"為分隔符,截取文件qwer的第1列和第3列
root:0
bin:1
daemon:2
adm:3
lp:4
[root@zzd ~]# cut -d : -f 1-3 qwer //以":"為分隔符,截取文件qwer的第1列到第3列
root:x:0
bin:x:1
daemon:x:2
adm:x:3
lp:x:4
//cut只能截取一些非常規範的文件內容,如果是一個內容不規範的文件,那麼cut就無能為力了。例如,以空格為分隔符,想要截取磁碟使用情況的第四列就會出現以下情況
[root@zzd ~]# df -h | cut -d ' ' -f 4
17G
//這種情況就需要用到awk命令,在3.2會提及
3.2 sed
基於行的過濾和轉換文本的流編輯器
#sed的功能很強大,可以實現對某個文件的刪、改、查
一.查
[root@zzd ~]# sed -n '2p' qwer //-n可以關閉sed預設的列印功能,2p表示列印第二行
bin:x:1:1:bin:/bin:/sbin/nologin
[root@zzd ~]# sed '2p' qwer //不加上選項-n,在預設列印的基礎上列印第二行,第二行會出現兩次
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@zzd ~]# sed -n '2p;5p' qwer //關閉sed預設的列印功能,列印第2行和第5行
bin:x:1:1:bin:/bin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@zzd ~]# sed -n '2,4p' qwer //關閉sed預設的列印功能,列印第2行到第4行
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
二.改
[root@zzd ~]# sed 's/:/;/' qwer //將文件qwer每行的第一個":"替換為";"
root;x:0:0:root:/root:/bin/bash
bin;x:1:1:bin:/bin:/sbin/nologin
daemon;x:2:2:daemon:/sbin:/sbin/nologin
adm;x:3:4:adm:/var/adm:/sbin/nologin
lp;x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@zzd ~]# sed 's/:/;/3' qwer //將每行的第3個":"替換為";"
root:x:0;0:root:/root:/bin/bash
bin:x:1;1:bin:/bin:/sbin/nologin
daemon:x:2;2:daemon:/sbin:/sbin/nologin
adm:x:3;4:adm:/var/adm:/sbin/nologin
lp:x:4;7:lp:/var/spool/lpd:/sbin/nologin
[root@zzd ~]# sed 's/:/;/g' qwer //將整個文件里所有的":"都替換為";"
root;x;0;0;root;/root;/bin/bash
bin;x;1;1;bin;/bin;/sbin/nologin
daemon;x;2;2;daemon;/sbin;/sbin/nologin
adm;x;3;4;adm;/var/adm;/sbin/nologin
lp;x;4;7;lp;/var/spool/lpd;/sbin/nologin
[root@zzd ~]# sed -n '2p' qwer | sed 's/:/;/g' 或者 head -2 qwer | tail -1 | sed 's/:/;/g' //將文件的第二行的所有":"改為";"
bin;x;1;1;bin;/bin;/sbin/nologin
三.刪
[root@zzd ~]# sed '2d' qwer //刪除第2行
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@zzd ~]# sed '2d;5d' qwer //刪除第2行和第5行
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@zzd ~]# sed -e '2d' -e '5d' qwer //刪除第2行和第5行
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@zzd ~]# sed '2,4d' qwer //刪除第2行到第4行
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
//以上二、三的所有的命令都是預覽,並沒有真正的修改,如果想要真正的修改需要加上"-i"選項
3.2 awk
基於列的文本報告工具
[root@zzd ~]# awk -F':' '{print $1,$4}' qwer //以":"為分隔符,截取第1列和第4列
root 0
bin 1
daemon 2
adm 4
lp 7
[root@zzd ~]# awk -F':' '{print $1":"$4}' qwer
root:0
bin:1
daemon:2
adm:4
lp:7
[root@zzd ~]# awk -F':' 'NR==1{print $1,$4}' qwer //以":"為分隔符,截取第1行第1列和第4
root 0
[root@zzd ~]# awk 'NR==1{print}' qwer //截取第一行
root:x:0:0:root:/root:/bin/bash
//以空格為分隔符,截取磁碟使用情況的第四列
[root@zzd ~]# df -h | awk -F' ' '{print $4}'
Avail
451M
471M
464M
471M
16G
0
839M
95M
4. 文本排序
4.1 sort
[root@zzd ~]# cat 1.txt
1 2 4
2 4 6
5 6 8
3 5 9
5 6 8
1 3 7
1 2 4
1 2 4
[root@zzd ~]# sort 1.txt
1 2 4
1 2 4
1 2 4
1 3 7
2 4 6
3 5 9
5 6 8
5 6 8
-n 根據數值大小進行排序
[root@zzd ~]# sort 1.txt //再添加一組數10 20 30再進行排序
10 20 30
1 2 4
1 2 4
1 2 4
1 3 7
2 4 6
3 5 9
5 6 8
5 6 8
[root@zzd ~]# sort -n 1.txt //以數值進行排序
[root@zzd ~]# sort -n 1.txt
1 2 4
1 2 4
1 2 4
1 3 7
2 4 6
3 5 9
5 6 8
5 6 8
10 20 30
-r 逆序排序
[root@zzd ~]# sort -r 1.txt //逆序排序
5 6 8
5 6 8
3 5 9
2 4 6
1 3 7
1 2 4
1 2 4
1 2 4
10 20 30
-t 指定欄位分隔符
-k 以哪個欄位為關鍵字進行排序
[root@zzd ~]# sort -t ' ' -k 3 1.txt //以空格為分隔符並且以第3列為關鍵字進行排序
10 20 30
1 2 4
1 2 4
1 2 4
2 4 6
1 3 7
5 6 8
5 6 8
3 5 9
-u 去重,排序後相同的行只顯示一次
[root@zzd ~]# sort -nu 1.txt //以數值進行排序並只顯示一次重覆的行
1 2 4
2 4 6
3 5 9
5 6 8
10 20 30
-f 排序時忽略字元大小寫
[root@zzd ~]# cat ABC
qwe
Csd
aff
afgg
aff
Afgg
asx
[root@zzd ~]# sort ABC //排序
aff
aff
afgg
Afgg
asx
Csd
qwe
[root@zzd ~]# sort -uf ABC //進行排序,重覆行只顯示一次並且忽略大小寫
aff
afgg
asx
Csd
qwe
4.2 uniq
報告重覆行(連續且完全相同方為重覆)
-c 顯示文件中行的重覆次數
-d 只顯示重覆的行
-u 只顯示未重覆的行
[root@zzd ~]# sort -n 1.txt | uniq -c //顯示文件中行的重覆次數
3 1 2 4
1 1 3 7
1 2 4 6
1 3 5 9
2 5 6 8
1 10 20 30
[root@zzd ~]# sort -n 1.txt | uniq -d //顯示文件中重覆的行
1 2 4
5 6 8
[root@zzd ~]# sort -n 1.txt | uniq -cd //顯示文件中重覆的行,並顯示重覆次數
3 1 2 4
2 5 6 8
[root@zzd ~]# sort -n 1.txt | uniq -u //顯示文件中未重覆的行
1 3 7
2 4 6
3 5 9
10 20 30
5. 文本統計
5.1 wc(word count)
-c 顯示位元組數
-l 顯示行數
-w 顯示單詞數
[root@zzd ~]# wc 1.txt //統計文件的行數,單詞數,位元組數
9 27 57 1.txt
[root@zzd ~]# wc -l 1.txt //統計文件的行數
9 1.txt
[root@zzd ~]# wc -w 1.txt //統計文件單詞數
27 1.txt
[root@zzd ~]# wc -c 1.txt //統計文件位元組數
57 1.txt
6. 大小統計
6.1 du
查看文件或目錄占用磁碟空間大小
-h 以人類友好的方式顯示大小
-s 顯示總的占用空間大小
[root@zzd ~]# du -sh big //查看文件big占磁碟空間的大小
1.0G big
6.2 df
報告文件系統磁碟空間的使用情況
-h 以人類友好方式顯示大小
-i 顯示inode信息
[root@zzd ~]# df -h //以人類友好方式顯示大小
Filesystem Size Used Avail Use% Mounted on
devtmpfs 451M 0 451M 0% /dev
tmpfs 471M 0 471M 0% /dev/shm
tmpfs 471M 6.5M 464M 2% /run
tmpfs 471M 0 471M 0% /sys/fs/cgroup
/dev/mapper/cs-root 17G 1.7G 16G 10% /
/dev/sr0 9.0G 9.0G 0 100% /mnt
/dev/sda1 1014M 176M 839M 18% /boot
tmpfs 95M 0 95M 0% /run/user/0
[root@zzd ~]# df -i //顯示文件系統inode使用情況
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 115417 362 115055 1% /dev
tmpfs 120432 1 120431 1% /dev/shm
tmpfs 120432 555 119877 1% /run
tmpfs 120432 17 120415 1% /sys/fs/cgroup
/dev/mapper/cs-root 8910848 43752 8867096 1% /
/dev/sr0 0 0 0 - /mnt
/dev/sda1 524288 301 523987 1% /boot
tmpfs 120432 5 120427 1% /run/user/0
7. 主機名管理
7.1 hostname
查看或臨時修改主機名,重啟後失效,一般用於查看主機名
[root@zzd ~]# hostname //查看主機名
zzd
[root@zzd ~]# hostname zic //臨時修改主機名
[root@zzd ~]# bash
[root@zic ~]#
[root@zic ~]# cat /etc/hostname
zzd #可以看到主機名並沒有寫進主機名文件,系統重啟時會讀取此文件,所以hostname修改主機名是臨時的
7.2 hostnamectl
永久修改主機名,直接寫入主機名文件,重啟後仍然有效
[root@zic ~]# hostnamectl set-hostname zic //永久修改主機名
[root@zic ~]# bash
[root@zic ~]# cat /etc/hostname
zic
8. 其他
8.1 sleep
讓系統睡眠
[root@zic ~]# sleep 100 //讓系統睡眠100秒
8.2 time
顯示命令執行時間
[root@zic ~]# time sleep 3 //讓系統睡眠3秒並計算此命令執行所用時間
real 0m3.001s
user 0m0.001s
sys 0m0.000s
8.3 clear
清屏,和Ctrl+l一個性質
8.4 whoami | who | w
[root@zic ~]# whoami //查看當前終端登錄的用戶
root
[root@zic ~]# who am i //查看當前終端登錄的用戶
root pts/0 2022-07-02 11:29 (192.168.169.1)
[root@zic ~]# who //查看有哪些用戶線上
root pts/0 2022-07-02 11:29 (192.168.169.1)
root pts/1 2022-07-02 20:58 (192.168.169.1)
zic pts/2 2022-07-02 20:58 (192.168.169.1)
[root@zic ~]# w //查看當前線上的用戶和正在執行的命令
21:01:46 up 9:32, 3 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.169.1 11:29 0.00s 3.71s 0.00s w
root pts/1 192.168.169.1 20:58 3:14 0.00s 0.00s sleep 800
zic pts/2 192.168.169.1 20:58 3:17 0.00s 0.00s -bash
8.5 which
顯示指定命令的絕對路徑
[root@zic ~]# which ls //查看ls命令的絕對路徑
alias ls='ls --color=auto'
/usr/bin/ls
[root@zic ~]# which cd //查看cd命令的絕對路徑
/usr/bin/cd
8.6 date
顯示或設置日期與時間
[root@zzd ~]# date // date不加任何參數用於顯示當前系統的時間
Sat Jul 2 15:51:20 CST 2022
[root@zzd ~]# date "+%Y-%m-%d %H:%M:%S" // 格式化輸出時間
2022-07-02 15:59:54
[root@zzd ~]# date -s "2022-07-02 16:05:00" // 帶上參數-s可以修改時間
Sat Jul 2 16:05:00 CST 2022
8.7 ldd
查看指定程式有哪些依賴庫文件
[root@zic ~]# ldd /usr/bin/ls //查看ls命令執行所需的依賴庫
linux-vdso.so.1 (0x00007fffeef5c000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f556da36000)
libcap.so.2 => /lib64/libcap.so.2 (0x00007f556d830000)
libc.so.6 => /lib64/libc.so.6 (0x00007f556d46e000)
libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007f556d1ea000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f556cfe6000)
/lib64/ld-linux-x86-64.so.2 (0x00007f556de83000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f556cdc6000)