寫在最前
通過上一周對計算機系統、Linux發展的學習,我們認識到了Linux是一個一切皆文件的內核系統。那么怎樣去操作系統上的各文件來達到你想要的目的呢?今天的總結就是幫助我們更快的達成目標。
文件管理類命令的分類
對于這類命令主要分為兩類:
操作類:touch、cp、mv
查看類:cat、tac、head、tail、less、more
touch
功能描述:創建新的空文件或更改文件的時間戳。
語 ? ?法:touch [OPTION]… FILE…
選 ? ?項:
- -c:指定的文件路徑不存在時不予創建;
- -a:僅修改access time;
- -m:僅修改modify time;
- -t [[CC]YY]MMDDhhmm[.ss],其后跟上指定的時間;
實 ? ?例:
通過使用touch命令修改訪問時間:touch -a -t 1712141414.14 linux.txt?
得到如下結果:
擴 ? ?展:細心的你可能會發現上面截圖中有一個stat命令,那么stat命令輸出的都是什么文件的什么信息呢?其實文件主要由兩類數據組成:元數據和數據,元數據主要是用于描述文件的屬性信息,使用stat命令顯示的全部是文件的元數據,而數據信息則是文件的具體內容數據,可以通過上述命令中的cat查看。上圖所顯示的信息中:
- File:當前文件的文件名;
- Size:當前文件的文件大小;
- Device:存儲在那個設備上;
- Inode:文件的Inode號碼;
- Linkes:文件當前的鏈接數;
- Access:訪問權限;
- Uid:屬主ID號碼;
- Gid:屬組ID號碼;
- Access time:最近一次文件的訪問時間;
- Modify time:最近一次文件的內容被修改時間;
- Change time:最近一次文件的狀態被改變的時間;
cp
功能描述:復制文件或目錄。
語 ? ?法:cp [OPTION]… SOURCE DEST
選 ? ?項:
- -a:此參數的效果相當于同時使用dpR參數;
- -d:復制符號鏈接本身,而非其指向的源文件;
- -f:強制進行復制;
- -i :交互式復制,有提示信息;
- -R、-r:遞歸復制目錄;將目錄下的文件一并復制過去;
- -p:保留源文件所有者的屬性;
mv
功能描述:移動或重命名文件、目錄。
語 ? ?法:mv [OPTION]… ?SOURCE DEST
選 ? ?項:
- -f:強制進行覆蓋;
- -i :交互式覆蓋,有提示信息
cat
功能描述:讀取文件并打印到標準輸出。
語 ? ?法:cat [OPTION]… [FILE]…
選 ? ?項:
- -n:對輸出的行數進行編號;
tac
功能描述:讀取文件并逆序打印到標準輸出。
語 ? ?法:tac [OPTION]… [FILE]…
選 ? ?項:
head
功能描述:輸出文件的開頭部分內容,默認顯示10行。
語 ? ?法:head [OPTION]… FILE…
選 ? ?項:
- -c <字符數>:指定顯示頭部內容的字符數;
- -n <數字>:指定顯示頭部內容的行數;
more
功能描述:按頁瀏覽文本文件的內容,只能向后翻頁。
語 ? ?法:more [options] file […]
選 ? ?項:
- – <數字>:指定每屏顯示的行數;
less
功能描述:按頁瀏覽文本文件的內容,可以向前或向后翻頁。
語 ? ?法:less [OPTION]… FILE…
選 ? ?項:
- -e:文件內容顯示完畢后自動退出;
- -N :每行行首顯示行號;
?bash特性
在Linux中,bash的其中一個工作特點叫做沒有返回信息通常是最好的信息。這里并不是說真的沒有返回結果,其實每條命令執行完成之后,其狀態返回值都保存于bash的特殊變量$?中,通過echo $?的值即可查看上一條指令是否執行成功,成功的話,值肯定是0,如果值是1-255之間的任何一個數字,都表示上條指令沒有執行成功。此處需要注意的是一定$?只表示上一次的狀態返回值。
此外,在bash中,還有一個重要的命令行展開特性,通過此特性,可以極大的節省時間,提高工作效率。
- ~[USERNAME]:展開為指定用戶的家目錄;
- {} :可承載一個或多個以,號分割的路徑列表,并能夠將其展開為多個路徑;
例如:(1)、創建/tmp目錄下的:a_c,a_d,b_c,b_d
結果如下顯示:
(2)、創建如下目錄結構:
mylinux/
├── bin
├── boot
│?? └── grub
├── dev
├── etc
│?? ├── rc.d
│?? │?? └── init.d
│?? └── sysconfig
│?? └── network-scripts
├── lib
│?? └── modules
├── lib64
├── proc
├── sbin
├── sys
├── tmp
├── usr
│?? └── local
│?? ├── bin
│?? └── sbin
└── var
├── locak
├── log
└── run
使用命令行展開方式創建,實現方法為:(由于篇幅的原因,刪除了部分輸出信息)
結果顯示如下:
其實bash還有很多特性,比如下面將要介紹的也是在實際中可能會用到的,那就是命令別名、命令引用。命令別名主要有兩個好處,第一就是對一些危險的命令使用別名,可以起到提示的作用,第二就是命令或者路徑很長時,使用別名可以提高效率。別名的設置也很簡單,主要有三種方式:
- 命令行編輯別名alias,alias ‘COMMAND’=’alias’ ? ?此種方法只對當前用戶在當前回話中有效;
- 要想永久生效,必須修改配置文件,編輯用戶家目錄下的 .bashrc文件,添加別名,然后重新讀取配置文件生效;
- 要想所有用戶都生效,則要編輯/etc/bashrc文件添加別名,然后重新讀取配置文件生效;
其次命令的引用在實際中也會經常遇到,那么怎么引用呢,其實也很簡單,用法為:$(COMMAND)或`COMMAND`,注意此處為反引號。說了這么多,那來個例子練練手吧:在/tmp目錄下創建以tfile開頭,后跟當前日期和時間的文件,文件名形如:tfile-2016-05-27-09-32-22。綜合前面的知識,我想此處你肯定不能用touch創建時自己敲上去時間,如果你真是這樣創建,那么前面的內容就算白講了,因為此處tfile后明顯是個時間,因此可以用date表示,綜合上面的命令替換,是不是感覺有點思緒了呢?答案就是這樣的:
touch tfile-`date +”%Y-%m-%d-%H-%M-%S”`是不是覺得還是挺簡單的。
說完了上面的內容,下面來說說bash的文件名通配,很多時候我們想要查找一些特定格式名稱的文件,這時文件名通配就非常有用了。常見的通配符有如下幾種:
- *:任意長度的任意字符;
- ?:任意單個字符;
- []:中括號范圍內的單字符;
- [^]:中括號以外的單字符;
- 字符集合:
bash特性練習
學習了上述bash的眾多特性,如果在生產環境中給你如下問題,你是不是能搞定呢:
- ?ls /var/l*[[:digit:]]*[[:lower:]]是什么意思?
- ls /etc/[[:digit:]]*[^[:digit:]]表示什么?
- ls /etc/[^[:alpha:]][[:alpha:]]*又表示什么?
根據上面內容的提示,我們可以將上述問題放到bash的文件通配符段落中查找答案,所以:
- 表示顯示/var目錄下,以1開頭,中間跟了1個數字,以小寫字母結尾的文件或目錄;
- 表示顯示/etc目錄下,以數字開頭,非數字結尾的文件或目錄;
- 表示顯示/etc目錄下,以非大小寫字母開頭但緊跟著任意一個大寫或小寫字母的文件或目錄;
其實吧,學習有時候就是你做完了上面的內容,肯定覺得要是再有幾個練習一些該多好哇!哈哈哈,其實吧,下面還真有。有時間又覺得不錯的話可以練習練習
- cp -r /etc/p*[^[:figit:]] /tmp/mytest1
- cp -r /etc/*.d /tmp/mytest2
- cp ? ?/etc/[lmn]*.conf /tmp/mytest3
忙碌的一周又過去了,為了趕上其他小伙伴的進度,一天當做三天用,用四天的時間學完了兩周的課程,接下來繼續向前奔跑。
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/90159
內容上有自己思考的部分很贊,繼續加油~