『Linux學習』基本命令篇(二)

1.注意  \  的轉義

2.Linux中的單引號和雙引號

1)單引號('‘):禁止所有命令行的擴展功能

2)雙引號(“”):禁止所有命令行擴展功能,但是以下的符號除外。

     美元$   倒引號 (` ) 反斜線 ( \ ) 感嘆號(!)

3.文件描述符:

0:標準的命令輸入,文件描述符縮寫爲stdin

1:標準的命令輸出,文件描述符縮寫爲stdout

2:標準的命令錯誤(信息),文件描述的縮寫爲stderr。

[root@localhost tt]# ls -l /dev/std*
lrwxrwxrwx  1 root root 15 Nov  8 18:12 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx  1 root root 15 Nov  8 18:12 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx  1 root root 15 Nov  8 18:12 /dev/stdout -> /proc/self/fd/1

4.find  (這個命令會在shell編程中詳細說)

在層次結構中定位文件和目錄

語法格式  find pathnames(路徑名)   expressions(表達式)  actions(動作)

expressions(表達式)  :

-name 文件名 :根據文件名搜索

-size  [  +  /  -]n:查找大小(尺寸)大於+n,或小於-n,或正好等於n的文件,在默認情況下n代表512字節大小的數據塊的個數

-atime [  +  /  -]n: 查找訪問時間已經超過+n天,低於n天,或正好等於n天的文件

-mtime [  +  /  -]n:查找更改時間已經超過+n天,低於n天,或者正好等於n天的文件

-user loginID:查找屬於loginID名的所有文件

-type:查找某一類型的文件 如  f(文件) d(目錄)

-perm:查找所有某些特定訪問許可位的文件

actions:

 -exec   命令  {} \;   在每一個定位的文件上運行指定的命令

-ok  命令 {} \; 在find 命令對每個定位文件上執行命令前需要進行確認。

-print :指示find命令將當前的路徑名打印在屏幕上,默認的方式。

-ls 顯示當前路徑名和相關的統計信息


5.重定向  

1)   >   覆蓋原文件內容        

2)>>  追加內容


find /etc -name passwd &> output  這個地方的&符號代表了所有文件描述符(包括0,1,2),就是將所有信息輸出到output

6.tr  命令  不接受文件名形式的參數,該命令要求它的輸入被重定向爲某個地方。

[root@localhost tt]# tr 'A-Z' 'a-z' < my.pro
這是將my.pro中的大寫字符全部轉化小寫

[root@localhost tt]# tr 'A-Z' 'a-z' < my.pro >test
再次將輸出重新定向到test

將DOS的結束符轉化成Linux的文件結束符:tr  -d  "\r" < inputfile > outputfile

7.cut命令

cut  [  選項  ]  [   文件名  ]

-f:說明定義字段列

-c:要剪切的列

-d:說明定義字段的分隔符

[root@localhost tt]# cut -f2 emp > name
將emp中第二列重寫到name。(默認是TAB分隔符)

cut  -f2 -d, emp  以逗號爲分隔符

cut  -c4-7 emp  剪切每一行的第4-7列

8.paste

paste  [   選項]   [   文件名]

默認是TAB分割

-d,指定分隔符

縱向合併。進行的是橫向合併,增加文件的寬度。


9.col 將TAB轉成空格

[root@localhost tt]# col -x emp > emp.space

10.sort排序

sort  [ 選項 ]  [ 文件名 ]

1)-r:進行反向排序

2)-f:忽略字符的大小寫

3)-n:以數字的順序進行排序

4)-u:去掉重複行

5)-t:-t  c 表示以字符C作爲分隔符

6)-k:-k N 表示按第N個字段排序

              -k  N1,N2 先按N1排序,再按N2排序

[root@localhost tt]# sort -t: -k3 -n /etc/passwd

11.uniq  刪除一個文件的相鄰重複的行

1)-c:在顯示的行前冠以該行出現的次數

2)-d:只顯示重複行

3)-i:忽略字符的大小寫

4)-u:只顯示唯一的行,即出現一次的行

12.管道   標準錯誤信息並不通過管道傳播,即第一個命令的錯誤信息不會傳給第二個。

在管道中可以使用xargs命令,它可以將管道導入的數據轉換成後面命令的輸入參數列表,xargs含義  x算術中的稱號,可執行的,權限標誌爲可執行就是x。

xargs含義就是產生某個命令的參數

[root@localhost tt]# cat somefilerm
1.3
1.4
[root@localhost tt]# cat somefilerm | xargs rm -f

刪除somefilerm中的文件


13.tee命令分流輸出。

tee命令的功能就是將標準輸入複製給每一個指定的文件和標準輸出

14.電子郵件的地址是  /var/spool/mail           mail查看mail,發送mail

15.

1)系統中每一個用戶的(User)都有一個唯一的用戶標識碼,即uid,uid 0 是root用戶的標識號碼

2)所有的用戶名和用戶標識符都被存放在根目錄下的/etc/passwd文件中

3)在口令文件中還存放了每一個用戶家目錄和該用戶登錄後第一個執行的程序。

4)如果沒有相應的權限就不能讀,寫

[root@localhost ~]# more /etc/passwd
root:x:0:0:root:/root:/bin/bash
從左到右依次是:

1)這個用戶的用戶名。創建用戶時,root用戶起的

2)如果是x,表示這個用戶在登錄時,必須使用密碼,如果爲空,則該用戶在登錄系統時無需提供任何密碼。

3)這個用戶的uid   Linxu和UNIX將1-499之間的號碼,保留給系統用戶和系統羣組用戶。這些系統用戶對系統的服務和一些應用程序具有控制權限。

4)這個用戶的gid

5)記錄這個用戶的註釋信息

6)記錄這個用戶的家目錄

7)記錄這個用戶登錄後第一個要執行的程序

[root@localhost ~]# cat /etc/shadow | more
root:$1$Ul1SzT0I$CX41hgZWrU0eiU2SP48xu.:15629:0:99999:7:::

/etc/shadow文件的從到右依次是:

1)用戶名

2)密碼:$1$代表此密碼經過md5加密過。!!標誌這個密碼被鎖住了,但是管理員可以通過 

[root@localhost ~]# passwd -u test

進行解鎖,就可以登錄了,一開始沒有設置密碼,登錄時不需要密碼。

 16. Linux羣組

1)Linux系統中,每一個用戶都一定隸屬於至少一個羣組,而且每一個羣組都有一個羣居標識號,gid

2)所用的羣組和對用的gid存放在/etc/group文件中。

3)Linux在創建用戶時,爲每一個用戶指定創建一個同名的羣組,並且把這個用戶加入到這個羣組中去,也就是說每個用戶至少會加入到與他同名的羣組中,也可以加入到其他羣組

4)一個文件屬於某個羣組,那麼這個羣組內的用戶都可以訪問這個文件

[root@localhost ~]# more /etc/group
root:x:0:root
bin:x:1:root,bin,daemon

從左到右依次是:

1)羣組的名字

2)x表示這個羣組在登錄linux系統時必須使用密碼。

3)這個羣組的gid

4)這個羣組內的成員。

[root@localhost ~]# more /etc/gshadow
root:::root
bin:::root,bin,daemon

Linux一般很少爲羣組設置密碼。

17.權限問題   chmod更改權限 -R 遞歸更改子文件和子文件夾,這個地方網上講的很多,並且很細,注意搜索資料,

rwxa   ugo   +-=  數字表示權限

18.用戶,羣組主要的四個文件

/etc/passwd

/etc/shadow

/etc/group

/etcgshadow

passwd 用戶名  更改用戶的密碼

passwd -S 用戶名 查看用戶的密碼狀態

[root@localhost ~]# passwd zhao
Changing password for user zhao.
New UNIX password:

[root@localhost ~]# passwd -S test
Password locked.
[root@localhost ~]#

su-切換用戶:

su - dog 命令要重新設置環境變量,要設置成dog用戶的環境變量。su -dog 使用了 -  ,使用 - 之後在用戶切換後系統要重新啓動login shell,也就是重新裝入當前用戶的環境變量。

su dog  命令只 切換用戶,不更改環境變量,這就是帶 - 和不帶 - 的區別

[root@localhost ~]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:system_r:unconfined_t

id命令,顯示用戶的信息。

[root@localhost ~]# users
root zhao
[root@localhost ~]# groups
root bin daemon sys adm disk wheel

users列出當前登錄所有用戶的名字

groups表示當前用戶所屬的羣組。

users,who以及w命令顯示的結果中不包括使用su命令切換的用戶。

19.Linux系統的默認權限。

文件系統的預設默認權限是 666

目錄的默認權限是777

通過umask可以設置創建文件是的默認權限。

umask會在shell編程中詳細說明。

[root@localhost ~]# umask
0022

20.特殊權限。(第四組權限)

suid,sgid,sticky

suid是借用所有用戶u權限的最後一位,即可執行權限,並以s表示

guid是借用羣組g權限的最後一位,即可執行權限,並以s表示

sticky是借用其他用戶o權限的最後一位,即可執行權限,並以t表示。

當一個文件或者目錄加入suid,guid,sticky權限時,如果原來文件或者目錄的所有者具有x權限(即suid要借位的權限位),或者同一羣組g具有x權限(即guid要借位的權限位),或者其他用戶具有x權限(即sticky權限要借位的權限位),Linux系統就用小寫的 s(suid),s(guid),t(stick),如果原來文件或者目錄沒有,就用大寫的 S(suid)S(guid)T(sticky)表示。

[root@localhost mypro]# chmod u+s a.out
[root@localhost mypro]# ls -l
total 44
-rwsrwxr-x  1 zhao zhao 5129 Oct 17 22:53 a.out
[root@localhost mypro]# chmod u+s main.cpp
[root@localhost mypro]# ls -l
total 44
-rwsrwxr-x  1 zhao zhao 5129 Oct 17 22:53 a.out
-rwSrw-r--  1 zhao zhao   67 Oct 17 22:53 main.cpp

看到a.out和mail.cpp的u位的最後一個權限爲的不同了


通過數字來設定特殊權限:

suid (4)  guid(2)  sticky(1)

[root@localhost mypro]# ls -l my.pro
-rw-rw-r--  1 zhao zhao 145 Oct 17 22:51 my.pro
[root@localhost mypro]# chmod 5664 my.pro
[root@localhost mypro]# ls -l my.pro
-rwSrw-r-T  1 zhao zhao 145 Oct 17 22:51 my.pro

特殊權限代表最高一位5  (suid  stick)

suid的作用:

suid特殊權限是以命令(可執行文件)的所有着來運行着一命令(可執行文件)的,而不是以執行着的權限來運行該命令的。

sgid和suid類似,是以命令的(可執行文件)的羣組(group)的權限來運行這一命令的

例如ping命令:

[root@localhost mypro]# ls -l /bin/ping
-rwsr-xr-x  1 root root 33272 Oct  7  2006 /bin/ping
ping命令的所有者是root,但是有suid權限位,就是說運行這個命令時,是以root用戶的權限來運行。

特殊權限對目錄的作用。

將sticky和sgid特殊權限設置在目錄上。

1)如果在一個目錄上設置了sticky這個特殊權限,那麼只有文件的所有者和root用戶纔可以刪除該目錄的文件,而Linux系統不會理會group或other的寫權限。

2)如果在一個目錄上設置了sgid這個特殊權限,那麼只要是同一個組羣組的成員(具有相同的gid的用戶),都可以在這個目錄中創建文件。

3)通常會對目錄同時設置sticky和sgid這兩個特殊權限,以方便羨慕的管理(將同一個項目的文件都放到這個目錄中方便同一個項目成員之間共享信息)

21.i 節點

struct dinode
{
 ushort di_mode;  /*文件類型+用戶權限*/
 short di_nlink;  /*文件鏈接數*/
 ushort di_uid;  /*屬主用戶id*/
 ushort di_gid;  /*屬主用戶組id*/
 off_t di_size;  /*文件大小*/
 char di_addr[40]; /*文件數據區起點地址*/
 time_t di_atime; /*最後訪問時間*/
 time_t di_mtime; /*最後修改時間*/
 time_t di_ctime; /*創建時間*/
};

1)一個i節點就是一個與某個特定對象(如文件,目錄,或符號鏈接)相關的信息列表。

2)一個i節點就是一個數據結構,它存放了有關一個普通文件,目錄或其他文件系統對象的基本信息

3)當Linux系統被把一個文件系統格式化成ext2或ext3時,系統將自動生成一個i節點表,在這個表中包含了所有文件的元數據(描述數據的數據)的一個列表,i節點的個數決定了在這個文件系統中最多可以存儲多少個文件,因爲每一個文件對用一個唯一的i節點,而這個i節點是使用一個i節點號(inode number 或者  inode-no)來標識的。

4)在一個分區中,有多少個i幾點就能存儲多少個文件和目錄。在多數類型的系統中,i節點的數目是固定的,並且是在創建文件系統時生成的,在一個典型的UNIX或者Linx系統中,i節點所佔用的空間大約是整個文件系統大小的1%

5)通常每個i節點有兩部分組成。第一部分是有關文件的基本信息,第二部分是指向存儲文件信息的數據塊指針。



時間戳又包含三個時間:

1)Access time(A time) 指的是最後一次存取這個文件的時間

2)modify time (M time) 指的是最後一次編輯這個文件的時間

3)Change time (C time)指的是i節點相對於這個文件的任何一列的元數據發生變化的時間。即i節點的這些屬性變化時就C time發生更新

一般M time被更新,A 和C time也跟着更新,因爲,更新一個文件,先要打開這個文件,而編輯後,文件大小會改變,size屬性發生變化,C  time發生變化


i節點中的所有屬性是描述文件的,而不是描述文件內容的,文件的內容,即文件中的數據存放到什麼地方,被存到i節點最後一列的指針所指向的數據塊


一般是通過文件名來訪問文件的

1)文件名是訪問和維護文件時最常用的工具

2)i節點是系統中用來記錄有關文件信息的對象

3)數據塊數用來存儲數據的磁盤空間單位


文件名----->  i節點 ----------------->數據塊

目錄和文件對應i節點的區別:






22.cp mv  rm怎樣操縱i節點

cp:

1)系統將找到一個空閒的i節點記錄,把新增加的文件的元數據寫入到這個空閒的i節點中並將這個新紀錄放入到inode表中

2)同時還要產生一條目錄記錄,把新增的文件名對應到這個空的inode號碼。

3)當做完這些的,系統纔會將文件的內容(數據)複製到新增的文件中

mv:

1)系統會首先產生一個新的目錄記錄,把新的文件名對應到原有(原文件)的i節點,

2)刪除帶有就文件的原有的目錄記錄。

3)系統除了會更新時間戳之外,移動文件行爲對原本在inode表中的數據不會有任何影響,也不會將文件一定到其他文件中去,也就是說沒有發生真正的文件移動。

4)如果要移動的文件的源位置和目的位置是在不同的文件系統是,mv的行爲是複製和刪除這兩個動作。

rm;

1)系統首先會將這個文件的連接數減一,(eg,如果原來這個文件的test的link count 爲3,運行了rm test後,test的link 將爲2),之後這個文件的link count如果小於1

,系統就會釋放這個i節點以便重用。

2)釋放存儲這個文件內容的數據快,即將這些數據塊標記爲可以使用。

3)刪除記錄這個文件名和i節號的目錄記錄

4)系統並未真正的刪除這一文件中的數據,只有當其他文件要使用這些已經釋放的數據塊時,這些數據塊中原有的數據纔會被覆蓋掉(只要數據塊沒有被覆蓋,數據就可能恢復)


23.軟連接:

lrwxrwxrwx  1 root root      2 Oct 16 07:39 view -> vi
lrwxrwxrwx  1 root root      8 Oct 16 07:39 ypdomainname -> hostname

軟連接的大小是指向完整路徑爲8個字符的hostname這個名字的大小


最好使用絕對路徑,防止連接斷開

軟連接本身就是一個文件,也佔一個i節點。


24.硬連接:

一個硬連接是一個文件名與一個i節點之間的對應關係,也可以認爲一個硬連接在所對應的文件上添加了一個額外的路徑名。

硬連接也是一種連接,它把多個不同的文件名對應到一個i節點上。

因爲每一個磁盤分區(文件系統)的i節點都是獨立的,並且在i節點中的指針所指向的數據塊只能存放於這個分區中,所以硬鏈接不能跨分區。

ln 文件名  連接名

[root@localhost mypro]# ln main.cpp m
[root@localhost mypro]# ls -li
total 52
16683 -rwsrwxr-x  1 zhao zhao 5129 Oct 17 22:53 a.out
16682 -rw-rw-r--  2 zhao zhao   67 Oct 17 22:53 m
16682 -rw-rw-r--  2 zhao zhao   67 Oct 17 22:53 main.cpp

m和main.cpp共享一個i節點

25.ls 顯示文件前面的類型

1)-  :普通文件

2)d:目錄

3)l:符號連接(軟連接)文件,(注意不是硬連接)

4)b:塊特殊文件,一般指設備

5)c:字符特殊文件,

6)p:命令管道文件

7)s:socket,套接字文件

[root@localhost mypro]# ls -l /dev/sda /dev/mice /dev/ini* /dev/gp*
srwxrwxrwx  1 root root      0 Nov  9 09:03 /dev/gpmctl
prw-------  1 root root      0 Nov  9 09:01 /dev/initctl
crw-------  1 root root 13, 63 Nov  9 09:00 /dev/mice
brw-rw----  1 root disk  8,  0 Nov  9 09:00 /dev/sda






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章