02葵花寶典之bash特性及文件入門
一、文件管理命令
前面說過,linux上,一切皆文件,對文件的管理,是學習linux的基本內容之一。下面介紹linux上的一些文件管理命令
1目錄相關類命令(知識)
- pwd 顯示當前工作目錄
- cd /SOMEPATH 切換目錄
- / 表示根目錄
- ~ 表示當前用戶的家目錄(home directory)
- ./ 表示當前目錄
- .. 表示當前目錄的上父目錄(如果存在)
- cd – 切換至前一個工作目錄
- mkdir 創建目錄
- -m,–mode=MODE 設置所創建的目錄權限,如果不指定,則按照UMASK值設定默認權限
- -p,如果所要創建的目錄的父目錄不存在,則先創建父目錄,然后創建該目錄
- -v,–verbose 顯示創建的過程(當父目錄不存在時,使用-p選項,可以看見先創建的父目錄
- rmdir 刪除目錄
注意,該命令只能刪除空目錄,使用較少。日常工作中使用rm命令較多。
- tree 顯示目錄層級,目錄樹及文件
- tree [option] [directorty]
- 以當然工作目錄為起始點前世。在某些linux系統上,該命令沒有安裝,需要手動安裝
- -L level 顯示levle級目錄和文件
- -d 只顯示目錄
- -P PATTERN 顯示已PATTERN匹配到的目錄
2 文件查看類命令
- cat
cat [OPTION]… [FILE]…
cat 是concatenate的簡寫,連接之意,是連接文件并輸出至標準輸出(屏幕)
-n –number 顯示行號
- tac
用法基本同cat,只是像名字一樣,逆序顯示行
- more
分屏顯示文件內容,如果顯示到文件尾部,則退出!
- less
分屏顯示文件內容,如果顯示到文件尾部,但不退出,需要退出,可按q鍵退出 其他基本與more命令一致。使用的翻屏命令與man命令一致(man命令內部,調用的就是less -is)
- f 或者F 或者 SPACE(空格鍵),向下翻整屏
- b 或者B:backward,向上翻N行,默認整屏
- d 或者D:downward,向下翻N行,默認屏幕的一半行數,即翻半屏
- u 或者U:backward,向上翻N行,默認屏幕的一半行數,即翻半屏
- ENTER(回車鍵),默認向下翻1行
- 查找: 使用/keyword或者?keyword
- head
head [OPTION]… FILE… 顯示文件前面的行,默認10行
-n # 顯示前#行,可以簡寫為-#
-c # 顯示前#個字節
- tail
tail [OPTION]… FILE… 顯示文件后面的行,默認10行;常用的參數和head基本一致
- Stat
stat [OPTION]… FILE… 顯示文件狀態,包括大小、塊信息、訪問時間、修改時間、改變時間等信息。
3 文件管理類命令
- touch
touch [OPTION]… FILE… 更改文件的時間戳
touch命令本意是更改文件時間戳,但現在更多應用于創建一個文件
-a 只修改access time,默認修改atime為當前時間
-m 只修改modify time,默認修改mtime為當前時間
-c –no-create 如果文件不存在,則不創建文件(默認是文件不存在則創建文件)
-t 設置時間戳為指定時間,時間戳格式為:[[CC]YY]MMDDhhmm[.ss]
- cp
cp 復制命令,有3種使用風格
(1)cp [OPTION]… SOURCE DEST
SOURCE、DEST都是文件,DEST存在,則覆蓋(默認不提醒用戶,直接覆蓋,可使用-i提醒用戶);如果DEST不存在,則以SOURCE為名,創建文件。
(2)cp [OPTION]… SOUTRE DIR
SOURCE是文件,DIR是目錄。在DIR下創建以SOURCE相同的文件
(3)cp [OPTION]… -r DIR DIR
DIR是目錄,必須使用-r選項,遞歸復制,目標存在,則在目標下復雜,目標不存在,在創建目標后復制
常用的選項有:
- -i 交互式復制,即在覆蓋文件時提示用戶
- -r 源為目錄時必須使用,遞歸復制
- -d 不復制源文件或目錄的符號連接
- -f 強制
- -p 保存原來文件的屬主屬組信息
- -v 顯示復制過程
- –preserve[=ATTR_LIST] 保留文件或目錄指定的屬性,默認是權限、屬主屬組、時間戳等
- mv
mv 移動文件,相當于剪切,其用法基本與cp相似。
- rm rm [OPTION]… FILE… remove移除文件或目錄
- -i 交互式,即移除過程提醒
- -f 強制移除
- -r 遞歸刪除目錄
rm -rf / 刪除根,可導致系統崩潰,rm -rf 應當慎用
二、bash的基本特性之一
1.命令執行狀態及返回值
bash的命令執行狀態是指一條命令執行的狀態結果,也就是是否成功,如果不成功,根據命令不同,給出相應的提示結果。一般而言,如果命令的執行狀態返回值為0,則表示命令執行成功,如果不為0,則表示命令沒有執行成功。
在運行完命令后,該執行結果保存在bash的特殊變量$?中。該變量可以和其他普通變量一樣,被引用。
注意,要查看一條命令的執行狀態返回值,必須在該命令執行完成后立即進行查看或將其保存,如果這條命令執行完成后,再執行一條或多條命令,則此時$?中保存的就不是這條命令的執行狀態結果了,因為$?這個變量已經被后面執行的行了的執行狀態返回值所覆蓋。
2.命令行展開
將類似于COMMOND1{STH1,STH2,…}COMMOND2格式的命令展開為COMMAND1STH1COMMAND2和COMMAND1STH2COMMAND2…等多條命令,依次有bash來執行,{}可以嵌套,也可以并列存在。{}類似于數學多項式中的(),STH1,STH2類似于“加數”,“,”相當于“+”,整體行為相當于多項式()相乘的展開
例如:
{a,b} 可以展開為 a b
/proc/{a,b}xxx{c,d} 可展開為/proc/axxxc /proc/axxxd /proc/bxxxc /proc/bxxxd
三、創建目錄及命令行展開
1.創建/tmp目錄下的:a_c,a_d,b_c,b_d
touch?/tmp/{a,b}_{c,d}
2.創建/tmp/mylinux目錄下的
mkdir -p /tmp/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/{lock,log,run}}touch?/tmp/{a,b}_{c,d}
四、文件的元數據
文件的數據包括兩部分,即元數據和數據,所謂元數據,可以認為是文件的屬性,所謂數據,是文件的內容。
文件的元數據包括大小、需要的存儲塊數、文件類型(f、d、c、b、p、s、l)、inode號、權限、屬主、屬主、時間戳(訪問時間、修改時間、改變時間)等。 可使用stat FILE…命令來查看。如:
stat /dev/tty0 /etc/passwd
修改文件的時間戳信息,可用touch命令
具體為: touch -a FILE 修改文件的訪問和改變時間為當前時間 touch -m FILE 修改文件的修改和改變時間為當前時間 touch -a -t STAMP FILE 修改文件的訪問和改變時間為STAMP指定的時間,STAMP的格式為:[[CC]YY]MMDDhhmm[.ss]
touch?-a -t 1102251830.05 /etc/virc
五、命令別名和命令引用
命令別名 命令別名通俗可理解為,為一個常用的命令(包含選項和參數)定義一個名稱,可用這個名稱來代替那個命令(包含選項和參數)。 使用alias命令來定義命令別名,alias [-p] [name[=value] … ] 如果沒有選項和參數,該命令顯示當前用戶shell定義的所有命令別名。 在當前shell中使用alias定義的命令別名,僅在當前shell進程中有效。若要命令別名永久有效,需要在用戶家目錄下的.bashrc(對該用戶有效)或/etc/bashrc(對所有shell為bash的用戶有效)配置文件中使用alias定義
命令引用 命令引用,即在一個命令中使用另外一個命令的執行結果。需要引用執行結果的命令使用脫字符(一般位于鍵盤ESC鍵下方,像單引號)。 如:
adduser `echo "testuser"`
上述命令中,adduser使用echo testuser的命令結果testuser作為用戶名。
六、練習題
1.顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間至少出現一位數字(可以有其它字符)的文件或目錄。
ls -d /var/l*[0-9]*[[:lower:]]
2.顯示/etc目錄下,以任意一個數字開頭,且以非數字結尾的文件或目錄。
ls -d /etc/[0-9]*[^0-9]
3.顯示/etc目錄下,以非字母開頭,后面跟了一個字母以及其它任意長度任意字符的文件或目錄。
ls -d /etc/[^[:alpha:]][[:alpha:]]*
4.在/tmp目錄下創建以tfile開頭,后跟當前日期和時間的文件,文件名形如:tfile-2016-05-27-09-32-22。
touch /tmp/tfile-`date +%Y-%m-%d-%H-%M-%S`
5.復制/etc目錄下所有以p開頭,以非數字結尾的文件或目錄到/tmp/mytest1目錄中。
mkdir /tmp/mytest1
cp -r /etc/p*[^0-9] /tmp/mytest1
6.復制/etc目錄下所有以.d結尾的文件或目錄至/tmp/mytest2目錄中。
mkdir /tmp/mytest2
cp -rv /etc/*.d /tmp/mytest2
7.復制/etc/目錄下所有以l或m或n開頭,以.conf結尾的文件至/tmp/mytest3目錄中。
mkdir /tmp/mytest3
cp -r /etc/[lmn]*.conf /tmp/mytest3
如有錯誤,請聯系:1103212768@qq.com
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/92030