linux shell腳本攻略 第三章 以文件之名 find,chmod,touch,head,tail,tree,wc

目錄

1.生成任意大小的文件

2.文本文件的交集與差集

3.查找並刪除重複文件

4.文件和目錄權限

5.創建不可修改的文件

6.修改文件訪問時間

7.查找符號鏈接與指向目標

8.查找文件差異並進行修補

9.head與tail

10.pushd和popd進行快速目錄切換

11.統計文件行數,單詞數和字符數

12.打印目錄樹


1.生成任意大小的文件

  • dd命令

dd命令會克隆給定的輸入內容,然後將相同的副本寫入到輸出

if:輸入文件,/dev/zero是一個字符設備,不斷返回\0,如果不指定,默認從stdin輸入

of:輸出文件,如果不指定,默認輸出到stdout

bs:block size,字節塊大小

count:塊個數

數據總體大小爲 bs*count

Ian>dd if=/dev/zero of=junk.data bs=3M count=2
2+0 records in
2+0 records out
6291456 bytes (6.3 MB, 6.0 MiB) copied, 0.0119019 s, 529 MB/s

可以傳輸一個很大的數據來測試內存的操作速度

2.文本文件的交集與差集

comm命令可以用於求交集差集,必須使用排序過的文件

交集:兩個文件共同的行

差集:包含在A文件,但不包含在其他指定文件中的行

求差:文件A和B包含的且互不相同的行

  • 基本使用

comm:求交集;第一列A文件行,第二列B文件行,第三列共有的行

-1 -2 -3:刪除相應的列

sed 's/^\t//':格式化輸出

Ian>cat a.txt.sort 
apple
iron
orange
water
Ian>cat b.txt.sort 
gold
silver
water
wood
Ian>comm a.txt.sort b.txt.sort 
apple
	gold
iron
orange
	silver
		water
	wood
Ian>comm a.txt.sort b.txt.sort -3
apple
	gold
iron
orange
	silver
	wood
Ian>comm a.txt.sort b.txt.sort -3| sed 's/^\t//'
apple
gold
iron
orange
silver
wood
Ian>comm a.txt.sort b.txt.sort -1 -2
water
Ian>comm a.txt.sort b.txt.sort -1 -3
gold
silver
wood

3.查找並刪除重複文件

使用md5sum校驗文件,文件內容相同,校驗和就相同。

4.文件和目錄權限

  • 文件權限含義

-rwxrwxrwx 1 ian ian  133 Apr 12 15:45 auto_expect.sh
第一個代表文件類型,文件,目錄或者鏈接,管道等

後面每三個爲一組,分別代表用戶,用戶組,其他用戶(非指定的用戶和用戶組的其他用戶)

rwx:讀寫執行

  • 文件權限修改

chmod u=rwx g=rw o=r filename:使用角色修改

其中需要加權限:chmod o+x filename

需要減權限:chmod u-x filename

chmod 755 filename:使用數字修改

數字含義:

r--=4

-w-=2

--x=1

  • 更改所有權

chown user:group filename

  • 設置粘滯位

目錄的粘滯位,只有目錄的所有者纔有權刪除目錄中的文件

chmod a+t dir_name:t爲粘滯位

  • 遞歸方式修改

chmod 777 filename -R

chown user:group filename -R

  • 以不同的身份運行

setuid的特殊權限:先以user:group登錄,將文件權限修改爲想要執行的用戶,然後+s修改

chmod +s filename

修改之後每次執行都是以user執行

5.創建不可修改的文件

chattr +i file:將文件設置爲不可修改,任何用戶包括超級用戶都不能刪除

chattr -i file:移除不可修改的屬性

Ian>sudo chattr +i inter.sh 
Ian>rm -f inter.sh 
rm: cannot remove 'inter.sh': Operation not permitted
Ian>sudo chattr -i inter.sh 
Ian>rm -f inter.sh 

6.修改文件訪問時間

touch可以修改訪問時間,內容修改時間,指定特定的時間和日期

touch -a :只修改訪問時間

touch -m:只修改文件內容修改時間

touch -d:指定文件時間

Ian>ll A*
-rw-r--r-- 1 ian ian 0 Apr 12 00:21 A.JPG
Ian>touch -d "Jan 20 2020" A.JPG 
Ian>ll A*
-rw-r--r-- 1 ian ian 0 Jan 20 00:00 A.JPG

7.查找符號鏈接與指向目標

符號鏈接功能上類似於Mac中的別名或者windows的快捷方式。刪除鏈接影響不到源文件

創建鏈接:ln -s target link

查看是否創建:ls -l

使用grep查找鏈接文件: grep "^l"

使用find查找: find path -type l

查看鏈接指向位置:readlink link

Ian>ln -s A.JPG A.link
Ian>ls -l
total 4
-rw-r--r-- 1 ian ian   0 Jan 20 00:00 A.JPG
lrwxrwxrwx 1 ian ian   5 Apr 12 18:59 A.link -> A.JPG
-rwxrwxrwx 1 ian ian 133 Apr 12 15:45 auto_expect.sh
-rw-r--r-- 1 ian ian   0 Apr 12 00:21 B.JPG
-rw-r--r-- 1 ian ian   0 Apr 12 18:43 chattr
-rw-r--r-- 1 ian ian   0 Apr 12 00:21 C.JPG
Ian>ls -l |grep "^l"
lrwxrwxrwx 1 ian ian   5 Apr 12 18:59 A.link -> A.JPG
Ian>find ./ -type l
./A.link
Ian>readlink A.link 
A.JPG

8.查找文件差異並進行修補

一體化diff輸出:diff -u f1 f2 >patch.txt,以f2的文本爲基準

修復文本:patch -p1 v1.txt < patch.txt

撤銷修復:patch  -p1 v1.txt < patch.txt

diff目錄: diff -Naur dir1 dir2

-N:將所有缺失文件視爲空文件

-a:將所有文件視爲文本

-r:遍歷目錄下所有文件

Ian>cat v1.txt 
2
3
4
a
Ian>cat v2.txt 
2
3
a
b
Ian>diff -u v1.txt v2.txt 
--- v1.txt	2020-04-13 00:16:04.891985569 +0800
+++ v2.txt	2020-04-13 00:16:24.000706757 +0800
@@ -1,4 +1,4 @@
 2
 3
-4
 a
+b
Ian>patch -p1 v1.txt < patch.txt 
patching file v1.txt
Ian>cat v1.txt 
2
3
a
b

9.head與tail

head和tail分別默認前10和後10行

打印前4行:head -n 4 file

打印除了最後5行之外所有行:head -n -5 file

打印後4行:tail -n 4 file

打印除前5行之外所有行:tail -n -6 file

監控某個進程:tail -f --pid $PID

10.pushd和popd進行快速目錄切換

Ian>pwd
/home/ian/test/rename
Ian>pushd /home/ian/
~ ~/test/rename
Ian>pushd /usr/bin/
/usr/bin ~ ~/test/rename
Ian>dirs
/usr/bin ~ ~/test/rename
Ian>pwd
/usr/bin
Ian>pushd +1
~ ~/test/rename /usr/bin
Ian>pushd /etc/
/etc ~ ~/test/rename /usr/bin
Ian>dirs
/etc ~ ~/test/rename /usr/bin
Ian>pushd +2
~/test/rename /usr/bin /etc ~
Ian>popd +2
~/test/rename /usr/bin ~

11.統計文件行數,單詞數和字符數

wc:統計行,單詞,字符數

wc -l:統計行

wc -w:統計單詞

wc -c:統計字符

wc -L:文件中最長一行的字符數

Ian>wc -l output.session 
25 output.session
Ian>wc -w output.session 
66 output.session
Ian>wc -c output.session 
774 output.session
Ian>wc -L output.session 
59 output.session
Ian>wc output.session 
 25  66 774 output.session

12.打印目錄樹

tree命令可打印文件目錄

Ian>tree test/
test/
├── test.txt
├── tree1
└── tree2

2 directories, 1 file

tree -P pattern:標記某種樣式的文件

tree -P pattern:標記某種樣式之外的文件

tree -h:同時打印出文件和目錄大小

Ian>ls
a.sh  test.txt  tree1  tree2
Ian>tree -P "*.sh"
.
├── a.sh
├── tree1
│   └── b.sh
└── tree2

2 directories, 2 files
Ian>tree -I "*.sh"
.
├── test.txt
├── tree1
│   └── c.log
└── tree2

2 directories, 2 files
Ian>tree -h
.
├── [   0]  a.sh
├── [   0]  test.txt
├── [4.0K]  tree1
│   ├── [   0]  b.sh
│   └── [   0]  c.log
└── [4.0K]  tree2

2 directories, 4 files

tree ./ -H http://localhost -o out.html:以當前的目錄生成一個html文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章