Linux基礎知識--3.Linux目錄和文件相關命令和Linux基礎特性(2)
Linux中有許多基本操作命令,一些基本的操作命令在Linux後期學習中發揮很大的作用,因此能熟練的理解,掌握和應用這些基本的命令是後期學習的關鍵。在這根據命令的使用情況進行以下分類:
1.目錄管理命令;
2.文本文件查看命令;
3.文件的時間戳管理工具;
4.文件管理命令;
5.文本處理工具;
6.系統管理命令;
在將上述基本命令講述完之後,再來看看Linux基礎特性(2)。Linux基礎特性將涉及到命令別名的設置、字符通配、快捷鍵等。接下來詳細的介紹這些內容;(自己理解,大神勿噴)
一.基本命令:
1.目錄管理命令:
Linux的目錄結構是樹狀目錄,目錄有相對目錄和絕對目錄。
linux的絕對目錄是從/目錄開始寫起,到當前目錄的全稱,利用pwd命令就可以查看當前目錄的絕對目錄
linux的相對目錄是相對於目前工作目錄的路徑。
其中有一些特殊目錄如下:
.表示當前目錄
..表示上一級目錄
~表示當前登錄用戶的家目錄
cd命令:切換目錄命令
pwd命令:顯示當前目錄
tree命令:列出目錄的垂直結構:
常用選項:
-d:只顯示出目錄,不顯示目錄下的文件
-L #:指定顯示出的層級數
-P pattern:顯示出pattern匹配到的內容
目錄的創建命令:mkdir
命令格式:
mkdir [OPTION]... DIRECTORY...
常用選項:
-p:創建目錄時如果父目錄不存在,則連父目錄一起創建
-v:詳細顯示創建目錄的過程
eg:
# mkdir -pv /tmp/{kk,zz}/{a,c} mkdir: created directory `/tmp/kk' mkdir: created directory `/tmp/kk/a' mkdir: created directory `/tmp/kk/c' mkdir: created directory `/tmp/zz' mkdir: created directory `/tmp/zz/a' mkdir: created directory `/tmp/zz/c'
-m MODE:創建目錄時,指定所創建目錄的權限
刪除空目錄:rmdir(注意:刪除空目錄)
命令格式:
rmdir [OPTION]... DIRECTORY...
常用選項:
-p:連同上一級的空目錄一起刪除:
-v:顯示刪除過程;
rmdir -pv /etc/kk/{a,c} rmdir: removing directory, `/tmp/kk/a' rmdir: removing directory, `/tmp/kk' rmdir: failed to remove directory `/tmp/kk': Directory not empty rmdir: removing directory, `/tmp/kk/c' rmdir: removing directory, `/tmp/kk' rmdir: removing directory, `/tmp' rmdir: failed to remove directory `/tmp': Directory not empty
也可以用命令rm -rf DIRECTORY 刪除目錄,即使不是目錄不是空目錄也會刪除。但千萬不要執行
rm -rf /* 這個命令,我想學習Linux的同學都知道這是什麼意思!!
關於執行文件路徑的變量:$PATH
用root用戶的身份查詢$PATH 路徑結果:
# echo $PATH /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bi n:/root/bin
PATH變量的內容是由一堆目錄所組成的,每個目錄中間用冒號來隔開,每個目錄是由順序之分的
2.文本文件查看類命令:
文本文件查看類涉及的命令有:cat,tac,more,less,tail,head
cat:從第一行顯示文件內容
常用選項:
-n:打印出行號
tac:從最後一行開始顯示文件內容
more:成頁顯示文件內容
在more打開一個文件後,會有一些快捷翻頁按鍵:
1.空格鍵:向下翻一頁
2.Enter鍵:向下滾動一行
3.b:向前翻一頁
4./string:代表在more顯示的內容中,向下顯示string這個關鍵字
5.q:退出more
less:與more類似
less的用法比more更有彈性,其中man手冊中的操作方法就是利用less命令,也有一些快捷鍵:
1.空格,Ctrl+V,Ctrl+f,Ctrl+F:向文件尾部翻屏
2.b Ctrl+B:向文件首部翻屏
3.d Ctrl+D:向文件尾部翻半屏
4.u Ctrl+U:向文件首部翻半屏
5.Enter Ctrl+N e j Ctrl+E Ctrl+J:向文件尾部翻一行
6.y k Ctrl+y Ctrl+P:向文件首部翻一行
7.q:退出
8.#:跳轉至#行
9.G到行尾,1G到行首
等。詳細的選項查看man手冊使用方法。
head:默認查看文件的前10行:
命令格式:
head [OPTION]... FILE...
常用選項:
-c #:查看文件的前#個字節
-n #:查看文件的前#行
實例:
#head -n 5 /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
tail:默認查看文件的後10行:
命令格式:
tail [OPTION]... FILE...
常用選項:
-c #:查看文件的後#個字節
-n #:查看文件的後#行
-f:一直查看文件新追加的內容:例如查看日誌文件。按Ctrl+c退出
實例:
# tail -n 5 /var/log/messages Aug 21 23:27:24 localhost bluetoothd[1542]: HCI dev 0 up Aug 21 23:27:24 localhost bluetoothd[1542]: Starting security manager 0 Aug 21 23:27:24 localhost bluetoothd[1542]: Parsing /etc/bluetooth/serial .conf failed: No such file or directory Aug 21 23:27:24 localhost bluetoothd[1542]: ioctl(HCIUNBLOCKADDR): Invali d argument (22) Aug 21 23:27:24 localhost bluetoothd[1542]: Adapter /org/bluez/1528/hci0 has been enabled
3.文件的時間戳管理工具:
每個文件在linux下面都會記錄三個主要修改時間:
access time(atime):最近文件訪問時間,讀取文件的內容時,此時間就會發生修改,比如使用cat查看文件內容時。
modification time(mtime):當文的內容更改時,就會更新這個時間,而不是文件的屬性或權限。
change time(ctime):最近文件改變時間,改變文件元數據,像文件的權限與屬性被更改了,這個時間見就會發生變化。
使用touch命令來修改時間戳或者創建一個不存在的文件:
命令格式:
touch [OPTION]... FILE...
常用選項:
-a:僅修改訪問時間(atime)
-c:修改文件的時間,假如文件不存在則不創建文件。
-m:修改mtime
-d:使用指定的日期時間,而非現在的時間
當我們去用命令cat 查看一個文件內容時,可用命令stat + filename 查看文件的access time 發生了變化同理,當我們用vim打開一文件內容並做相應的修改,則mtime也會發生改變,ctime和access也會隨之變化,當對一個文件進行修改權限和屬性時,文件的ctime會發生變化。如以下實例:
有一個文件a.txt 三種初始時間戳爲:
# stat a.txt File: `a.txt' Size: 49 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768dInode: 262164 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2015-08-18 23:28:19.598932488 +0800 Modify: 2015-08-18 23:28:04.483931823 +0800 Change: 2015-08-18 23:28:04.486931725 +0800
我們使用命令cat來查看文件內容如:cat a.txt。然後使用命令stat來查看a.txt的時間戳
# stat a.txt (在這隻給出了時間戳信息) Access: 2015-08-22 08:53:49.724189593 +0800 Modify: 2015-08-18 23:28:04.483931823 +0800 Change: 2015-08-18 23:28:04.486931725 +0800
會發現只有Access的時間發生了改變,其他沒有發生變化。我們在修改文件的內容,來查看修改之後時間戳的變化:
# echo hello" > a.txt # stat a.txt Access: 2015-08-22 08:53:49.724189593 +0800 Modify: 2015-08-22 08:59:44.778186361 +0800 Change: 2015-08-22 08:59:44.778186361 +0800
會發現Modify時間發生改變,Change也發生改變。而atime沒有發生改變,是因爲我們沒有打開查看文件,只是通過命令echo向文件追加內容。假如我們使用vim打開文件並做相應的修改,則三種時間都會發生改變我們再用命令chmod修改文件的權限,查看文件a.txt的ctime是否改變:
# chmod +x a.txt # stat a.txt Access: 2015-08-22 09:00:25.013189719 +0800 Modify: 2015-08-22 09:00:25.013189719 +0800 Change: 2015-08-22 09:09:33.291184015 +0800
命令執行後會發現文件a.txt的ctime發生了改變。
4.文件管理命令:
文件管理命令涉及到文件的複製、粘貼和刪除,分別是cp、mv、rm命令
1.cp命令:
命令使用格式:
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
(1)cp SOURCE DESR
如果目標文件不存在,將會新建DEST,並將SRC中的內容填充至DEST中
如果目標文件存在:
如果DEST是文件:將SOURCE中的內容覆蓋至DEST中,爲了數據的安全此時
建議使用-i選項
如果DEST是目錄:在DEST下新建與源文件同名的文件,並將SOURCE中的內容
填充新的文件中
(2)cp SOURCE... DEST
如果SOURCE爲多個文件:則DEST必須存在且爲目錄。其他情形均會出錯。
(3)cp SOURCE DEST
SOURCE 是目錄:此時要用-r選項:
如果DEST不存在:則創建指定目錄,複製SRC目錄中的所有文件至DEST中;
如果DEST不存在;
如果是DEST是文件,報錯
如果DEST是目錄:直接把SOURCE複製到DEST中.
常用選項:
-i:交互模式,提示覆蓋時會有所提示。
-f:強制複製
-r/-R:遞歸複製目錄及文件
-d: --no-dereference --preserve=links複製符號連接
-a/-dr|R:--preserve=all 遞歸複製並保存源文鍵的相關屬性
-l:對源文件建立硬鏈接,而非複製源文件
-s:對源文鍵建立軟連接,而非複製源文件
實例:
# cp -r /etc/sysconfig/network-scripts/ /tmp/network/ [root@localhost etc]# ls -l /tmp/network/ total 204 -rw-r--r-- 1 root root 158 Aug 22 10:12 ifcfg-eth1 -rw-r--r-- 1 root root 254 Aug 22 10:12 ifcfg-lo lrwxrwxrwx 1 root root 20 Aug 22 10:12 ifdown -> ../../../sbin/ifdown -rwxr-xr-x 1 root root 627 Aug 22 10:12 ifdown-bnep -rwxr-xr-x 1 root root 5511 Aug 22 10:12 ifdown-eth -rwxr-xr-x 1 root root 781 Aug 22 10:12 ifdown-ippp -rwxr-xr-x 1 root root 4168 Aug 22 10:12 ifdown-ipv6 [root@localhost ~]# cp -s a.txt c.rlink lrwxrwxrwx 1 root root 5 Aug 22 10:08 c.rlink -> a.txt [root@localhost ~]# cp -l a.txt c.link [root@localhost ~]# ll -rw-r--r-- 1 root root 12 Aug 22 10:05 c.link
5.文本處理命令:
文本處理命令有wc、cut、sort、uniq
wc命令:wc - print newline, word, and byte counts for each file
命令格式:
wc [OPTION]... [FILE]...
常用選項:
-l:顯示行數
-w:顯示單詞數
-c:顯示字符數
sort命令:對文件內容進行排序
命令格式:
sort [OPTION]... [FILE]...
常用選項:
-r:逆序排列
-n:按數值大小排序
-f:忽略字符大小寫
-k#:以指定字段爲標準進行排序
-t#:指定分隔符
-u:uniq:排序後去重。相同的只顯示一次
cut命令:文本切割命令
命令格式:
cut OPTION... [FILE]...
常用選項:
-d:指定分隔符。默認爲空格
-f#:選定定第#字段
使用格式爲:
-f#:
-f#,#,..:離線的多個字段
-f#-#:連續多個字段
--output-delimiter=STRING:選定自己指定的分隔符
eg:
cut -d: -f1,7 /etc/passwd --output-delimiter="@" root@/bin/bash bin@/sbin/nologin daemon@/sbin/nologin
uniq命令
注意:連續且完全相同方爲重複:
常用選項:
-c:顯示每行重複的次數
-d:只顯示重複的行
-u:只顯示不曾重複的行
二.Linux基礎特性二:
1.命令別名(alias)
alias:顯示當前shell進程所有可用的命令別名
定義別名:
alias NAME='VALUE'
在命令模式下定義的別名,僅對當前shell進程有效, 要想永遠有效需要修改配置文件
對當前用戶有效:~/.bashrc
對多有用戶有效:/etc/bashrc
然後重新讀取配置文件,就會立即生效:source ~/.bashrc
撤銷別名:
unalias name
如果在沒有撤銷別名時,要執行原命令用:/COMMAND
2.glob:字符通配:
man 7 glob
bash 中用於實現文件名通配的通配符有:
*、?、[]
*:任意長度的任意字符
?:任意單個字符
[]:匹配指定範圍內的任意單個字符
[^]:匹配指定範圍之外的字符
專用字符集合:
[:digit:]:任意數字,相當於0-9
[:lower:]:任意小寫字母
[:upper:]:任意大寫字母
[:alpha:]:任意大小寫字母
[:alnum:]:任意數字或字母
[:space:]:空格字符
[:punct:]:標點符號
練習:
1.顯示/var目錄下多有l開頭,以一個小寫字母結尾,中間出現至少一位數字的文件或目錄
ls -d /var/l*[0-9]*[[:lower:]]
2.顯示/etc/目錄下,以任意一位數字開頭,且以非數字結尾的文件或目錄
ls -d /etc/[0-9]*[^[:digit:]]
3.顯示/etc/目錄下,以非字母開頭,後面跟了一個字母及其其他任意長度任意字符的文件或目錄
ls -d /etc/[^[:alpha:]][[:alpha:]]*
4.複製/etc/目錄下,所有以m開頭,以非數字結尾的文件或目錄至/tmp/mageedu目錄中
cp -a /etc/m*[^[:digit:]] /etc/mageedu
5.複製/etc/目錄下,所有以.d結尾的文件或目錄至/tmp/mageedu目錄中;
cp -a /etc/*.d /tmp/magedu.com
6.複製/etc/目錄下,所有以.conf結尾的文件,且m,n,r,p開頭的文件或目錄複製到/tmp/mageedu
cp -a /etc/[mnrp]*.conf /tmp/mageedu.com
3.bash的快捷鍵:
Ctrl+l:清屏:相當於命令clear
Ctrl+a:跳轉到命令行的開始處
Ctrl+e:跳轉到命令行的結尾處
Ctrl+u:刪除命令行首至光標所在處的所有內容
Ctrl+k:刪除光標所在處至命令行尾的所有內容
4.bash的I/O重定向和管道
程序是由指令和數據組成:程序執行時需要讀入數據和程序執行後把數據輸出
數據的輸入和輸出一般是從鍵盤輸入數據,在屏幕上輸出數據
讀入數據:Input,輸出數據:Output
打開一個文件都有一個fd:file descriptor:內核來訪文件。文件描述符是非負數。打開現存文件或新文件時,內核會返回一個文件描述符。讀取文件也需要使用文件描述符來指定待讀寫的文件。
標準輸入:0
標準輸出:1
標準錯誤輸出:2
I/O重定向:就是改變標註輸入和輸出的位置。
1.輸出重定向:COMMAND > NEW_POSITON COMMAND >> NEW_POS
>:覆蓋重定向,目標文件中的原有內容會被清楚
>>:追加重定向,新內容將會追加至目標文件尾部
set -C:禁止將內容覆蓋輸出至已有文件中。
強制覆蓋:>|
set +C:取消上述操作
2>:覆蓋重定向錯誤輸出數據流:
2>>:追加重定向錯誤輸出數據流
標準輸出和錯誤輸出各自定向至不同的位置:
COMMAD > /path/to/file.out 2> /path/to/error.out
將標註輸出和錯誤輸出至同一個文件中:(有兩種方法:)
&>:覆蓋重定向
&>>:追加重定向
1.COMMAND &> /path/to/file.out
2.COMMAND > /path/to/file.out 2>&1
2.輸入重定向:<
實例:
cat << EOF
cat > /tmp/shell << EOF
3.管道|:把上一個命令的執行結果當做下一個命令的執行參數
tr命令:轉換或刪除字符:
cat a.txt | tr 'a-z' 'A-Z'
tee命令:
tee [option].. [file]..
把要內容顯示在屏幕上又保存到文件中
# echo $PATH | tr 'a-z' 'A-Z' | tee /tmp/path
實例:
1.# head -n 5 /etc/passwd | tr 'a-z' 'A-Z' > /tmp/passed.out
2.# who | tail -n 2 | tr 'a-z' 'A-Z' > /tmp/who.out