Linux文件和用戶操作

Linux中ls命令詳解

英文全名:List即列表的意思,當我們學習某種東西的時候要做到知其所以然,當你知道了這個東西大概是個什麼了以後你的思維就會聯想到很多的東西學習的就會很快。

1. ls -a 列出文件下所有的文件,包括以“.“開頭的隱藏文件(linux下文件隱藏文件是以.開頭的,如果存在..代表存在着父目錄)。


2. ls -l 列出文件的詳細信息,如創建者,創建時間,文件的讀寫權限列表等等。


3. ls -F 在每一個文件的末尾加上一個字符說明該文件的類型。"@"表示符號鏈接、"|"表示FIFOS、"/"表示目錄、"="表示套接字。


4. ls -s 在每個文件的前面打印出文件的大小。  size(大小)


5. ls -t 按時間進行文件的排序  Time(時間)


6. ls -A 列出除了"."和".."以外的所有文件。


7. ls -R  將當前目錄的所有子目錄中的內容列出來,相當於我們編程中的“遞歸”實現


8. ls -L 列出文件的鏈接名。Link(鏈接)


9. ls -S 按照文件的大小進行排序

補充:

文件的顏色所代表的含義:

藍色              目錄

綠色              可執行文件

紅色              壓縮文件

淺藍色          (淺)鏈接文件

白色              其他文件

黃色              設備文件:包括block, char, fifo

通配符  (用來查找文件的)  ("{}"用來生成序列的)

*                匹配任何字符串/文本,包括空字符串 


?                匹配任意一個字符 


[[:alpha:]]     單個字母


[[:upper:]]        單個大寫字母

 


[[:lower:]]        單個


[[:digit:]]        單個數字


[[:alnum:]]        單個數字或字母


[[:space:]]        單個空格


[[:punct:]]     單個符號


{1..3}            1,2 3


{a..z}             大括號用來生成按照一定的順序組成的序列

 

{a,b,c}      a,b,c    

 

[1-3]             匹配中括號中的任意一個字符

[a-z]                 匹配中括號中的任意一個字符


[^ac] [!ac]        不是a和c


[abcd]            匹配中括號中的任意一個字符即可

利用{}進行備份

 

 []與{}區別

[]只能用來找文件
{} 用來找文件,或創造文件生成序列

 

補充echo命令

echo命令用於在shell中打印shell變量的值,或者直接輸出指定的字符串。linux的echo命令,在shell編程中極爲常用, 在終端下打印變量value的時候也是常常用到的,因此有必要了解下echo的用法echo命令的功能是在顯示器上顯示一段文字,一般起到一個提示的作用。

輸出換行 echo-e

echo -e 處理特殊字符

若字符串中出現以下字符,則特別加以處理,而不會將它當成一般文字輸出: 
\a 發出警告聲; 
\b 刪除前一個字符; 
\c 最後不加上換行符號; 
\f 換行但光標仍舊停留在原來的位置; 
\n 換行且光標移至行首; 
\r 光標移至行首,但不換行; 
\t 插入tab; 
\v 與\f相同; 
\ 插入\字符; 
\nnn 插入nnn(八進制)所代表的ASCII字符;

輸出不換行 echo -n

echo給文件追加內容

在Shell編程過程很多時候會使用echo 並輸入到日誌文件中。寫日誌的時候有兩種情況,一種是一次寫入文件空,再寫的時候就將之前的內容給覆蓋掉,如何實現追加內容呢? 

1.1.覆蓋寫入

2.追加寫入

用戶的管理

1.系統爲什麼要有用戶

用戶:系統底層的安全設定(限制權利)

  • 舉例:

        你的杯子你自己可以使用,你的家人可以使用,但是外人不可以使用,因爲你和你的家人有使用你的杯子的權利,外人沒有是用你的杯子的權利。

系統爲什麼要有用戶態和內核態

在CPU的所有指令中,有一些指令是非常危險的,如果錯用,將導致整個系統崩潰。比如:清內存、設置時鐘等。如果所有的程序都能使用這些指令,那麼你的系統一天死機n回就不足爲奇了。所以,CPU將指令分爲特權指令和非特權指令,對於那些危險的指令,只允許操作系統及其相關模塊使用,普通的應用程序只能使用那些不會造成災難的指令。Intel的CPU將特權級別分爲4個級別:RING0,RING1,RING2,RING3。

    linux的內核是一個有機的整體。每一個用戶進程運行時都好像有一份內核的拷貝,每當用戶進程使用系統調用時,都自動地將運行模式從用戶級轉爲內核級,此時進程在內核的地址空間中運行。

    當一個任務(進程)執行系統調用而陷入內核代碼中執行時,我們就稱進程處於內核運行態(或簡稱爲內核態)。此時處理器處於特權級最高的(0級)內核代碼中執行。當進程處於內核態時,執行的內核代碼會使用當前進程的內核棧。每個進程都有自己的內核棧。當進程在執行用戶自己的代碼時,則稱其處於用戶運行態(用戶態)。即此時處理器在特權級最低的(3級)用戶代碼中運行。當正在執行用戶程序而突然被中斷程序中斷時,此時用戶程序也可以象徵性地稱爲處於進程的內核態。因爲中斷處理程序將使用當前進程的內核棧。這與處於內核態的進程的狀態有些類似。

    內核態與用戶態是操作系統的兩種運行級別,跟intel cpu沒有必然的聯繫, 如上所提到的intel cpu提供Ring0-Ring3四種級別的運行模式,Ring0級別最高,Ring3最低。Linux使用了Ring3級別運行用戶態,Ring0作爲 內核態,沒有使用Ring1和Ring2。Ring3狀態不能訪問Ring0的地址空間,包括代碼和數據。Linux進程的4GB地址空間,3G-4G部 分大家是共享的,是內核態的地址空間,這裏存放在整個內核的代碼和所有的內核模塊,以及內核所維護的數據。用戶運行一個程序,該程序所創建的進程開始是運 行在用戶態的,如果要執行文件操作,網絡數據發送等操作,必須通過write,send等系統調用,這些系統調用會調用內核中的代碼來完成操作,這時,必 須切換到Ring0,然後進入3GB-4GB中的內核地址空間去執行這些代碼完成操作,完成後,切換回Ring3,回到用戶態。這樣,用戶態的程序就不能 隨意操作內核地址空間,具有一定的安全保護作用。

     處理器總處於以下狀態中的一種:

1、內核態,運行於進程上下文,內核代表進程運行於內核空間;

2、內核態,運行於中斷上下文,內核代表硬件運行於內核空間;

3、用戶態,運行於用戶空間。

 

從用戶空間到內核空間有兩種觸發手段:

1.用戶空間的應用程序,通過系統調用,進入內核空間。這個時候用戶空間的進程要傳遞很多變量、參數的值給內核,內核態運行的時候也要保存用戶進程的一些寄存器值、變量等。所謂的“進程上下文”,可以看作是用戶進程傳遞給內核的這些參數以及內核要保存的那一整套的變量和寄存器值和當時的環境等。

2.硬件通過觸發信號,導致內核調用中斷處理程序,進入內核空間。這個過程中,硬件的一些變量和參數也要傳遞給內核,內核通過這些參數進行中斷處理。所謂的“中斷上下文”,其實也可以看作就是硬件傳遞過來的這些參數和內核需要保存的一些其他環境(主要是當前被打斷執行的進程環境)。

   一個程序我們可以從兩種角度去分析。其一就是它的靜態結構,其二就是動態過程。下圖表示了用戶態和內核態直接的關係(靜態的角度來觀察程序)

組用來共享權利的
用戶是用來限制權利的
組分爲可以決定的組(附加組)和不能決定的組(初始組)

2.用戶存在的形態(組)

組是用來共享權利的。

  • 自己能決定的組:   附加組(舉例:你自己可以決定去認陌生人爲乾爹,並且認的乾爹可以不止一個)。
  • 自己不能決定的組: 初始組(舉例:你自己不能決定自己出生在什麼家庭,這個是天生的,是與生俱來的)。 

3.用戶配置文件

/etc/password            用戶信息文件
用戶名稱:密碼:用戶的id:用戶的初始組id::用戶家目錄:用戶默認所使用的shell


/etc/group


組名稱:組密碼:組id:附加組所擁有的用戶
/home/username            用戶家目錄


/etc/skel.*                用戶骨文件(用戶環境配置的模板,在用戶建立的時候會自動地被複制到用戶的家目錄)

4.用戶的查看

whoami                    查看當前用戶的名稱


id                         查看用戶的id信息


id          -u             username        查看用戶的uid


id          -G            username        查看用戶所屬的所有組(初始組和附加組)的id


id          -n             username        以名稱顯示信息

-g或--group  顯示用戶所屬羣組的ID。


-G或--groups  顯示用戶所屬羣組或附加羣組的ID。


-u或--user  顯示用戶ID。


-help  顯示幫助。

-version  顯示版本信息。

5.用戶的建立及刪除

watch命令以週期性的方式執行給定的指令,指令輸出以全屏方式顯示。watch是一個非常實用的命令,基本所有的Linux發行版都帶有這個小工具,如同名字一樣,watch可以幫你監測一個命令的運行結果,省得你一遍遍的手動運行。

watch -n 1 'tail -n 5 /etc/passwd /etc/group;echo====;ls -l /home'

用此命令來監控

/etc/login.defs            在此文件中可以設置用戶的默認信息

useradd        username    使用默認規則建立用戶(規則參看/etc/login.defs)


useradd -u  username     指定用戶的uid


useradd -g  username    指定用戶的初始組id


useradd -G  username    指定用戶的附加組


useradd -c  username    指定用戶的說明文字


useradd -d  username    指定用戶的家目錄


useradd -s  username    指定用戶的shell(系統可以用)

補充:如何快速在linux上查看shell類型

1.查看當前系統所有可登錄的shell類型

 要查看當前系統中所有可登錄shell的類型,在/etc/shells配置文件中記錄了用戶可以登錄的shell的具體路徑,因此查看這個文件的內容,即可知道當前系統中所支持的所有shell類型。

2.查看某個用戶的shell類型

 

 要查看某個用戶的Shell類型,可以在/etc/passwd文件的最後字段查看到某個特定用戶的登錄Shell類型。以root爲例,執行 cat /etc/passwd | grep ^root 最後一個:號字段顯示的即爲root用戶的登錄shell類型,爲bash,如下圖所示 。

3、查看正在運行的shell類型

(1)要查看當前運行shell的類型,有很多種方法。首先,可以通過$0這個變量來獲取當前運行的shell類型。

(2)其次,也可以通過$$這個變量來獲取當前運行的shell進程號(PID),然後通過ps命令的-p參數來反向查詢正在運行的shell類型。

userdel        username    刪除用戶身份

此命令會導致刪除不徹底,要想徹底刪除還需要在home目錄下刪除username目錄
userdel -r     username    刪除用戶身份及用戶的系統配置文件


groupadd    groupname    使用默認規則創建組


groupadd -g groupname      指定組id


groupdel     groupname    刪除組

6.用戶管理

usermod    
usermod           -l      新用戶名稱     舊用戶名稱


usermod          -u             用戶的uid


usermod          -g             更改初始組id


usermod          -G            更改附加組


usermod         -aG           增加附加組(會在當前用戶所擁有的附加組的基礎之上繼續增加其附加組)


usermod          -c             更改用戶說明


usermod          -d             更改用戶的家目錄指向


usermod          -md          更改用戶的家目錄指向並重命名家目錄
usermod          -s              更改用戶的shell

7.用戶切換
su - username              切換用戶(高級用戶切換到低級用戶是不需要密碼)
                                     低級用戶切換到高級用戶或者切換到平級用戶是需要後者密碼


注意:
(1).當需要切換用戶時需要及時退出當前用戶,這樣才能正常切換。


(2).su - 表示切換用戶身份以及用戶環境(如果沒有"-"則只是切換了用戶的身份,並沒有切換用戶環境)

8.用戶的認證信息
/etc/shadow                用戶的認證信息


用戶名稱:
用戶密碼: 
    加密方式:md5  sha512
    passwd username(只有超級用戶才能夠執行) 
    passwd             普通用戶修改密碼
    passwd -l          兩個!!強度高) 凍結賬號


    passwd -u                 解鎖


    passwd -d                 清空密碼
    usermod -L                 凍結賬戶


    usermod -U                 解鎖


密碼最後一次修改距離1970年1月1日的時間:      當此位數字爲0時登錄用戶必須先修改密碼才能登錄 


補充一點 爲何密碼最後一次修改所距離的時間爲1970年1月1日而不是其他時間

這個問題說來話長。 程序語言受電腦系統影響,而現代電腦系統都受到Unix系統的廣泛影響,而1970年1月1日這個時間正是Unix系統的起始時間(epoch·time)。

當年的電腦需要一個可靠的外部時鐘同步源,因此早期的Unix系統用一個32位字長表示時間,以1/60秒,即1Hz爲時間間隔和外部時間源同步(這道不完全是由於老美的電網頻率是60Hz的緣故,當時的系統主板的晶振就是1Hz)。 結果這個時間所表示的跨度只有大約829天(約2.5年),顯然不夠用,因此需要一個原始的起始(〔紀〕··〔元〕)時間,由於Unix系統源自上時間69年代,第一個正式版本於1970年首次運行在PDP-11上,1971年11月UNIX Programmer's Manual(Unix程序員手冊)首次公佈,這個手冊裏面提及了起始時間,將它定義爲【1971】年1月1日。-- 手冊也承認,該起始時間大約每2.5年就要重新修正一次。

之後系統時間同步間隔被修訂爲1秒,這樣32位就可表述約136年的跨度,也正是這個期間(具體年份不祥),起始時間被修訂爲1970.1.1 (Unix開發者認爲把之前的1971.1.1取整進位到最臨近的年代起始(以每10年一個斷代算),要比1971這個有點不倫不類的時間好),因此從這以後,Unix一直沿用了1970.1.1這個起始時間,而相關的程序也相應的沿用了這個時間,而深受Unix影響的後續操作系統們,如:OS/2, Windows, Mactonish, Linux。。。。都沿用了這個{事實標準}。



密碼最短有效期(密碼最少使用的天數):
                chage -m 1 westos
                passwd -n 3 westos


密碼最長有效期(密碼最長使用的天數):
                chage -M 30 westos
                passwd -x 40 westos


密碼過期警告:    (距離過期日期還有多少天就開始警告)
                chage -W 2 westos(距離過期日期還有2天就開始警告)
                passwd -w 3 westos


密碼非活躍期:(在有效期內成爲活躍期,過了有效期叫做非活躍期,在非活躍期內雖然超過了有效期但是還可以正常使用,但是會有提示,可是如果連非活躍期都過了則會禁止使用當前的賬戶,賬戶被凍結)
                chage -I 2 westos


                passwd -i 0 westos


賬號到期日:
                chage -E "2018-11-11" westos


未設定,用戶自定義

9.用戶權利的下放(升級)(用戶享有更多的權力)
1.配置文件
/etc/sudoers


2.配置命令
visudo            此命令會自動進行語法檢測

sudo” 是Unix/Linux平臺上的一個非常有用的工具,允許爲非根用戶賦予一些合理的“權利”,讓他們執行一些只有根用戶或特許用戶才能完成的任務,從而減少根用戶的登陸次數和管理時間同時也提高了系統安全性。

  • sudo的目的:爲非根用戶授予根用戶的權限;
  • 配置文件:/etc/sudoers
  • visudo命令編輯修改/etc/sudoers配置文件

用戶名稱 主機名稱=(執行程序的身份) 命令                                當執行命令時需要用戶驗證
linux11 dns-server.example=(root) /usr/sbin.useradd
用戶名稱 主機名稱=(執行程序的身份) NOPASSWD: 命令1,命令2            當執行命令時不需要用戶驗證
linux11 dns-server.example=(root) /usr/sbin.useradd,/usr/sbin/userdel

1.先切換爲普通用戶

2.在這個普通用戶下創建一個新的用戶,發現會報錯(Permission denied)  訪問權限不夠,訪問被拒絕

3.此時需要切換到超級用戶root並更改/etc/sudoers中的配置,輸入visudo命令,在瀏覽模式輸入":100",在這裏進行配置

4.使用sudo  useradd username命令創建用戶  此時會讓輸入當前用戶的密碼,如果我不想輸入密碼的話就在/etc/sudoers文件中剛纔配置的地方補充"NOPASSWD"就可以了

 

 

 

 

 

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