一、Linux文件管理命令及其常用方法
1、cd(切換目錄)這個命令應該是Linux中用的最頻繁的一個命令之一了,因為我們經常需要進行目錄的切換。在詳解這個命令之前,首先得補充一個重要的知識,就是我們常用的一些比較特殊的目錄:
. 代表當前目錄 .. 代表上一層目錄 - 代表前一個工作目錄 ~ 代表【目前用戶身份】所在的自家目錄 ~account 代表 account 這個用戶的自家家目錄
通過下面的示例看下具體的用法:
[root@baoman ~]# cd /home # 此時我們進入到了home目錄下 [root@baoman home]# cd . # .表示當前目錄,所以當前還是在home目錄下 [root@baoman home]# cd .. # ..表示上一層目錄,所以此時就進入到了 / 目錄下 [root@baoman /]# cd ~ #~表示【目前用戶身份】所在的自家目錄,當前用戶就是root,所以就進入到了root這個目錄下 [root@baoman ~]# cd ~baoman #~account表示 account 這個用戶的自家家目錄 ,我如果想進入 baoman 這個用戶的主目錄,輸入 cd ~xiaoluo即可 [root@baoman baoman]# cd -/root #-表示前一個工作目錄,我們的前一個工作目錄就是在root下,所以此時又會進入到root這個目錄下 [root@baoman ~]# cd ../usr #如果我們需要進入到usr目錄下,這里可以寫成相對路徑形式也可以寫成絕對路徑形式
2.pwd (顯示當前所在的目錄) 這個命令對于我們來說也是一個很重要的命令,因為在Linux下我們都是通過在命令行輸入命令,所有如果進入到了一個目錄下,就不會像windows那樣直觀的顯示出當前所在的路徑,此時我們就可以輸入 pwd 這個命令來顯示我們當前所在的目錄。
[root@baoman ~]# pwd [-P]參數: -P :顯示出確實的路徑,而非使用鏈接 (link) 路徑。(P是大寫) 范例: [root@baoman ~]# pwd/root <== 顯示出當前所在的目錄 [root@baoman ~]# cd /var/mail [root@baoman mail]# pwd /var/mail [root@baoman mail]# pwd -P /var/spool/mail <== 怎么回事?有沒有加 -P 差很多 [root@baoman mail]# ls -l /var/mail lrwxrwxrwx. 1 root root 10 3月 30 10:37 mail -> spool/mail #看到這里應該知道為啥了吧?因為 /var/mail 是連結文件,連結到 /var/spool/mail # 所以,加上 pwd -P 的參數后,會不以連結文件的數據顯示,而是顯示正確的完整路徑!
3、mkdir(建立新目錄)
[root@baoman ~]# mkdir [-mp] 目錄名稱參數: -m :配置文件目錄的權限!我們可以自己設定自己想要的權限,而不需要使用umask定義的默認權限 -p :幫助你直接將所需要的目錄遞歸建立起來! 范例: [root@baoman ~]# cd /home [root@baoman home]# mkdir test <== 建立一名為 test 的新目錄 [root@baoman home]# mkdir test1/test2/test3/test4mkdir: 無法創建目錄"test1/test2/test3/test4": 沒有那個文件或目錄 [root@linux tmp]# mkdir -p test1/test2/test3/test4 # 加了這個 -p 的參數,可以自行幫我們建立多層目錄! [root@baoman home]# mkdir -p test1/test2/test3/test4 [root@baoman home]# mkdir -m 711 test2 [root@baoman home]# ls -ldrwxr-xr-x. 2 root root 4096 4月 21 13:08 test drwxr-xr-x. 3 root root 4096 4月 21 13:10 test1 drwx--x--x. 2 root root 4096 4月 21 13:11 test2# 仔細看上面的權限部分,如果沒有加上 -m 來強制設定屬性,系統會使用默認屬性。如果加上了-m 這個參數,我們就可以自己定義權限了
4、rmdir(刪除“空”目錄)
[root@baoman ~]# rmdir [-p] 目錄名稱參數: -p :連同上層『空的』目錄也一起刪除 范例: [root@baoman home]# ls -l drwxr-xr-x. 2 root root 4096 4月 21 13:08 test drwxr-xr-x. 3 root root 4096 4月 21 13:10 test1 drwx--x--x. 2 root root 4096 4月 21 13:11 test2 [root@baoman home]# rmdir test [root@baoman home]# rmdir test1rmdir: 刪除 "test1" 失敗: 目錄非空 [root@baoman home]# rmdir -p test1/test2/test3/test4/ [root@baoman home]# ls -ldrwx--x--x. 2 root root 4096 4月 21 13:11 test2# 利用 -p 這個參數,立刻就可以將 test1/test2/test3/test4 一次刪除~# 不過要注意的是,這個 rmdir 僅能【刪除空的目錄】!
5、ls(查看文件和目錄)
[root@baoman ~]# ls [-aAdfFhilRS] 目錄名稱 [root@baoman ~]# ls [--color={none,auto,always}] 目錄名稱 [root@baoman ~]# ls [--full-time] 目錄名稱 參數: -a :全部的文件,連同隱藏文件( 開頭為 . 的目錄) 一起列出來~ -A :全部的文件,連同隱藏文件,但不包括 . 與 .. 這兩個目錄,一起列出來~ -d :僅列出目錄本身,而不是列出目錄內的文件數據 -f :直接列出結果,而不進行排序 (ls 預設會以文件名排序!) -F :根據文件、目錄等信息,給予附加數據結構,例如: *:代表可執行文件; /:代表目錄; =:代表 socket 檔案; |:代表 FIFO 文件; -h :列出文件的打小(例如GB、KB等等) -i :列出 inode 位置,而非列出文件屬性; -l :長數據串行出,包含文件的屬性等等數據; -n :列出 UID 與 GID 而非使用者與群組的名稱 (UID與GID會在賬號管理提到!) -r :將排序結果反向輸出,例如:原本文件名由小到大,反向則為由大到小; -R :連同子目錄內容一起列出來; -S :以文件容量大小排序! -t :依時間排序 --color=never :不要依據文件特性給予顏色顯示; --color=always :顯示顏色--color=auto :讓系統自行依據設定來判斷是否給予顏色 --full-time :以完整時間模式 (包含年、月、日、時、分) 輸出 --time={atime,ctime} :輸出 access 時間或 改變權限屬性時間 (ctime) 而非內容變更時間 (modification time)
6、cp(復制)
[root@baoman ~]# cp [-adfilprsu] 源文件(source) 目的文件(destination) [root@baoman ~]# cp [options] source1 source2 source3 .... directory 參數: -a :相當于 -pdr 的意思; -d :若來源文件為鏈接文件的屬性(link file),則復制鏈接文件屬性而非檔案本身; -f :為強制 (force) 的意思,若有重復或其他疑問時,不會詢問使用者,而強制復制; -i :若目的文件(destination)已經存在時,在覆蓋時會先詢問是否真的動作! -l :進行硬式連結 (hard link) 的連結文件建立,而非復制文件本身; -p :連同文件的屬性一起復制過去,而非使用默認屬性; -r :遞歸持續復制,用于目錄的復制行為; -s :復制成為符號鏈接文件 (symbolic link),亦即『快捷方式』文件; -u :若 destination 比 source 舊才更新 destination ! 最后需要注意的,如果來源檔有兩個以上,則最后一個目的文件一定要是『目錄』
cp的常用用法:
實例一:將家目錄下的 .bashrc 復制到 /tmp 下,并更名為 bashrc [root@baoman home]# cd /tmp [root@baoman tmp]# cp ~/.bashrc bashrc [root@baoman tmp]# cp -i ~/.bashrc bashrc cp:是否覆蓋"bashrc"? n# 重復作兩次動作,由于 /tmp 底下已經存在 bashrc 了,加上 -i 參數,# 則在覆蓋前會詢問使用者是否確定!可以按下 n 或者 y !# 但是,反過來說,如果不想要詢問時,則加上 -f 這個參數來強制直接覆蓋!實例二:將 /var/log/wtmp 復制到 /tmp 底下 [root@baoman tmp]# cp /var/log/wtmp [root@baoman tmp]# ls -l /var/log/wtmp wtmp -rw-rw-r--. 1 root utmp 204288 4月 21 11:22 /var/log/wtmp -rw-r--r--. 1 root root 204288 4月 21 13:33 wtmp #注意到了嗎?!在不加任何參數的情況下,文件的所屬者會改變,連權限也跟著改變了# 這是個很重要的特性!要注意!還有,連文件建立的時間也不一樣了!# 如果您想要將文件的所有特性都一起復制過來,可以加上 -a 參數即可![root@baoman tmp]# cp -a /var/log/wtmp wtmp2[root@baoman tmp]# ls -l /var/log/wtmp wtmp2-rw-rw-r--. 1 root utmp 204288 4月 21 11:22 /var/log/wtmp -rw-rw-r--. 1 root utmp 204288 4月 21 11:22 wtmp2 #此時我們看到在加上 -a 這個參數以后,文件的所有屬性都會被復制過來。 實例三:復制 /etc/ 這個目錄下的所有內容到 /tmp 底下 [root@baoman tmp]# cp /etc/ /tmpcp: 略過目錄"/etc/" -->> 如果我們復制的是目錄,此時必須要加上 -r 這個參數才行 [root@baoman tmp]# cp -r /etc/ /tmp# 還是要再次的強調! -r 是可以復制目錄,但是,檔案與目錄的權限會被改變# 所以,也可以利用 cp -a /etc /tmp 來下達指令! 使用-a 參數相當于同時使用了 -pdr 參數
7、rm(刪除)
[root@baoman ~]# rm [-fir] 文件或目錄 參數: -f :就是 force 的意思,強制移除; -i :互動模式,在刪除前會詢問使用者是否動作 -r :遞歸刪除!最常用在目錄的刪除了
示例:
[root@baoman tmp]# rm bashrc rm:是否刪除普通文件 "bashrc"?y [root@baoman tmp]# rm wtmp wtmp2 rm:是否刪除普通文件 "wtmp"?yrm:是否刪除普通文件 "wtmp2"?y [root@baoman tmp]# rm -rf etc/ -->> 這個就會強制將etc這個目錄以及里面的所有子目錄、文件刪除掉
8、mv(移動文件與目錄、文件重命名)
[root@baoman ~]# mv [-fiu] source destination [root@baoman ~]# mv [options] source1 source2 source3 .... directory參數: -f :force 強制的意思,強制直接移動而不詢問; -i :若目標文件 (destination) 已經存在時,就會詢問是否覆蓋! -u :若目標文件已經存在,且 source 比較新,才會更新 (update) 實例一:復制一檔案,建立一目錄,將檔案移動到目錄中 [root@baoman tmp]# cp ~/.bashrc bashrc [root@baoman tmp]# mkdir mvtest [root@baoman tmp]# mv bashrc mvtest/ [root@baoman tmp]# cd mvtest/ [root@baoman mvtest]# lsbashrc # 將某個檔案移動到某個目錄去,就是這樣做! 實例二:將剛剛的目錄名稱更名為 mvtest2 [root@baoman tmp]# mv mvtest mvtest2 <== 這樣就更名了! # 其實在 Linux 底下還有個命令令,名稱為 rename ,# 該命令就是專門用來對文件或者目錄進行重命名的鎮明路!可以參閱 man rename 了解其更多的用法 !
9、basename(獲取路徑的文件名)dirname(獲取路徑的目錄名)
[root@baoman ~]# basename /etc/inittab inittab -->>這個就是我們的文件名 [root@baoman ~]# dirname /etc/inittab /etc -->>這個就是我們的目錄名
二、bash命令狀態返回值
Linux下一條命令或一個進程執行完成會返回一個一個狀態碼。 0 === 成功執行 非0 === 執行過程中出現異?;蚍钦M顺?,范圍是1-255 在Shell腳本中 最后執行的一條命令將決定整個shell腳本的狀態. 此外 shell的內部命令exit也可以隨時終止shell腳本的執行,返回Shell腳本的狀態碼 當shell腳本執行結束前 的最后一個命令是不帶參數的exit ,那么 shell腳本的最終返回值 就是 exit 語句前一條語句的返回值,根據這個值可以判斷腳本成功執行與否。 查看緊鄰的上一條命令執行狀態的命令是:echo $?
三、命令行展開 在非引號內的內容,如果用花括號包括,而且里面用逗號分隔(至少包含一個逗號,可以是空內容),這樣花括號里的內容會被展開成用空格分開的一個列表,花括號前后可以緊隨前綴和后綴(前后綴都是可選的)。
[root@localhost usr]# echo {a,b,c}a b c [root@localhost usr]# echo a{b,c} ab ac [root@localhost usr]# echo {a,b}{c,d} ac ad bc bd [root@localhost usr]# echo a{,,,,,}b ab ab ab ab ab ab
四、命令行展開示例:
[root@baoman ~]# mkdir /tmp/{a,b}_{c,d}[root@baoman ~]# ls /tmpa_c a_d b_c b_d [root@baoman ~]# mkdir -p /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr,var/{lock/{bin,sbin},log,run}}[root@baoman ~]# tree /tmp/mylinux//tmp/mylinux/ ├── bin ├── boot │ └── grub ├── dev ├── etc │ ├── rc.d │ │ └── init.d │ └── sysconfig │ └── network-scripts ├── lib│ └── modules ├── lib64 ├── proc ├── sbin ├── sys ├── tmp ├── usr └── var ├── lock │ ├── bin │ └── sbin ├── log └── run23 directories, 0 files
五、文件的元數據信息查看及修改 1、任何文件系統中的數據分為數據和元數據。數據是指普通文件中的實際數據,而元 數據指用來描述一個文件的特征的系統數據,諸如訪問權限、文件擁有者時間戳以及文件數據 塊的分布信息(inode…)等等
[root@baoman ~]# stat /tmp/mylinux/ 文件:"/tmp/mylinux/" 大小:4096 塊:8 IO 塊:4096 目錄 設備:fd00h/64768d Inode:3298 硬鏈接:14權限:(0755/drwxr-xr-x) Uid:( 0/ root) Gid:( 0/ root) 環境:unconfined_u:object_r:user_tmp_t:s0 最近訪問:2016-09-24 17:48:51.122124573 +0800最近更改:2016-09-24 17:48:25.770123626 +0800最近改動:2016-09-24 17:48:25.770123626 +0800創建時間:-
3、修改
touch命令: touch - change file timestamps touch [OPTION]... FILE... -c: 指定的文件路徑不存在時不予創建; -a: 僅修改access time; -m:僅修改modify time; -t STAMP [[CC]YY]MMDDhhmm[.ss]
六、定義別名,引用另一個命令的執行結果
[root@baoman ~]# alias grep='grep --auto' #創建別名,也可以把命令寫入環境變量中 [root@baoman ~]# alias #查看當前shell下的別名alias cp='cp -i'alias egrep='egrep --color=auto'alias fgrep='fgrep --color=auto'alias grep='grep --auto'alias l.='ls -d .* --color=auto'alias ll='ls -l --color=auto'alias ls='ls --color=auto'alias mv='mv -i'alias rm='rm -i'alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'引用一個命令的執行結果有兩種方法: 方法一:``:反斜線 方法二:$() [root@baoman ~]# ifconfig eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.16.10.10 netmask 255.255.255.0 broadcast 172.16.10.255 inet6 fe80::20c:29ff:fe3c:5102 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:3c:51:02 txqueuelen 1000 (Ethernet) RX packets 23046 bytes 29348499 (27.9 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 8983 bytes 806119 (787.2 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 0 (Local Loopback) RX packets 4 bytes 340 (340.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 4 bytes 340 (340.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@baoman ~]# ifconfig | awk 'NR==2{print$2}' 172.16.10.10 [root@baoman ~]# echo `ifconfig | awk 'NR==2{print$2}'` 172.16.10.10 [root@baoman ~]# echo $(ifconfig | awk 'NR==2{print$2}') 172.16.10.10
七、顯示/var目錄下所有以1開頭,以一個小寫字母結尾,且中間至少出現一個數字(可以有其他字符)的文件或目錄:
[root@baoman ~]# touch /var/123abc [root@baoman ~]# mkdir /var/1pam2c [root@baoman ~]# ls -d /var/1*[0-9]*[[:lower:]] /var/123abc /var/1pam2c
八、顯示/etc目錄下,以任意一個數字開頭,且以非數字結尾的文件或目錄;
[root@baoman ~]# touch /etc/1a [root@baoman ~]# mkdir /etc/22222zZ [root@baoman ~]# ls /etc/[0-9]*[^0-9]/etc/1a /etc/22222zZ: [root@baoman ~]# ls -d /etc/[0-9]*[^0-9] /etc/1a /etc/22222zZ
九、顯示/etc目錄下,以非字母開頭,后面跟一個字母以及其他任意長度任意字符的文件或目錄;
[root@baoman ~]# ls -d /etc/[^a-z][a-z]* /etc/1a
十、在/tmp目錄下創建以tfile開頭,后跟當前日期和時間的文件,文件名如:tfile-2016-05-27-09-32-22;
[root@baoman ~]# mkdir /tmp/tfile-$(date +%Y-%m-%d-%H-%M-%S) [root@baoman ~]# ls /tmp/ tfile-2016-09-24-18-17-18
十一、復制/etc目錄下所有以P開頭,以非數值結尾的文件或目錄到/tmp/mytest1目錄下;
[root@baoman tmp]# mkdir mytest1 [root@baoman tmp]# cp -r /etc/p*[^0-9] /tmp/mytest1/ [root@baoman tmp]# ls /tmp/mytest1/ pam.d passwd passwd- pki plymouth pm popt.d postfix ppp prelink.conf.d printcap profile profile.d protocols python
十二、復制/etc目錄下所有以.d結尾的文件或目錄至/tmp/mytest2目錄中;
[root@baoman tmp]# mkdir mytest2 [root@baoman tmp]# cp -r /etc/*.d /tmp/mytest2/ [root@baoman tmp]# ls /tmp/mytest2/ bash_completion.d cron.d dracut.conf.d init.d logrotate.d my.cnf.d prelink.conf.d rc1.d rc4.d rc.d statetab.d tmpfiles.dbinfmt.d depmod.d gdbinit.d latrace.d modprobe.d pam.d profile.d rc2.d rc5.d rsyslog.d sudoers.d xinetd.dchkconfig.d dnsmasq.d grub.d ld.so.conf.d modules-load.d popt.d rc0.d rc3.d rc6.d rwtab.d sysctl.d yum.repos.d
十三、復制/etc目錄下所有以1或m或n開頭,以.conf結尾的文件至/tmp/mytest3目錄中。
[root@baoman tmp]# cp /etc/{1,m,n}*.conf /tmp/mytest3/ cp: 無法獲取"/etc/1*.conf" 的文件狀態(stat): 沒有那個文件或目錄 [root@baoman tmp]# ls /tmp/mytest3/ man_db.conf mke2fs.conf nsswitch.conf
原創文章,作者:jbm,如若轉載,請注明出處:http://www.www58058.com/48814