本週作業內容:
1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。
文件管理命令:cp,mv,rm
cp:將一個或多個源文件或者目錄複製到指定的目的文件或目錄
1. cp source dest
如果source是文件
假如目標不存在,則表示新建DEST同名文件,並將SOURCE中的內容複製到新建的DEST中。
假如目標存在, 假如目標是文件,則目標文件中的內容將被source中的內容覆蓋。此時建議使用-i選項,將提示是否要覆蓋目標中的內容。
假如目標是目錄,則在目標目錄下新建同名文件,並將SOURCE中的內容複製到新建的DEST中。
如果source是目錄
假如目標不存在,則報錯,因爲cp不能創建目錄。如再加-r選項,則將執行,新建同名目錄,並複製source目錄下的內容
假如目標存在, 假如目標是文件,則報錯,因爲cp複製目錄到文件中。
假如目標是目錄,且需要加-p選項,因爲cp默認是不能複製目錄的,則將源目錄複製到目標目錄之下。否則不能複製。
2.cp source....dest
如果source是多個文件或目錄,則dest必須存在,且必須爲目錄,否則命令將出錯。
注:cp必須加選項-r才能複製目錄,並遞歸複製目錄。
常用選項:
-i 交互式,提示是否要覆蓋目錄中已經存在的內容
-r 遞歸式複製,將依次複製源的子目錄
-a 歸檔式複製,將複製源文件的所有屬性,包括link,權限,時間屬性等
-d 相當於--no dereference和--preserv=links
--preserv[=ATTR_LIST]
mode:權限
ownership:屬主屬性
timestamp
links
xattr
context
all
-f force強制覆蓋,不提醒是否要覆蓋。
-v 顯示詳細的複製過程
-t 指定目標
示例:cp aaa/* /bbb 複製目錄aaa下所有到/bbb目錄下,這時如果/bbb目錄下有和aaa同名的文件,需要按Y來確認並且會略過aaa目錄下的子目錄。
cp -r aaa/* /bbb 這次依然需要按Y來確認操作,但是沒有忽略子目錄。
cp -r -a aaa/* /bbb 依然需要按Y來確認操作,並且把aaa目錄以及子目錄和文件屬性也傳遞到了/bbb。
cp -r -a -f aaa/* /bbb 成功,沒有提示按Y、傳遞了目錄屬性、沒有略過目錄。
mv: move,移動文件
1. mv source dest
如果source是文件
假如目標不存在,則表示新建DEST同名文件,並將SOURCE中的內容複製到新建的DEST中,並刪除源文件。
假如目標存在, 假如目標是文件,則目標文件中的內容將被source中的內容覆蓋,並刪除源文件。此時建議使用-i選項,將提示是否要覆蓋目標中的內容。
假如目標是目錄,則在目標目錄下新建同名目錄,並將SOURCE中的內容複製到DEST目錄。
如果source是目錄
假如目標不存在,則創建目錄,並將SOURCE中的內容複製到新建的DEST目錄,並刪除源目錄。
假如目標存在, 假如目標是文件,則報錯。
假如目標是目錄,則將源目錄複製到目標目錄之下,並刪除源目錄。
2.mv source....dest
如果source是多個文件或目錄,則dest必須存在,且必須爲目錄,否則命令將出錯。
3.選項,同cp
注:mv不區別源是文件還是目錄,即不需要-r選項。
示例:將文件ex3改名爲new1
mv ex3 new1
將目錄/usr/men
中的所有文件移到當前目錄(用.
表示)中:
mv /usr/men/*
rm: remove,刪除文件
rm [OPTION]... FILE...
常用選項:
-i: 交互式
-f: 強制刪除
-r: 遞歸
rm -rf
示例:rm -i test example
2、bash的工作特性之命令執行狀態返回值和命令行展開所涉及的內容及其示例演示。
bash的命令執行的狀態結果爲兩種:
成功:0
失敗:1-255
bash命令行展開的內容:
~: 展開爲用戶的主目錄
~USERNAME:展開爲指定用戶的主目錄
{}:可承載一個以逗號分隔的列表,並將其展開爲多個路徑
/tmp/{a,b} = /tmp/a, /tmp/b
/tmp/{tom,jerry}/hi = /tmp/tom/hi, /tmp/jerry/hi
示例: echo ${!PWD}
echo hello,{world,hello}
echo ~
3、請使用命令行展開功能來完成以下練習:
(1)、創建/tmp目錄下的:a_c, a_d, b_c, b_d
mkdir /tmp/{a,b}{c,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
mkdir /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、文件的元數據信息有哪些,分別表示什麼含義,如何查看?如何修改文件的時間戳信息。
元數據(Meta Date),關於數據的數據或者叫做用來描述數據的數據或者叫做信息的信息。
這些定義都很是抽象,我們可以把元數據簡單的理解成,最小的數據單位。元數據可以爲數據說明其元素或屬性(名稱、大小、數據類型、等),或其結構(長度、字段、數據列),或其相關數據(位於何處、如何聯繫、擁有者)。
使用查看文件狀態命令查看元數據信息:stat
三個時間戳:
access time:訪問時間,簡寫爲atime,讀取文件內容
modify time: 修改時間, mtime,改變文件內容(數據)
change time: 改變時間, ctime,元數據發生改變
touch命令:修改文件的時間戳信息命令
touch [OPTION]... FILE...
-a: only atime
-m: only mtime
-t STAMP:
[[CC]YY]MMDDhhmm[.ss]
-c: 如果文件不存,則不予創建
5、如何定義一個命令的別名,如何在命令中引用另一個命令的執行結果?
命令別名(alias)
通過alias命令實現:
(1) alias
顯示當前shell進程所有可用的命令別名;
(2) alias NAME='VALUE'
定義別名NAME,其相當於執行命令VALUE;
注意:在命令行中定義的別名,僅對當前shell進程有效;如果想永久有效,要定義在配置文件中;
僅對當前用戶:~/.bashrc
對所有用戶有效:/etc/bashrc
Note: 編輯配置給出的新配置不會立即生效;
bash進程重新讀取配置文件:
source /path/to/config_file
. /path/to/config_file
撤消別名:unalias
unalias [-a] name [name ...]
Note: 如果別名同原命令的名稱,則如果要執行原命令,可使用"\COMMAND";
使用管道符引用另一個命令的執行結果,號是一條豎線:"|"
用法: command 1 | command 2 他的功能是把第一個命令command 1執行的結果作爲command 2的輸入傳給command 2,
例如:
ls -l | more
該命令列出當前目錄中的任何文檔,並把輸出送給more命令作爲輸入,more命令分頁顯示文件列表。
又如 rpm -aq | less
6、顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間至少出現一位數字(可以有其它字符)的文件或目錄。
ls /var/l*[0-9]*[[:lower:]]
7、顯示/etc目錄下,以任意一個數字開頭,且以非數字結尾的文件或目錄。
ls /etc/[0-9]*[^0-9]
8、顯示/etc目錄下,以非字母開頭,後面跟了一個字母以及其它任意長度任意字符的文件或目錄。
ls /etc/[^[:alpha:]][[:alpha:]]*
9、在/tmp目錄下創建以tfile開頭,後跟當前日期和時間的文件,文件名形如:tfile-2016-08-06-09-32-22。
mkdir /tmp/tfile|date -d "%y-%m-%d-%H-%M-%S"
10、複製/etc目錄下所有以p開頭,以非數字結尾的文件或目錄到/tmp/mytest1目錄中。
cp -r /etc/p*[^[0-9]] /tmp/mytest1
11、複製/etc目錄下所有以.d結尾的文件或目錄至/tmp/mytest2目錄中。
cp -r /etc/*d /tmp/mytest2
12、複製/etc/目錄下所有以l或m或n開頭,以.conf結尾的文件至/tmp/mytest3目錄中。
cp -r /etc/{l,m,n}*.config /tmp/mytest3