1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。
命令:cp、mv、rm
1.1 cp命令
用法:
- cp [OPTIONS]…[-T] SOURCE DEST
- cp SRC DEST而言,SRC是文件時
- 如果目標不存在:
- 新建DEST,并將SRC中內容填充至DEST中
- 如果目標存在:
- 如果DEST是文件:將SRC中的內容覆蓋至DEST中,此時建議為cp命令使用-i選項
- 如果DEST是目錄:在DEST下新建與原文件同名的文件,并將SRC中文件的數據流導出一份填充至新文件中
- 對于管理員來說,默認會有-i選項;對于普通用戶是不具備的
- cp SRC DEST而言,SRC是目錄時
- 如果DEST不存在:
- 創建指定目錄,賦值SRC目錄中所有文件至DEST中,不包括SRC目錄
- 如果DEST存在:
- 如果DEST是文件:
- 報錯:顯示無法以SRC源目錄來覆蓋文件
- 如果DEST是目錄:在目標目錄下創建一個與源目錄同名的目錄,并且把源目錄文件復制到目標目錄中去
- 如果DEST是文件:
- 此時使用選項:-r。因為原來是個目錄,會忽略這個操作。說明cp命令默認情況下不支持目錄復制
- cp [OPTION]…SOURCE…?DIRECTORY
- SRC…:多個文件
- DEST必須存在,且為目錄,其他情形均會出錯,錯誤提示這不是一個目錄
- SRC…:多個文件
OPTION:
- -i:交互式
- -r,-R:遞歸復制目錄及內部的所有內容
- -a:歸檔,相當于-dR –preserve=all
- -d:–no-dereference(不追蹤符號鏈接),–preserv=links
- –preserve [=ATTR_LIST]
- 保留你所指定的屬性。如果沒使用=,就只保留默認的前三項;如果使用了=,則添加保留你所指定的項。
- mode:權限
- ownership:屬主屬組
- timestamp:時間戳
- links:鏈接本身的屬性
- xattr:擴展屬性
- context:安全上下文
- all:所有屬性
- –no-dereference:不跟蹤符號鏈接,就復制符號鏈接本身,而不復制符號鏈接所指向的內容
//歸檔:復制時必須把每一個文件保留它原來的樣子
- –preserve=links:原來是一個鏈接,還給它保留為符號鏈接的類型
- -p:–perserv=mode,ownership,timestamp保留權限,屬主屬組,時間戳
- -v:–verbose顯示全過程
- -f:–force強制式執行
1.2?mv命令
用法:
- mv [OPTION]… [-T] SOURCE DEST
- 如果SRC是單個文件:
- 如果DEST不存在:
- 新建DEST,并將SRC中內容填充至DEST中,并且刪除源文件。
- 如果DEST存在:
- 如果DEST是文件:將SRC中的內容覆蓋至DEST中,并刪除SRC
- 如果DEST是目錄:在DEST下新建與原文件同名的文件,并將SRC中文件的數據流導出一份填充至新文件中,并刪除源文件(即剪切)
- 如果源是目錄:
- mv [OPTION]… -t DIRECTORY SOURCE…
- 包括目錄會添加指定目錄下
- mv [OPTION]… SOURCE… DIRECTORY
- SRC…:多個文件
- DEST必須存在,且為目錄,其他情形均會出錯,錯誤提示這不是一個目錄
OPTION:
- -i:交互式
- -f:強制
1.3 ?rm命令
rm [OPTION]…FILE
OPTION:
- -i:交互式
- -f:強制刪除
- -r:遞歸
- 默認是不允許刪除根目錄的,如果你確實是想刪除根目錄,就用–no-perserve-root
- –no-preserve-root:do not treat ‘/’ specially不特殊對待“/”
- –preserve-root:do not remove ‘/’ (default)不允許刪除”/”(默認)
- bash的工作特性之命令執行狀態返回值和命令行展開所涉及的內容及其示例演示。
2.1 命令執行狀態返回值
命令執行狀態返回值:
- bash使用特殊變量$?保存最近一條命令的執行狀態結果
- 0:成功
- 1-255:失敗
- 程序執行有兩類結果:
- 程序的返回結果:成功時,命令執行的結果應該是什么就是什么;失敗時,則可能是報錯信息
- 程序的執行狀態結果:成功或者失敗
- NOTE:在bash中一個命令執行的狀態結果對我們而言肯定有不同的意義,失敗了可以幫助我們判斷這種結果是不是符合我們的期望。所以說失敗了未必對我們來說沒有什么作用。
2.2 命令行展開所涉及的內容
命令行展開所涉及的內容:
- ~:展開為當前用戶的主目錄
- ~USERNAME:展開為指定用戶的主目錄
- {}:可承載以逗號分隔的列表,并將其展開為多個路徑
/tmp/{a,b} = /tmp/a,/tmp/b
/tmp/{tom,jerry}/hi = /tmp/tom/hi , /tmp/jerry/hi
3、請使用命令行展開功能來完成以下練習:
(1)、創建/tmp目錄下的:a_c, a_d, b_c, b_d
(2)、創建/tmp/mylinux目錄下的:
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
3.1 創建/tmp目錄下的:a_c, a_d, b_c, b_d
[root@Mauro ~]# mkdir -pv /tmp/{a,b}_{c,d}
mkdir: 已創建目錄 “/tmp/a_c”
mkdir: 已創建目錄 “/tmp/a_d”
mkdir: 已創建目錄 “/tmp/b_c”
mkdir: 已創建目錄 “/tmp/b_d”
3.2 創建/tmp/mylinux目錄下的信息
[root@Mauro ~]# mkdir -pv /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}}
[root@Mauro ~]# 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
│?? └── local
│?? ????├── bin
│?? ????└── sbin
└── var
├── lock
├── log
└── run
4、文件的元數據信息有哪些,分別表示什么含義,如何查看?如何修改文件的時間戳信息。
[root@Mauro ~]# ls -l /etc/fstab
-rw-r–r–. 1 root root 805 9月 ??9 2016 /etc/fstab
元數據信息:
- -rw-r–r–.:前三個表示屬主的讀寫執行權限;中間三個表示屬組的讀寫執行權限;最后三個表示其他人的讀寫執行權限;“.”表示跟selinux有關的權限
- root root:前一個root表示文件所屬用戶;后一個root表示文件所屬用戶組
- 805:文件大小
- 9月 ??9 2016:文件的修改日期
4.2 修改文件的時間戳
每一個文件在文件系統上都由元數據(metadata)和數據(data)組成。查看文件狀態命令:stat。
三個時間戳:
- Access time:訪問時間,atime。讀取文件內容
- cat/more查看或者可執行程序的執行會改變訪問時間
- Modify time:修改時間,mtime,改變文件內容
- Change time:改變時間,ctime,元數據發生改變
touch命令能以手動指定的方式來修改這三個時間戳中的前兩個。當access和modify元數據發生改變,change也一定會發生改變。一旦文件發生了修改,就一定會改變;而改變不一定修改。
stat – display file or file system status,顯示文件或者文件系統狀態
[root@Mauro tmp]# stat yum.log
File: “yum.log”
Size: 0 ???????? Blocks: 0 ?????????IO Block: 4096 ??普通空文件
Device: fd00h/64768d Inode: 261634 ?????Links: 1
Access: (0600/-rw——-) ?Uid: ( ???0/ ???root) ??Gid: ( ???0/ ???root)
Access: 2017-03-05 15:11:14.719874775 +0800
Modify: 2017-03-02 21:17:50.981999944 +0800
Change: 2017-03-02 21:17:50.981999944 +0800
OPTION:
- -a:only atime。只改變訪問時間戳。修改時間戳不改變,改變時間戳也會發生改變
- 修改訪問時間為當前時間:touch -a 文件
- -m:only mtime。只改變修改時間戳。訪問時間戳不改變,改變時間戳也會發生改變
- 修改修改時間為當前時間:touch-m?文件
- -t STAMP:指明時間戳
- [[CC]YY]MMDDhhmm[.ss],后面那個精度你沒有辦法控制
- -c:如果文件不存在,則不予創建
[root@Mauro tmp]# touch -m -t 201508152201.35 fstab
Note:touch的主要目的是修改時間戳,而不是創建文件
5、如何定義一個命令的別名,如何在命令中引用另一個命令的執行結果?
5.1 定義一個命令的別名
alias使用:
- alias:顯示當前shell進程所有可用的命令別名
- alias NAME=’VALUE’。定義別名NAME:其相當于執行命令VALUE
Note:如果別名同原命令的名稱,則如果要執行原命令,可使用“\COMMAND”
5.2 在命令中引用另一個命令的執行結果
強引用:’’;引號內內容不解釋,按照原樣進行顯示
弱引用:””等同于${},解釋引號中的內容為變量的值
命令引用:“等同于$(),解釋命令并引用命令輸出后的結果
6、顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間至少出現一位數字(可以有其它字符)的文件或目錄。
[root@Mauro ~]# ls -d /var/l*[0-9]*[[:lower:]]
7、顯示/etc目錄下,以任意一個數字開頭,且以非數字結尾的文件或目錄。
[root@Mauro ~]# ls -d /etc/^[0-9]*[^0-9]$
8、顯示/etc目錄下,以非字母開頭,后面跟了一個字母以及其它任意長度任意字符的文件或目錄。
[root@Mauro ~]# ls -d /etc/^[^[:alpha:]][:alpha:]*
9、在/tmp目錄下創建以tfile開頭,后跟當前日期和時間的文件,文件名形如:tfile-2016-05-27-09-32-22。
[root@Mauro ~]# ls -d /tmp/tfile-`date +%Y-%m-%d-%H-%M-%S`
10、復制/etc目錄下所有以p開頭,以非數字結尾的文件或目錄到/tmp/mytest1目錄中。
[root@Mauro ~]# cp -r /etc/p*[^0-9] /tmp/mytest1
11、復制/etc目錄下所有以.d結尾的文件或目錄至/tmp/mytest2目錄中。
[root@Mauro ~]# cp -r /etc/*.d /tmp/mytest2
//.不進行轉義解釋,僅表示一點
12、復制/etc/目錄下所有以l或m或n開頭,以.conf結尾的文件至/tmp/mytest3目錄中。
[root@Mauro ~]# cp -r /etc/{l,m,n}*.conf /tmp/mytest3
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/90122
第8小題有點問題,在提交答案的時候,可以先測試一下哈~加油~