一. Linux上的文件管理類命令都有哪些,其常用的使用方法和例子是啥呢?
文件管理類命令大概就是這些: ls, cd, pwd, mkdir, rmdir, cp, rm, mv, touch, cat, more, less, head, tail, file, grep.
目錄或文件操作類:
1. ls: (查看文件名命令)
-a :全部的文件,連同隱藏檔( 開頭為 . 的文件) 一起列出來 (常用)
-A :全部的文件,連同隱藏檔,但不包括 . 與 .. 這兩個目錄
-d :僅列出目錄本身,而不是列出目錄內的文件數據 (常用)
-f :直接列出結果,而不進行排序 (ls 默認會以檔名排序!)
-h :將文件容量以人類較易讀的方式(例如 GB, KB 等等)列出來 (常用)
-i :列出 inode 號碼,inode 的意義下一章將會介紹 (常用)
-l :長數據串列出,包含文件的屬性與權限等等數據 (常用)
-n :列出 UID 與 GID 而非使用者與群組的名稱 (UID與GID會在用戶管理提到!)
-r :將排序結果反向輸出,例如:原本檔名由小到大,反向則為由大到小
-R :連同子目錄內容一起列出來,等于該目錄下的所有文件都會顯示出來 (常說的遞歸)
-S :以文件容量大小排序,而不是用檔名排序
-t :依時間排序,而不是用檔名
2. cd: (切換用戶當前目錄)
cd [相對路徑或絕對路徑]
# 最重要的就是目錄的絕對路徑與相對路徑,還有一些特殊目錄的符號羅!
[root@kk ~]# cd ~test
# 代表去到 vbird 這個使用者的家目錄,亦即 /home/test
[root@kk vbird]# cd ~
# 表示回到自己的家目錄,亦即是 /root 這個目錄
[root@kk ~]# cd
# 沒有加上任何路徑,也還是代表回到自己家目錄的意思喔
[root@kk ~]# cd ..
# 表示去到目前的上一級目錄,亦即是 /root 的上一級目錄的意思
[root@kk /]# cd –
# 表示回到剛剛的那個目錄,也就是 /root 羅~
[root@kk ~]# cd /var/spool/mail
# 這個就是絕對路徑的寫法!直接指定要去的完整路徑名稱
[root@kk mail]# cd ../mqueue
# 這個是相對路徑的寫法,我們由/var/spool/mail 去到/var/spool/mqueue 就這樣寫
3. pwd: (之前有寫過了, 查看用戶當前所在位置)
pwd [-P] 選項與參數:
-P :顯示出確實的路徑,而非使用鏈接 (link) 路徑。
例:
pwd
cd /var/mail
pwd –P
/var/spool/mail
pwd與pwd –P 顯示的路徑不同,大家清楚了吧!
4. mkdir: (創建目錄)
mkdir [-mp] 目錄名稱 選項與參數:
-m :配置文件的權限喔!直接配置,不需要看默認權限 (umask)
-p :幫助你直接將所需要的目錄(包含上一級目錄)遞回創建起來!
-version 顯示版本信息
例:
mkdir -p test1/test2/test3/test4 (一起創建)
mkdir -m 744 test2
5. rmdir: (刪除目錄)
rmdir [-p] 目錄名稱 選項與參數:
-p :連同上一級“空的”目錄也一起刪除
#一般要記住刪除的目錄必須是空的,不能包含目錄或文件,如果要刪除的話請先刪除目錄里面包含的內容再去刪除目錄, 當然也可以加-p, 全部刪除, 但要小心, 免得里面有需要的文件或者文本也一并刪了!
例:
rmdir -p test1/test2/test3/test4 (全部刪除)
6. rm: (簡單明了的命令, 但必需小心使用!!!)
rm [-fir] 文件或目錄 選項與參數:
-f :就是 force 的意思,忽略不存在的文件,不會出現警告信息(強制刪除!)
-i :互動模式,在刪除前會詢問使用者是否動作
-r :循環刪除直到刪除到沒!最常用在目錄的刪除了(這是非常危險的選項)
我們一般常組合使用,rm –rf (刪除全部文件或目錄,大家得小心使用,因為刪除了就無法恢復了)
7. cp: (復制)
格式: cp 源文件 目標位置
#源文件:制定源文件列表。默認情況下,cp命令不能復制目錄,如果要復制目錄,則必須使用-R選項;
#目標文件:指定目標文件。當“源文件”為多個文件時,要求“目標文件”為指定的目錄。
但這里的CP命令是分為2種的.
單源復制:cp [OPTION]… [-T] SOURCE DEST
多源復制:cp [OPTION]… SOURCE… DIRECTORY
cp [OPTION]… -t DIRECTORY SOURCE…
單源復制:cp [OPTION]… [-T] SOURCE DEST
如果DEST不存在:則事先創建此文件,并復制源文件的數據流至DEST中;
如果DEST存在:
如果DEST是非目錄文件:則覆蓋目標文件;
如果DEST是目錄文件:則先在DEST目錄下創建一個與源文件同名的文件,并復制其數據流;
多源復制:cp [OPTION]… SOURCE… DIRECTORY
cp [OPTION]… -t DIRECTORY SOURCE…
如果DEST不存在:錯誤;
如果DEST存在:
如果DEST是非目錄文件:錯誤;
如果DEST是目錄文件:分別復制每個文件至目標目錄中,并保持原名;
cp指令常用的選項:
-i 使用交互式模式進行復制操作(存在覆蓋情況時進行提示)
-f 強制覆蓋目標文件
-r 或者-R 遞歸復制目錄
-d 復制鏈接文件本身而非其指向的真實文件
-a:-dR –preserve=all, archive,用于實現歸檔
–preserv=
mode:權限
ownership:屬主和屬組
timestamps: 時間戳
context:安全標簽
xattr:擴展屬性
links:符號鏈接
all:上述所有屬性
8. mv:
mv [-fiu] source destination 選項與參數:
-f :force 強制的意思,如果目標文件已經存在,不會詢問而直接覆蓋
-i :若目標文件 (destination) 已經存在時,就會詢問是否覆蓋
-u :若目標文件已經存在,且 source 比較新,才會升級 (update)
我們一般還可以用mv 命令進行重命名(例: mv test test.bak)
9. touch: (改變文件時間戳)
touch [-acdmt] 文件 選項與參數:
-a :僅修訂 access time
-c :僅修改文件的時間,若該文件不存在則不創建新文件
-d :后面可以接欲修訂的日期而不用目前的日期,也可以使用 –date="日期或時間"
-m :僅修改 mtime
-t :后面可以接欲修訂的時間而不用目前的時間,格式為[YYMMDDhhmm]–[[cc]YY]MMDDhhmm[.ss] 即[年]月日小時分鐘[秒]
補充:
我們在 ls 這個命令的介紹時(ls –l),有提到每個文件在linux底下都會記錄許多的時間參數,其實是有三個主要的變動時間,那么三個時間的意義是什么呢?
在這里補充一下
modification time (mtime):
當該文件的“內容數據”變更時,就會升級這個時間!內容數據指的是文件的內容,而不是文件的屬性或權限喔
status time (ctime):
當該文件的“狀態 (status)”改變時,就會升級這個時間,舉例來說,像是權限與屬性被更改了,都會升級這個時間啊。
access time (atime):
當“該文件的內容被取用”時,就會升級這個讀取時間 (access)。舉例來說,我們使用 cat 去讀取 /etc/man.config,就會升級該文件的 atime 了
文件內容操作類:
10. cat: (直接顯示文本)
cat [-AbEnTv] 選項與參數:
-A :相當于-vET 的整合選項,可列出一些特殊字符而不是空白而已
-b :列出行號,僅針對非空白行做行號顯示,空白行不標行號
-E :將結尾的斷行字節 $ 顯示出來
-n :列印出行號,連同空白行也會有行號,與 -b 的選項不同 (常用)
-T :將 [tab] 按鍵以 ^I 顯示出來
-v :列出一些看不出來的特殊字符
11. more: (一頁一頁翻動查看)
常用的快捷鍵:
空白鍵 (space):代表向下翻一行
Enter :代表向下翻一行
/字串 :代表在這個顯示的內容當中,向下搜尋字串這個關鍵字
:f :立刻顯示出檔名以及目前顯示的行數
q :代表立刻離開 more ,不再顯示該文件內容
b 或 Ctrl+b :代表往回翻頁,不過這動作只對文件有用
12. less: (一頁一頁翻動)
less與more區別: 在 more 的時候,我們并沒有辦法向前面翻, 只能往后面看,但若使用了 less 時,就可以使用 [pageup] [pagedown] 等按鍵的功能來往前往后翻看文件
常用的快捷鍵:
空白鍵 :向下翻動一頁
[pagedown]:向下翻動一頁
[pageup] :向上翻動一頁
/字串 :向下搜尋字串的功能
?字串 :向上搜尋字串的功能
n :重復前一個搜尋 (與 / 或 ? 有關!)
N :反向的重復前一個搜尋 (與 / 或 ? 有關!)
q :離開 less 這個程序
13. head: (取用前面幾行)
head [-n number] 文件 選項與參數:
-n :后面接數字,代表顯示幾行的意思(默認是前10行)
14. tail:(與head相反,取用后面幾行)
tail [-n number] 文件 選項與參數:
-n :后面接數字,代表顯示幾行的意思 (默認后10行)
-f :表示持續查看后面所接的文件,要等到按下Ctrl+c才會結束tail的查看
#(tail –f 非常有用,當我們看某些經常更新的日志時,例: tail -f /var/log/maillog)
15. file: (查看文件類型)
file ~/.bashrc ——–ASCII 的純文字檔
file /usr/bin/passwd ————可執行文件
file /var/lib/mlocate/mlocate.db ————— data 文件
總結: 這里所列出的只是命令中常用的部分選項, 不代表已經是最完全,最完整的.
有些命令有更多的參數可選, 具體可以Man,help,whatis等幫助文檔再去詳細看.
二. bash的工作特性之命令執行狀態返回值和命令行展開所涉及的內容, 和一般小例子。
1. bash的工作特性之—-命令執行狀態返回值
簡單說就是Bash的執行結果狀態.
命令執行的狀態結果:
bash通過狀態返回值來輸出此結果:
成功:0
失?。?-255
命令執行完成之后,其狀態返回值保存于bash的特殊變量$?中;
$?–它是Linux的一個特殊變量,其值為0或非0;為0表示命令執行成功,非0表示命令執行失敗
命令正常執行時,有的還會有命令返回值:根據命令及其功能不同,結果各不相同;
引用命令的執行結果:
$(COMMAND)
或'COMMAND'
例子:
1. # echo "Helllo World"
2. Helllo World
3. # echo $?
4. 0
5. # echoa "Hello World"
6. -bash: echoa: command not found
7. # echo $?
8. 127
2. bash的工作特性之—-命令行展開
~: 自動展開為用戶的家目錄,或指定的用戶的家目錄;
{}:可承載一個以逗號分隔的路徑列表,并能夠將其展開為多個路徑;
例如:/tmp/{a,b} 相當于 /tmp/a /tmp/b
三. 請使用命令行展開功能來完成以下練習:
(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
(一). 一般的做法是什么?肯定是這樣:
mkdir -pv /tmp/a_c
mkdir -pv /tmp/a_d
mkdir -pv /tmp/b_c
mkdir -pv /tmp/b_d
但這樣mkdir命令要敲4遍,冗余操作太多了,可以利用bash的特性–命令行展開來簡化操作:
mkdir -pv /tmp/{a,b}_{c,d}
(二). 用命令行展開功能來創建題目中列出的Linux目錄結構:
mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc{rc.d/init.d,sysconfig/network-scripts},lib/modu1es,lib64,proc,sbin,sys,tmp,usr/local{bin,sbin},var{lock,log,run}}
四. 文件的元數據信息有哪些,分別表示什么含義,如何查看,如何修改文件的時間戳信息.
首先來解釋, 什么是元數據:
任何文件系統中的數據分為數據和元數據.
數據是指普通文件中的實際數據,而元數據指用來描述一個文件的特征的系統數據,諸如訪問權限、文件擁有者以及文件數據塊的分布信息(inode…)等等.
在集群文件系統中,分布信息包括文件在磁盤上的位置以及磁盤在集群中的位置.
用戶需要操作一個文件必須首先得到它的元數據,才能定位到文件的位置并且得到文件的內容或相關屬性.
元數據包含: 名稱, 大小, 塊數量, IO塊數量, 文件類型, Inode, 鏈接, UID, GID, atime, mtime.
1. 文件元數據查看:
可使用stat命令查看文件的元數據
stat用法:
stat – display file or file system status
顯示文件或文件系統的狀態
stat FILE…
文件: 兩類數據
元數據:metadata:access(最后訪問),modify(最后修改),change(最后改變)
數據: data
例如:
# echo 123 >> /tmp/functions
# stat /tmp/functions
File: ‘/tmp/functions’(文件名)
Size: 4 (大小)
Blocks: 8 (文件占了多少個數據塊)
IO Block: 4096 (文件所占數據塊的塊大小)
regular file (普通文件)
Device: fd00h/64768d (硬件,既說明該文件在硬盤的那個柱面)
Inode: 134 (節點號)
Links: 1 (鏈接)
Access: (0644/-rw-r–r–) (權限)
Uid: (0/root)–(該文件所屬的屬主)
Gid: (0/root)–(該文件所屬的屬組)
Context: unconfined_u:object_r:user_tmp_t:s0–(安全上下文)
Access: 2016-12-12 15:38:47.104522265 -0400–(文件上一次的訪問時間,其實就是最近訪問時間)
Modify: 2016-12-12 15:38:48.104522265 -0400–(文件上一次修改的時間,其實就是最近數據修改過)
Change: 2016-12-12 15:38:48.104522265 -0400–(文件上一次屬性更改的時間,其實就是最近元數據&數據修改過)
2. 修改文件的時間戳信息:
可以使用touch命令更改文件的時間戳(前面已經有講解過)
touch – change file timestamps
例子:
# touch -t 201612100810.00 /tmp/functions #修改文件訪問時間和修改時間為: 2016-12-10 08:10.00
-t選項就是實現自定義時間戳.
五. 如何定義一個命令的別名,如何在命令中引用另一個命令的執行結果
1. 定義命令別名使用alias命令.
alias命令
# alias(獲取所有可用的別名定義)
# alias NAME='COMMAND'(定義別名), 注意: 僅對當前shell進程有效
# unalias NAME(撤銷別名)
2. 在命令中引用另一個命令的執行結果:(Bash特性之一,前面已有提及)
$(COMMAND)
或'COMMAND'
六. 顯示/var目錄下所有l開頭,以一個小寫字母結尾,且中間至少出現一位數字(可以有其他字符)的文件或目錄
ls -dh /var/l[a-z0-9][a-z]
七. 顯示/etc目錄下,以任意一個數字開頭,且以非數字結尾的文件或目錄
ls -dh /etc/[0-9]*[^0-9]
八. 顯示/etc目錄下,以非字母開頭,后面跟一個字母以及其他任意長度的字符的文件或目錄
ls -dh /etc/[^a-z][a-z]*
九. 在/tmp目錄下創建以tfile開頭, 后跟當前日期和時間的文件,文件名形如:tfile-2016-05-27-09-32-22
touch /tmp/tfile-$(date +%Y-%m-%d-%H-%M-%S)
十. 復制/etc目錄下的所有以p開頭,以非數字結尾的文件或目錄到/tmp/mytest1目錄中
cp -ri /etc/p*[^0-9] /tmp/mytest1
十一. 復制/etc目錄下所有以.d結尾的文件或目錄至/tmp/mytest2目錄中
cp -ri /etc/*.d /tmp/mytest2
十二. 復制/etc/目錄下所有以l或m或n開頭,以.conf結尾的文件至/tmp/mytest3目錄中
cp -ri /etc/[lmn]*.conf /tmp/mytest3
原創文章,作者:Kelvin,如若轉載,請注明出處:http://www.www58058.com/63438
贊,內容上基本上是沒啥問題~能結合markdown來使用會更好~加油~