3.1 cat
cat命令作用:
1、檢視檔案內容
2、把多個檔案合併成一個檔案
3、編輯檔案內容
4、結合>>和<<EOF進行編輯
5、清空檔案內容
-n引數 從1開始對所有輸出的內容按行編號
-b引數 忽略顯示空白行行號
-E引數 在每一行行尾顯示$符號(即使是空行 結尾也是有結束標識的)
-s引數 當遇到有連續兩行以上的空白行時,就替代為一行空白行
[root@oldboy ~]# cat test1.txt test1 [root@oldboy ~]# cat test{,1}.txt 同時把test.txt和test1.txt同時讀出 相當於兩個檔案合併成一個檔案 my b is http:hahah my c is http:hahah my d is http:hahah ay c is http:hahah by c is http:hahah cy c is http:hahah oldboy OLDBOY oldboy. 000btti000000000000anji000ngingni. shanghaibeijingtiaks00000dkasskjdhshdjslfjslajfhsjhdflkahdlfjaldf shanghaibeijingtiaks00000dkass0000000kjdhshdjslfjslajfhsjhdflkahdlfjaldf shanghaksjdasdashhhhhh0000000000000000hhhhhhhhhhhhhhjssssssssssssssshsasaasdasdasd 0.000000000000000000 test1 [root@oldboy ~]# cat test{,1}.txt >/tmp/2018.txt [root@oldboy ~]# [root@oldboy ~]# [root@oldboy ~]# cat /tmp/2018.txt my b is http:hahah my c is http:hahah my d is http:hahah ay c is http:hahah by c is http:hahah cy c is http:hahah oldboy OLDBOY oldboy. 000btti000000000000anji000ngingni. shanghaibeijingtiaks00000dkasskjdhshdjslfjslajfhsjhdflkahdlfjaldf shanghaibeijingtiaks00000dkass0000000kjdhshdjslfjslajfhsjhdflkahdlfjaldf shanghaksjdasdashhhhhh0000000000000000hhhhhhhhhhhhhhjssssssssssssssshsasaasdasdasd 0.000000000000000000 test1 [root@oldboy ~]# [root@oldboy ~]# cat > /tmp/2018.txt 編輯2018.txt檔案內容 I am Linux 2222222 3333333 ^C [root@oldboy ~]# cat /tmp/2018.txt I am Linux 2222222 3333333 [root@oldboy ~]# [root@oldboy ~]# cat >>/tmp/2018.txt<<EOF 互動式進行編輯2018.txt檔案內容 > hello word > mingtian nihao > EOF [root@oldboy ~]# cat /tmp/2018.txt I am Linux 2222222 3333333 hello word mingtian nihao [root@oldboy ~]# cat -n 引數的意思是顯示行號 空行也會顯示行號 [root@oldboy ~]# cat -n /tmp/2018.txt 1 I am Linux 2 2222222 3 3333333 4 hello word 5 mingtian nihao [root@oldboy ~]# cat -b 引數是 不為空行做標記行號 [root@oldboy ~]# cat /tmp/2018.txt I am Linux 2222222 3333333 hello word mingtian nihao nishishuo whoami wo ni r [root@oldboy ~]# cat -b /tmp/2018.txt cat -b 忽略顯示空白行行號 1 I am Linux 2 2222222 3 3333333 4 hello word 5 mingtian nihao 6 nishishuo 7 whoami 8 wo 9 ni r [root@oldboy ~]# cat -E引數 [root@oldboy ~]# cat /tmp/2018.txt I am Linux 2222222 3333333 hello word mingtian nihao nishishuo whoami wo ni r [root@oldboy ~]# cat -E /tmp/2018.txt 在每一行行尾顯示$符號(包括空行) I am Linux$ 2222222$ 3333333$ hello word $ mingtian nihao$ $ $ nishishuo$ whoami$ wo $ ni r$ [root@oldboy ~]# [root@oldboy ~]# cat /tmp/2018.txt I am Linux 2222222 3333333 hello word mingtian nihao nishishuo whoami wo ni r [root@oldboy ~]# cat -s /tmp/2018.txt I am Linux 2222222 3333333 hello word mingtian nihao nishishuo whoami wo ni r [root@oldboy ~]# 生產環境中,用grep進行過濾空行 [root@oldbody liangli]# grep -v "^$" test.txt 1 2 3 4 5 6 7 hello word [root@oldbody liangli]# cat -T 引數是區分tab鍵和空格 [root@oldboy ~]# cat /tmp/2018.txt I am Linux 2222222 3333333 hello word mingtian nihao nishishuo whoami wo ni r [root@oldboy ~]# cat -T /tmp/2018.txt I^Iam Linux 2222222 3333333 hello word mingtian nihao nishishuo whoami wo ni r [root@oldboy ~]#
3.2 tac
反向顯示檔案內容(每行本文順序沒有改變)
[root@oldbody liangli]# cat /etc/rc.local #!/bin/sh # # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don`t # want to do the full Sys V style init stuff. touch /var/lock/subsys/local >/etc/udev/rules.d/70-persistent-net.rules [root@oldbody liangli]# tac /etc/rc.local >/etc/udev/rules.d/70-persistent-net.rules touch /var/lock/subsys/local # want to do the full Sys V style init stuff. # You can put your own initialization stuff in here if you don`t # This script will be executed *after* all the other init scripts. # #!/bin/sh [root@oldbody liangli]#
3.3 less、move
less 和more相反 內容一屏一屏的顯示(按空格鍵) 回車的話是一行顯示的 按b可以一次回退一屏
more 更多 按頁一次一屏 內容一屏一屏的顯示(按空格鍵) 回車的話是一行顯示的 不能回退 具有和 vi編輯的一些小功能
= 鍵可以顯示文字有多少行
/mysql 具有搜尋的功能
v 鍵 可以進行編輯了
q 退出more
[root@oldboy ~]# more -10 /etc/services 按10行進行顯示 [root@oldboy ~]# more +10000 /etc/services 直接到10000行 [root@oldbody liangli]# ll /etc/ | more -10 用法 總用量 1720 drwxr-xr-x. 3 root root 4096 6月 15 00:28 abrt drwxr-xr-x. 4 root root 4096 6月 15 00:30 acpi -rw-r--r--. 1 root root 48 9月 28 23:11 adjtime -rw-r--r--. 1 root root 1512 1月 12 2010 aliases -rw-r--r--. 1 root root 12288 6月 15 00:33 aliases.db drwxr-xr-x. 2 root root 4096 6月 15 00:30 alsa drwxr-xr-x. 2 root root 4096 6月 15 00:29 alternatives -rw-------. 1 root root 541 3月 30 2015 anacrontab -rw-r--r--. 1 root root 148 5月 15 2009 asound.conf --More-- less命令 分頁檢視檔案 推薦 less -N 可以顯示行號 [root@oldbody liangli]# ll /etc/ | less -N 1 總用量 1720 2 drwxr-xr-x. 3 root root 4096 6月 15 00:28 abrt 3 drwxr-xr-x. 4 root root 4096 6月 15 00:30 acpi 4 -rw-r--r--. 1 root root 48 9月 28 23:11 adjtime 5 -rw-r--r--. 1 root root 1512 1月 12 2010 aliases 6 -rw-r--r--. 1 root root 12288 6月 15 00:33 aliases.db 7 drwxr-xr-x. 2 root root 4096 6月 15 00:30 alsa 8 drwxr-xr-x. 2 root root 4096 6月 15 00:29 alternatives 9 -rw-------. 1 root root 541 3月 30 2015 anacrontab 10 -rw-r--r--. 1 root root 148 5月 15 2009 asound.conf 11 -rw-r--r--. 1 root root 1 2月 20 2015 at.deny 12 drwxr-x---. 3 root root 4096 6月 15 00:30 audisp 13 drwxr-x---. 3 root root 4096 6月 15 00:30 audit 14 drwxr-xr-x. 2 root root 4096 6月 15 00:30 bash_completion.d 15 -rw-r--r--. 1 root root 2681 10月 2 2013 bashrc 16 drwxr-xr-x. 2 root root 4096 10月 15 2014 blkid 17 drwxr-xr-x. 2 root root 4096 6月 15 00:27 bonobo-activation 18 -rw-r--r--. 1 root root 1780 10月 16 2009 cas.conf 19 -rw-r--r--. 1 root root 27 8月 4 2015 centos-release 20 drwxr-xr-x. 2 root root 4096 3月 10 2015 chkconfig.d 21 drwxr-xr-x. 2 root root 4096 6月 15 00:29 compat-openmpi-psm-x86_64 :
3.4 head
顯示檔案內容頭部 讀取檔案的前N行 預設是前10行 -n 數字(習慣-5 忽略-n) head -30 liangli.txt |tail -11 這條命令就是取數值20到30之間的數字
-c 引數 顯示檔案的前五個位元組
[root@oldbody liangli]# head -10 /etc/passwd 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 sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin [root@oldbody liangli]# [root@oldboy ~]# head -c 5 /etc/inittab # ini[root@oldboy ~]# [root@oldboy ~]# 將/etc/inittab檔案後10行去掉 [root@oldboy ~]# head -n -10 /etc/inittab # inittab is only used by upstart for the default runlevel. # # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # # System initialization is started by /etc/init/rcS.conf # # Individual runlevels are started by /etc/init/rc.conf # # Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf # # Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf, # with configuration in /etc/sysconfig/init. # # For information on how to write upstart event handlers, or how # upstart works, see init(5), init(8), and initctl(8). # [root@oldboy ~]# 顯示多個檔案 [root@oldbody liangli]# head /etc/passwd /etc/inittab ==> /etc/passwd <== 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 sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin ==> /etc/inittab <== # inittab is only used by upstart for the default runlevel. # # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # # System initialization is started by /etc/init/rcS.conf # # Individual runlevels are started by /etc/init/rc.conf # # Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf # [root@oldbody liangli]#
3.5 tail
顯示檔案內容尾部 讀取檔案的後N行 預設情況下為後10行 -n 數字 習慣-5 忽略-n
-f 引數 實時輸出日誌的動態變化 假如現在在一個視窗中輸入 tail -f test.txt 然後在另一個視窗下echo 1111>> test.txt 會看到相應的1111的輸出
-F 引數 就是test.txt這個檔案事先可以不存在 但是我會等著這個檔案的建立後在及時輸出相應這個檔案的echo內容
tailf 命令和 tail -f 的作用一樣 但是 tailf 是一個單獨的命令
[root@oldbody liangli]# tail -5 /etc/passwd saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin user1:x:500:500::/home/user1:/bin/bash [root@oldbody liangli]#
3.6 cut
從文字中提取一段文字並輸出
cut -b引數 按位元組進行切割 位元組切割 不會對中文生效
cut -c 按字元進行切割 字元切割 可以切割中文
cut -d 引數 指定分隔符 d和f一起用 預設情況下cut命令以tab鍵作為分隔符
[root@oldboy ~]# cat test.txt I am oldboy my qq is 1234567 [root@oldboy ~]# cut -b 3 test.txt 第3個位元組、字元、欄位切割 a [root@oldboy ~]# cut -b 3-4 test.txt 從第3到4個位元組、字元、欄位進行切割 am [root@oldboy ~]# [root@oldboy ~]# cut -b -4 test.txt 從第一到4個位元組、字元、欄位進行切割 I am [root@oldboy ~]# cut -b 4- test.txt 從第4個位元組、字元、欄位進行切割 m oldboy my qq is 1234567 [root@oldboy ~]# cut -c 按字元進行切割 一箇中文字元佔2個位元組 [root@oldboy ~]# cat test.txt I am oldboy my qq is 1234567 i清明節放假 [root@oldboy ~]# cut -b -4 test.txt I am i清 cut -d 引數 指定分隔符 d和f一起用 預設情況下cut命令以tab鍵作為分隔符 cut命令不能支援多個字元作為分隔符 [root@oldboy ~]# head -1 /etc/passwd root:x:0:0:root:/root:/bin/bash [root@oldboy ~]# head -1 /etc/passwd |cut -d : -f1 root [root@oldboy ~]# head -1 /etc/passwd |cut -d : -f2 x [root@oldboy ~]# head -1 /etc/passwd |cut -d : -f3 0 [root@oldboy ~]# head -1 /etc/passwd |cut -d : -f4 0 [root@oldboy ~]# [root@oldbody ~]# cat /etc/passwd | cut -d : -f 1-3 root:x:0 bin:x:1 daemon:x:2 adm:x:3 lp:x:4 sync:x:5 shutdown:x:6 halt:x:7 mail:x:8 uucp:x:10 operator:x:11 games:x:12 gopher:x:13 ftp:x:14 nobody:x:99 dbus:x:81 vcsa:x:69 abrt:x:173 haldaemon:x:68 ntp:x:38 saslauth:x:499 postfix:x:89 sshd:x:74 tcpdump:x:72 user1:x:500 [root@oldbody ~]# [root@oldboy ~]# cat -T test.txt this^Iis^Itab^Iline this is ni hao [root@oldboy ~]# cut -f 2-3 test.txt is tab this is ni hao [root@oldboy ~]# [root@oldboy ~]# cat test.txt this is tab line this is ni hao [root@oldboy ~]# cut -d ` ` -f 2-3 test.txt 一個空格 this is tab line is ni [root@oldboy ~]# [root@oldboy ~]# cut -d ` ` -f 2-3 test.txt 兩個空格 cut: 分界符必須是單個字元 請嘗試執行"cut --help"來獲取更多資訊。 [root@oldboy ~]#
3.7 spilt
按照指定的行數或大小分割檔案
-l 指定分割檔案後最大行數
-a 指定字尾長度,預設2個字母
-d 使用數字字尾
-b 指定分割檔案的最大位元組數
[root@oldboy ~]# wc -l /etc/inittab 26 /etc/inittab [root@oldboy ~]# split -l 10 /etc/inittab new_ [root@oldboy ~]# [root@oldboy ~]# ls new_* new_aa new_ab new_ac [root@oldboy ~]# head new_aa new_ab new_ac ==> new_aa <== # inittab is only used by upstart for the default runlevel. # # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # # System initialization is started by /etc/init/rcS.conf # # Individual runlevels are started by /etc/init/rc.conf # # Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf # ==> new_ab <== # Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf, # with configuration in /etc/sysconfig/init. # # For information on how to write upstart event handlers, or how # upstart works, see init(5), init(8), and initctl(8). # # Default runlevel. The runlevels used are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) ==> new_ac <== # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault: -a 指定生成檔案字尾長度 [root@oldboy ~]# split -l 10 -a 4 /etc/inittab new2_ [root@oldboy ~]# wc -l new2_* 10 new2_aaaa 10 new2_aaab 6 new2_aaac 26 總用量 [root@oldboy ~]# -d 使用數字字尾 [root@oldboy ~]# split -l 10 -d /etc/inittab new3_ [root@oldboy ~]# wc -l new3_* 10 new3_00 10 new3_01 6 new3_02 26 總用量 [root@oldboy ~]# -b 指定分割大小 [root@oldboy 2016]# ll -h 總用量 80K -rw-r--r-- 1 root root 77K 9月 24 20:54 keykey.txt [root@oldboy 2016]# [root@oldboy 2016]# split -b 20K keykey.txt [root@oldboy 2016]# ll -h 總用量 160K -rw-r--r-- 1 root root 77K 9月 24 20:54 keykey.txt -rw-r--r-- 1 root root 20K 9月 24 20:54 xaa -rw-r--r-- 1 root root 20K 9月 24 20:54 xab -rw-r--r-- 1 root root 20K 9月 24 20:54 xac -rw-r--r-- 1 root root 17K 9月 24 20:54 xad [root@oldboy 2016]#
3.8 paste
合併檔案 能將檔案按照行與行進行合併,中間使用tab隔開
-d 引數 指定合併的分隔符 預設是Tab
-s 引數 每個檔案佔用一行
[root@oldboy 2016]# cat num.txt 1 2 3 [root@oldboy 2016]# cat newaa ming tian ni hao hello word [root@oldboy 2016]# cat num.txt newaa 讀取多個檔案 1 2 3 ming tian ni hao hello word [root@oldboy 2016]# paste num.txt newaa 1 ming tian ni hao 2 hello word 3 [root@oldboy 2016]# -d 指定分隔符 [root@oldboy 2016]# paste -d : num.txt newaa 1:ming tian ni hao 2:hello word 3: [root@oldboy 2016]# -s 引數 每個檔案佔用一行 [root@oldboy 2016]# paste -s num.txt newaa 1 2 3 ming tian ni hao hello word [root@oldboy 2016]# [root@oldbody liangli]# cat a.txt 1 2 3 4 5 6 7 8 9 10 [root@oldbody liangli]# cat b.txt hello word wuhan shanghai [root@oldbody liangli]# paste a.txt 1 2 3 4 5 6 7 8 9 10 [root@oldbody liangli]# paste -s a.txt 1 2 3 4 5 6 7 8 9 10 [root@oldbody liangli]# paste -s b.txt hello word wuhan shanghai [root@oldbody liangli]#
3.9 sort
文字排序
-n 引數 按照數值排序
-r 引數 倒敘排序 從大到小排序
-u 引數 可以壓縮重複行(可以壓縮不相連的行)
-t 引數 指定分隔符
-k 引數 指定區域
[root@oldboy 2016]# cat oldboy.txt 10.0.0.4 10.0.0.4 10.0.0.4 10.0.0.5 10.0.0.4 10.0.0.3 10.0.0.7 10.0.0.8 預設按照ASCII碼排序 比較原則是從首字元向後 升序 從小到大 [root@oldboy 2016]# sort oldboy.txt 10.0.0.3 10.0.0.4 10.0.0.4 10.0.0.4 10.0.0.4 10.0.0.5 10.0.0.7 10.0.0.8 [root@oldboy 2016]# -n 引數 按照數值排序 -r 從大到小排序 [root@oldboy 2016]# sort -r oldboy.txt 10.0.0.8 10.0.0.7 10.0.0.5 10.0.0.4 10.0.0.4 10.0.0.4 10.0.0.4 10.0.0.3 [root@oldboy 2016]# -u 引數 可以壓縮重複行(可以壓縮不相連的行) [root@oldboy 2016]# sort -u oldboy.txt 10.0.0.3 10.0.0.4 10.0.0.5 10.0.0.7 10.0.0.8 [root@oldboy 2016]# 其實-u 就是uniq 我們也可以用uniq引數進行相應的實現(必須壓縮相連行) [root@oldboy 2016]# uniq oldboy.txt 10.0.0.4 10.0.0.5 10.0.0.4 10.0.0.3 10.0.0.7 10.0.0.8 [root@oldboy 2016]# -rn 先按照數值排序 然後按照數值倒敘排序 [root@oldboy 2016]# sort -rn oldboy.txt 10.0.0.8 10.0.0.7 10.0.0.5 10.0.0.4 10.0.0.4 10.0.0.4 10.0.0.4 10.0.0.3 [root@oldboy 2016]# 預設按照第一列排序 [root@oldboy 2016]# sort oldboy.txt 10.0.0.3 c 10.0.0.4 g 10.0.0.4 k 10.0.0.4 r 10.0.0.4 y 10.0.0.5 a 10.0.0.7 f 10.0.0.8 d [root@oldboy 2016]# -t 指定分隔符 -k 指定區域 [root@oldboy 2016]# sort -k oldboy.txt sort: 區塊起始處的編號無效:在"oldboy.txt" 處的計數無效 [root@oldboy 2016]# sort -k2 oldboy.txt 預設以空格作為分隔符的 k2就是第二列排序 10.0.0.5 a 10.0.0.3 c 10.0.0.8 d 10.0.0.7 f 10.0.0.4 g 10.0.0.4 k 10.0.0.4 r 10.0.0.4 y [root@oldboy 2016]# 中間是tab鍵 [root@oldboy 2016]# cat oldboy.txt 10.0.0.4 r 10.0.0.4 g 10.0.0.4 d 10.0.0.5 a 10.0.0.4 k 10.0.0.3 c 10.0.0.7 f 10.0.0.8 d [root@oldboy 2016]# sort -k2 oldboy.txt 預設也可以以tab作為空格符 10.0.0.5 a 10.0.0.3 c 10.0.0.4 d 10.0.0.8 d 10.0.0.7 f 10.0.0.4 g 10.0.0.4 k 10.0.0.4 r [root@oldboy 2016]# [root@oldboy 2016]# sort -k2 oldboy.txt 10.0.0.3:c 10.0.0.4:d 10.0.0.4:g 10.0.0.4:k 10.0.0.4:r 10.0.0.5:a 10.0.0.7:f 10.0.0.8:d [root@oldboy 2016]# sort -t: -k2 oldboy.txt 10.0.0.5:a 10.0.0.3:c 10.0.0.4:d 10.0.0.8:d 10.0.0.7:f 10.0.0.4:g 10.0.0.4:k 10.0.0.4:r [root@oldboy 2016]#
3.10 join
按兩個檔案的相同欄位合併
使用join合併檔案的要求是2個檔案必須是sort排序後的
[root@oldbody liangli]# cat a.txt key1 25 now2 25 route3 24 [root@oldbody liangli]# cat b.txt key1 nan route3 lvu now2 nan [root@oldbody liangli]# join a.txt b.txt key1 25 nan join: 檔案2 沒有被正確排序 route3 24 lvu [root@oldbody liangli]# sort a.txt >a.txtn [root@oldbody liangli]# sort b.txt >b.txtn [root@oldbody liangli]# join a.txtn b.txtn key1 25 nan now2 25 nan route3 24 lvu [root@oldbody liangli]#
3.11 uniq
去除重複行
-c 引數 去除重複行 並計算每行出現的次數
[root@oldbody liangli]# cat c.txt 10.0.0.4 10.0.0.4 10.0.0.4 10.0.0.4 [root@oldbody liangli]# uniq c.txt 10.0.0.4 [root@oldbody liangli]# uniq -c c.txt 引數-c顯示相應行出現的次數 4 10.0.0.4 [root@oldbody liangli]# [root@oldbody liangli]# uniq c.txt uniq只能對相鄰的重複行進行去重操作 10.0.0.4 10.0.0.3 10.0.0.4 10.0.0.6 10.0.0.4 10.0.0.5 10.0.0.4 [root@oldbody liangli]# sort c.txt 10.0.0.3 10.0.0.4 10.0.0.4 10.0.0.4 10.0.0.4 10.0.0.4 10.0.0.4 10.0.0.5 10.0.0.6 [root@oldbody liangli]# sort c.txt | uniq 10.0.0.3 10.0.0.4 10.0.0.5 10.0.0.6 [root@oldbody liangli]# sort c.txt | uniq -c 1 1 10.0.0.3 6 10.0.0.4 1 10.0.0.5 1 10.0.0.6 [root@oldbody liangli]#
3.12 wc
統計檔案的行數,單詞數,位元組數
wc 生廁所顯示
-l (lines) 總行數
-L 字元數 指的是精確的字元數目
[root@oldbody liangli]# wc /etc/inittab 26 149 884 /etc/inittab [root@oldbody liangli]# wc -l /etc/inittab l表示總行數 26 /etc/inittab [root@oldbody liangli]# wc -w /etc/inittab w表示單詞數 149 /etc/inittab [root@oldbody liangli]# wc -c /etc/inittab c表示位元組數 [root@oldbody liangli]# wc -L /etc/inittab -L表示最長行的長度 [root@oldbody liangli]# wc -m /etc/inittab -m表示字元數 884 /etc/inittab [root@oldbody liangli]# 78 /etc/inittab [root@oldbody liangli]# 884 /etc/inittab [root@oldbody liangli]# [root@oldbody ~]# cat -n /etc/services | tail -1 10774 iqobject 48619/udp # iqobject [root@oldbody ~]# wc -l /etc/services 10774 /etc/services [root@oldbody ~]# sshd服務有1,說明該服務是存活的 [root@oldbody ~]# ps -ef | grep "/sshd" root 1637 1 0 20:27 ? 00:00:00 /usr/sbin/sshd root 2474 2414 0 22:48 pts/0 00:00:00 grep /sshd [root@oldbody ~]# ps -ef | grep "/sshd" | grep -v grep root 1637 1 0 20:27 ? 00:00:00 /usr/sbin/sshd [root@oldbody ~]# ps -ef | grep "/sshd" | grep -v grep | wc -l 1 [root@oldbody ~]# [root@oldbody ~]# netstat -lntup | grep sshd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1637/sshd tcp 0 0 :::22 :::* LISTEN 1637/sshd [root@oldbody ~]# netstat -lntup | grep sshd | wc -l 2 [root@oldbody ~]#
3.13 iconv
轉換檔案的編碼格式
Linux系統是UTF-8的編碼,而Win7系統是GB2312的編碼,從英文的角度來講,二者沒有區別,但是Win編輯的中文字元到Linux系統中就會有亂碼,需要先轉碼在處理
使用-f引數指定檔案原來的編碼為gb2312 使用-t引數指定將要轉換的編碼utf-8
[root@oldbody ~]# iconv -f gb2312 -t utf-8 test.txt
3.14 dos2unix
把windows平臺的格式轉換成unix平臺的格式
先安裝 yum -y install dos2unix
windows換行符
linux換行符
dos2unix 後面接檔案
3.15 diff
比較兩個檔案異同(可以比較目錄內的檔案不同)只能同時比較兩個檔案
diff預設顯示格式有如下三種提示
a 是add增加的意思
c 是改變
d 刪除
[root@oldbody liangli]# cat a.txt 1 2 3 4 5 6 [root@oldbody liangli]# cat b.txt 4 5 6 7 8 [root@oldbody liangli]# diff a.txt b.txt 1,3d0 < 1 < 2 < 3 6a4,5 > 7 > 8 [root@oldbody liangli]# d/a前面的數字是文字1的行號,字母后面的文字2的行號,其中<打頭的行屬於檔案1,以>打頭的行屬於檔案2 [root@oldbody liangli]# diff -y a.txt b.txt 1 < 2 < 3 < 4 4 5 5 6 6 > 7 > 8 [root@oldbody liangli]# [root@oldbody liangli]# diff -y -W 30 a.txt b.txt -W引數指定寬度 1 < 2 < 3 < 4 4 5 5 6 6 > 7 > 8 [root@oldbody liangli]# [root@oldbody liangli]# diff -c a.txt b.txt -c引數可以上下文輸出 *** a.txt 2018-09-30 17:56:06.289845188 +0800 --- b.txt 2018-09-30 17:56:50.296847597 +0800 *************** *** 1,6 **** - 1 - 2 - 3 4 5 6 --- 1,5 ---- 4 5 6 + 7 + 8 [root@oldbody liangli]# [root@oldbody liangli]# diff -u a.txt b.txt -u引數 使用統一格式輸出 --- a.txt 2018-09-30 17:56:06.289845188 +0800 +++ b.txt 2018-09-30 17:56:50.296847597 +0800 @@ -1,6 +1,5 @@ -1 -2 -3 4 5 6 +7 +8 [root@oldbody liangli]# 比較兩個目錄 [root@oldbody liangli]# tree . ├── a │ ├── 1 │ ├── 1.txt │ ├── 2 │ ├── 2.txt │ ├── 3 │ └── 3.txt ├── a.txt ├── b │ ├── 2 │ ├── 2.txt │ ├── 3 │ ├── 3.txt │ ├── 4 │ └── 4.txt └── b.txt 8 directories, 8 files [root@oldbody liangli]# diff a b Only in a: 1 Only in a: 1.txt Common subdirectories: a/2 and b/2 Common subdirectories: a/3 and b/3 Only in b: 4 Only in b: 4.txt [root@oldbody liangli]#
3.16 vimdiff
視覺化對比工具 後面可以接4個檔案進行同時對比
[root@oldbody liangli]# vimdiff a.txt b.txt 還有 2 個檔案等待編輯 1 | ------------------------------------------ 2 | ------------------------------------------ 3 | ------------------------------------------ 4 | 4 5 | 5 6 | 6 -------------------------------------------| 7 -------------------------------------------| 8 ~ | ~ ~ | ~ ~ | ~ ~ | ~ ~ | ~ ~ | ~ ~ | ~ ~ | ~ ~ | ~ a.txt 1,1 全部 b.txt 1,1 全部 "b.txt" 5L, 10C 退出的話,需要執行2次vim的操作:q
3.17 rev
反向讀取檔案內容
[root@oldboy ~]# echo 123456|rev 654321 [root@oldbody liangli]# cat a.txt 1 2 3 4 5 6 7 8 9 10 [root@oldbody liangli]# rev a.txt 01 9 8 7 6 5 4 3 2 1 [root@oldbody liangli]#
3.18 tr
替換或刪除字元
-d 引數 刪除字元
-s 引數 將連續的字元壓縮成一個
-c 引數 取反的意思
[root@oldboy ~]# cat person.txt 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO 011111111 0111111100 111 11111 1111111 [root@oldboy ~]# tr `abc` `ABC` < person.txt 將所有的小寫abc轉換成大寫ABC 注意 是一一對應的 101,oldBoy,CEO 102,zhAngyAo,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO 011111111 0111111100 111 11111 1111111 [root@oldboy ~]# [root@oldboy ~]# tr `[a-z]` `[A-Z]` < person.txt 101,OLDBOY,CEO 102,ZHANGYAO,CTO 103,ALEX,COO 104,YY,CFO 105,FEIXUE,CIO 011111111 0111111100 111 11111 1111111 [root@oldboy ~]# [root@oldboy ~]# tr `[0-9]` `[A-Z]` < person.txt 注意一一對應 BAB,oldboy,CEO BAC,zhangyao,CTO BAD,Alex,COO BAE,yy,CFO BAF,feixue,CIO ABBBBBBBB ABBBBBBBAA BBB BBBBB BBBBBBB [root@oldboy ~]# -d 引數 刪除的功能 [root@oldboy ~]# cat person.txt 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO 011111111 0111111100 111 11111 1111111 [root@oldboy ~]# tr -d 0 < person.txt 11,oldboy,CEO 12,zhangyao,CTO 13,Alex,COO 14,yy,CFO 15,feixue,CIO 11111111 1111111 111 11111 1111111 [root@oldboy ~]# 凡是在檔案中出現的o l d b o y字元都會被刪除掉,而不是隻刪除oldboy字串 [root@oldbody liangli]# cat a.txt oldboyoldbyonihaowoshiliang [root@oldbody liangli]# tr -d `oldboy` < a.txt nihawshiiang [root@oldbody liangli]# 也可以將換行符刪除掉 [root@oldboy ~]# tr -d ` `< person.txt 101,oldboy,CEO102,zhangyao,CTO103,Alex,COO104,yy,CFO105,feixue,CIO0111111110111111100111111111111111[root@oldboy ~]# [root@oldboy ~]# tr ` ` `=`< person.txt 101,oldboy,CEO=102,zhangyao,CTO=103,Alex,COO=104,yy,CFO=105,feixue,CIO=011111111=0111111100=111=11111=1111111=[root@oldboy ~]# -s引數將連續的字元壓縮成一個 [root@oldbody liangli]# echo `oooolllddbbboyyyyy` oooolllddbbboyyyyy [root@oldbody liangli]# echo `oooolllddbbboyyyyy` | tr -s oldboy oldboy [root@oldbody liangli]#
3.19 od
用於輸出檔案的八進位制、十六進位制或者其他格式編碼的位元組 如od /bin/ls
3.20 tee
多重定向 比如 一邊把相應的結果輸入到螢幕 一邊把結果輸入到儲存的
檔案中
-a 引數 追加的意思
[root@oldboy ~]# ls 2016 key_2018-09-19.tar.gz new2_aaac test.txt a key_2018-09-20.tar.gz new3_00 text2018.txt anaconda-ks.cfg liangli new3_01 text2018.txt.back d065 liangli1 new3_02 text.txt data liangli123.txt new_aa wuhan20181.txt f043 liangli_2018-09-18.tar.gz new_ab wuhan20182.txt f044 liangli.tar.gz new_ac wuhan20183.txt f055 lihao oldboy wuhan20184.txt install.log lihao_2018-09-18.tar.gz person.txt xargs install.log.syslog md5.log test xiaomi2.txt key new2_aaaa test1.txt xiaomi3.txt key_2018-09-17.tar.gz new2_aaab test.hard xiaomi.txt [root@oldboy ~]# ls | tee /tmp/tee.txt 2016 a anaconda-ks.cfg d065 data f043 f044 f055 install.log install.log.syslog key key_2018-09-17.tar.gz key_2018-09-19.tar.gz key_2018-09-20.tar.gz liangli liangli1 liangli123.txt liangli_2018-09-18.tar.gz liangli.tar.gz lihao lihao_2018-09-18.tar.gz md5.log new2_aaaa new2_aaab new2_aaac new3_00 new3_01 new3_02 new_aa new_ab new_ac oldboy person.txt test test1.txt test.hard test.txt text2018.txt text2018.txt.back text.txt wuhan20181.txt wuhan20182.txt wuhan20183.txt wuhan20184.txt xargs xiaomi2.txt xiaomi3.txt xiaomi.txt [root@oldboy ~]# [root@oldboy ~]# cat /tmp/tee.txt 2016 a anaconda-ks.cfg d065 data f043 f044 f055 install.log install.log.syslog key key_2018-09-17.tar.gz key_2018-09-19.tar.gz key_2018-09-20.tar.gz liangli liangli1 liangli123.txt liangli_2018-09-18.tar.gz liangli.tar.gz lihao lihao_2018-09-18.tar.gz md5.log new2_aaaa new2_aaab new2_aaac new3_00 new3_01 new3_02 new_aa new_ab new_ac oldboy person.txt test test1.txt test.hard test.txt text2018.txt text2018.txt.back text.txt wuhan20181.txt wuhan20182.txt wuhan20183.txt wuhan20184.txt xargs xiaomi2.txt xiaomi3.txt xiaomi.txt [root@oldboy ~]# -a 引數 追加的意思 不加引數-a 覆蓋/tmp/tee.txt檔案內容 [root@oldboy ~]# wc -l /tmp/tee.txt 48 /tmp/tee.txt [root@oldboy ~]# ls | tee -a /tmp/tee.txt 2016 a anaconda-ks.cfg d065 data f043 f044 f055 install.log install.log.syslog key key_2018-09-17.tar.gz key_2018-09-19.tar.gz key_2018-09-20.tar.gz liangli liangli1 liangli123.txt liangli_2018-09-18.tar.gz liangli.tar.gz lihao lihao_2018-09-18.tar.gz md5.log new2_aaaa new2_aaab new2_aaac new3_00 new3_01 new3_02 new_aa new_ab new_ac oldboy person.txt test test1.txt test.hard test.txt text2018.txt text2018.txt.back text.txt wuhan20181.txt wuhan20182.txt wuhan20183.txt wuhan20184.txt xargs xiaomi2.txt xiaomi3.txt xiaomi.txt [root@oldboy ~]# wc -l /tmp/tee.txt 96 /tmp/tee.txt [root@oldboy ~]#
3.21 vi、vim
在Tech目錄下輸入vi oldboy.txt Visual Interface(可視介面) i 進入編輯狀態 I am studying Linux 按esc :wq 輸入命令cat oldboy.txt檢視oldboy.txt裡面的內容 vi相當於windows的記事本 簡單
vim相當於複雜的編輯器 功能複雜,高亮 自動縮排(寫shell/python指令碼用) :q不想儲存退出 :q! 強制退出
vim的三種模式
1、普通模式
用vim命令開啟一個檔案,預設的狀態就是普通檔案,在這個模式中,不能進行編輯輸入操作,但可以按“上下左右”鍵來移動游標,也可以執行一些操作命令進行如刪除、複製、貼上等之類的工作
2、編輯模式
在普通模式下按i進入編輯模式,可以看到視窗左下角有插入的標記“INSERT”或“插入”
3、命令模式
在普通模式下,輸入:或者/或者?時,游標會自動定位在那一行,在這個模式中,可以執行儲存,退出,搜尋,顯示行號等相關操作
vim命令的重要引數選項及說明
普通模式:
跳至開頭 按gg就行
跳至末尾 按G就行
行首 0(數字0)
行末 $
按: 輸入set nu 開啟行號
ngg 移動到第n行,如11gg
dd 刪除當前一行
yy 複製 按p就是貼上
u 撤銷