linux 基本命令学习笔记
生活随笔
收集整理的這篇文章主要介紹了
linux 基本命令学习笔记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
★ 常用命令
? ? 1、命令格式
? ? ? ? 命令(command)+空格+選項(options)+空格+參數(argumengts)
? ? ? ? 選項:分為短選項和長選項。短選項可以組合,組合的先后順序一般沒區別,特殊情況下有區別,長選項一般不能組合。某些選項也可以帶自己的參數。例如:ls -a -l = ls -al = ls -la。
? ? ? ? 參數:命令的作用對象。
? ? ? ? 小技巧:
? ? ? ? ctrl+c:1、終止當前已開始執行的命令;2、取消在命令提示符下輸入的所有內容(不必一個一個刪了,更快捷)。
? ? 2、常用命令
? ? ? ? su(switch user):切換用戶。
? ? ? ? ? ? 格式:su 用戶名
? ? ? ? passwd:更改用戶名
? ? ? ? pwd(Printing Working Directory):顯示當前的路徑
? ? ? ? ls(list):顯示當前目錄下的文件(不加選項則只顯示文件名)
? ? ? ? ? ? -l:用長格式顯示當前目錄下的所有文件,或用長格式顯示指定的單個文件。
? ? ? ? ? ? ? ? 顯示內容解釋(從左往右):
? ? ? ? ? ? ? ? 1、10位字符
? ? ? ? ? ? ? ? ? ? 10位的第1位:文件類型
? ? ? ? ? ? ? ? ? ? ? ? -:普通文件
? ? ? ? ? ? ? ? ? ? ? ? d:目錄文件
? ? ? ? ? ? ? ? ? ? ? ? b:塊設備文件(block)
? ? ? ? ? ? ? ? ? ? ? ? c:字符設備文件(character)
? ? ? ? ? ? ? ? ? ? ? ? l:符號鏈接文件(symbolic link file)
? ? ? ? ? ? ? ? ? ? ? ? p:命令管道文件(pipe)
? ? ? ? ? ? ? ? ? ? ? ? s:套接字文件(socket)
? ? ? ? ? ? ? ? ? ? 10位的后9位:文件權限。每3位是1組,每組:rwx(讀,寫,執行),沒有相應功能則用-表示,例如:rw-(能讀,能寫,不能執行)
? ? ? ? ? ? ? ? 2、1位數字:文件硬鏈接的次數。
? ? ? ? ? ? ? ? 3、文件的屬主。root等。
? ? ? ? ? ? ? ? 4、文件的屬組。
? ? ? ? ? ? ? ? 5、文件大小。默認單位是字節。
? ? ? ? ? ? ? ? 6、時間戳(timestamp)之最近一次被修改的時間。
? ? ? ? ? ? ? ? ? ? 每個文件都有3個時間戳,分別表示文件最近一次被訪問(access)、被修改(modify)、被改變(change)的時間。修改是指修改文件內容,改變是指改變文件元數據(即文件的名字、類型等屬性)。
? ? ? ? ? ? ? ? 7、文件名
? ? ? ? ? ? -h:文件大小做單位轉換后顯示
? ? ? ? ? ? -a:顯示包括隱藏文件在內的所有文件
? ? ? ? ? ? ? ? Linux中以.開頭的文件是隱藏文件,只有一個.表示當前目錄,只有兩個.表示上一級目錄。所以,ls . = ls;ls .. 是顯示上一級目錄的文件。
? ? ? ? ? ? -A:顯示包括隱藏文件在內的所有文件(不包含.和..)
? ? ? ? ? ? -d:顯示目錄自身屬性(而不是顯示目錄下文件的屬性)
? ? ? ? ? ? -i:顯示文件的索引號
? ? ? ? ? ? ? ? 每個文件都有一個索引號(index node,縮寫為inode),相當于文件的身份證。
? ? ? ? ? ? -r:逆序顯示文件
? ? ? ? ? ? -R:遞歸(recursive)顯示文件,即目錄中的文件、目錄全都顯示。
? ? ? ? ? ? /:顯示根目錄下的所有目錄
? ? ? ? cd(change directory):切換目錄
? ? ? ? ? ? cd:回到用戶的主目錄(主目錄,又叫家目錄,是用戶登錄時默認所在的目錄)。
? ? ? ? ? ? cd ~student:回到student用戶的家目錄(只有管理員用戶可以使用此命令)
? ? ? ? ? ? cd /root:回到root目錄
? ? ? ? ? ? cd -:回到上一次所在的目錄。(連續使用此命令即可在當前目錄和上一次所在的目錄之間來回切換)
? ? ? ? type:顯示指定命令屬于哪種命令類型(命令類型分為兩種:內置命令、外部命令。內置命令是指shell自帶的命令,外部命令指在某個路徑下有對應的可執行文件的命令。)
? ? ? ? ? ? 例如:type ls
? ? printenv:顯示環境變量信息
? ? hash:顯示緩存信息
? ? ? ? (每個命令執行時,Linux會在環境變量中PATH指定的目錄下尋找這個命令的可執行文件,執行完后會把這個命令的路徑存在緩存里,下次再執行這個命令時就不再去環境變量中PATH里去找了,這樣可以提高執行速度。hash命令可以顯示執行過所有命令的次數)
? ? date:顯示、修改當前系統時間
? ? ? ? date 0226104913.30 (將系統時間修改為2月26號10點49分2013年30秒,其中年和秒如果無需修改就可以省略,秒如果要修改前邊要加.)
? ? ? ? date +%F:以年-月-日的格式顯示當前日期
? ? ? ? date +%F-%H-%M-%S:以年-月-日-時-分-秒的格式顯示當前時間
? ? clock:顯示當前硬件時間(=hwclock)
? ? ? ? hwclock -s:將系統時間修正為硬件時間
? ? ? ? hwclock -w:將硬件時間修正為系統時間
? ? ? ? (關于時間:主板上依靠紐扣電池驅動的計時器的時間叫硬件時間,Linux開機后系統會自動讀取硬件時間來作為當前的時間,之后就用軟件自己計時了,軟件自己的計時就叫系統時間,一般來說硬件時間比系統時間更準確)
? ? help:獲取內部命令的使用幫助
? ? ? ? 例如:help cd
? ? --help:獲取外部命令的使用幫助
? ? ? ? 例如:ls --help
? ? man(manual):在命令手冊中查看某個命令
? ? ? ? 例如:man ls
? ? ? ? 查詢完畢后按q鍵可以退出man命令
? ? ? ? (關于命令手冊:命令手冊中對內部命令、外部命令都有說明,而且比help更詳細。但要注意,對于內部命令,man的結果是對這個內部命令所屬的shell的說明,所以,內部命令最好用help獲取幫助。命令手冊的內容是分章節的,可以只查看指定章節的內容,例如:man 2 ls。命令手冊各章節內容:1、用戶命令。2、系統調用。3、庫調用。4、特殊文件(設備文件)。5、文件格式(配置文件的語法)。6、游戲。7、雜項。8、管理命令。命令手冊中出現的[]表示可以省略的內容,<>表示必須要有的內容,用|隔開表示多選一,...表示以此類推。查看man內容時,向后翻一屏:空格鍵,向前翻一屏:b,向后翻一行:下箭頭或者回車鍵,向前翻一行:上箭頭或者k。按/加查找內容即可查找關鍵字,用上下箭頭查看)
? ? whatis:查看命令所在命令手冊的哪些章節
? ? ? ? 例如:whatis read
? ? info:查看命令的在線文檔(發展史等信息)
? ? ? ? 例如:info ls
? ? which:查看命令對應文件的存放路徑
? ? cal:日歷
? ? ? ? 例如:cal 2016(2016年的年歷);cal 5 2016(2016年5月的日歷)
? ? echo:顯示指定的內容(末尾默認有換行符)
? ? ? ? 例如:echo “the year is 2016,today is monday”(顯示“”中的這句話)
? ? ? ? echo -e “the year is 2016,\ntoday is monday”(從,開始換行顯示這句話,-e的作用是啟用轉意符\n)
? ? ? ? echo -n “the year is 2016,today is monday”(顯示這句話并去掉這句話后邊的換行符)
? ? printf:顯示指定內容(末尾默認無換行符)
? ? ? ? 例如:printf “the year is 2016.\n”(\n是手動添加的換行符)
? ? ? ? printf “the year is 2016,\ntoday is monday.\n”(分兩行顯示這句話)
? ??
★ 根文件系統詳解
? ? Linux根目錄下的目錄有:
? ? 1、/boot:系統啟動相關的文件
? ? 2、/dev:設備文件(屬于特殊文件)
? ? ? ? 設備分為兩類:塊設備(隨機訪問的設備);字符設備(線性訪問,以字符為單位)
? ? ? ? 設備文件是特殊文件,文件名顯示背景為黑色字符為黃色,沒有大小,直接存儲為元數據,只作為設備的訪問入口。在顯示大小的位置顯示的是用逗號隔開的兩個數字,分別是主設備號(major)和次設備號(minor)。
? ? 3、/etc:配置文件
? ? 4、/home:用戶的家目錄,每個用戶的家目錄默認為/home/用戶名。但是root用戶的家目錄例外,在根目錄下的/root。
? ? 5、/lib:庫文件和內核模塊文件
? ? ? ? /lib/modules:內核模塊文件
? ? ? ? 庫文件分為兩類:靜態庫和動態庫。靜態庫是嵌在程序內部的庫,程序直接復制到其他主機上即可運行,但是當許多使用靜態庫的程序運行時會把許多重復的庫復制進內存,占用內存空間而且效率低;動態庫本身存放在主機磁盤上,并不在程序內部,程序運行時通過鏈接來將動態庫復制到內存,多個程序可在內存中共享使用這個庫,節省內存空間,但是程序直接復制到其他主機后不一定能運行,因為其他主機不一定有這個程序所需的庫。
? ? 6、/media:掛載點目錄,用來掛載移動設備
? ? 7、/mnt:掛載點目錄,用來掛載額外的臨時文件系統
? ? ? ? 掛載:新添加的設備必須關聯到Linux文件系統的某個路徑節點上才可以訪問,這個關聯過程就叫掛載。
? ? 8、/opt:可選目錄,以前用來安裝第三方軟件
? ? 9、/proc:偽文件系統,系統運行時里面的文件都是內核映射文件,記錄有系統運行狀態信息等,系統關閉后這些文件全都消失。系統性能監控和系統性能調優都和這個目錄有關。
? ? 10、/sys:偽文件系統,系統運行時里面的文件都是和硬件屬性相關的映射文件,系統關閉后這些文件全都消失。
? ? 11、/tem:臨時文件,一般每月清除一次。
? ? 12、/var:可變化的文件,系統剛運行時這個目錄中的文件很少,隨著系統運行,這個目錄中文件越來越多
? ? 13、/bin:可執行文件。用戶命令。
? ? 14、/sbin:可執行文件。管理命令。
? ? 15、/usr:全局共享只讀文件
? ? ? ? /usr/bin
? ? ? ? /usr/sbin
? ? ? ? /usr/lib
? ? ? ? /usr/local:用于安裝第三方軟件
? ? ? ? /usr/local/bin
? ? ? ? /usr/local/sbin
? ? ? ? /usr/local/lib
? ? ? ? /usr/local下的這些目錄是用來存放第三方軟件需要的一些東西。
★ 目錄管理
? ? ls
? ? cd
? ? pwd
? ? mkdir(make directory):創建空目錄
? ? ? ? 注意:mkdir /root/x/y/z 這個命令的含義是在/root/x/y創建Z目錄,所以必須要確保x和y目錄是存在的,這里使用的是絕對路徑(絕對路徑以/開始),也可用相對路徑(相對路徑以./開始),假設當前目錄是/root/x,在當前目錄下創建y目錄:mkdir y,然后在y目錄下再創建z目錄:mkdir y/z(本該是mkdir ./y/z的,只是./可以省略而已)
? ? ? ? -p:創建指定路徑上全部缺少的目錄
? ? ? ? -v:查看創建過程
? ? ? ? ? ? 例如1:mkdir -pv /root/x/y/z (在root目錄下依次創建嵌套的x、y、z目錄)
? ? ? ? {}用法舉例(這些花括號的用法屬于bash特性中的命令行展開功能中的花括號展開功能):
? ? ? ? ? ? 例如2:mkdir -pv /mnt/test/{x/m,y} (在mnt下建立test目錄,在test目錄下建立x目錄和y目錄,在x目錄下建立m目錄。)
? ? ? ? ? ? 例如3:mkdir -pv /mnt/test/{x,y}/m (在mnt下建立test目錄,在test目錄下建立x目錄和y目錄,在x目錄下建立m目錄,在y目錄下建立m目錄)
? ? ? ? ? ? 例如4:mkdir -pv /mnt/test2/{a,b}{c,d}(在mnt下建立test2目錄,在test2目錄下建立ac目錄、ad目錄、bc目錄、bd目錄)
? ? ? ? ? ? 例如5:mkdir -pv /mnt/test2/{a,b}_{c,d}(在mnt下建立test2目錄,在test2目錄下建立a_c目錄、a_d目錄、b_c目錄、b_d目錄)
? ? rmdir(remove directory):刪除空目錄
? ? ? ? -p:刪除沒有分支的一串空目錄
? ? ? ? ? ? 例如:假設已經有/root/x/y/z目錄結構,而且xyz這3個目錄都是空目錄,則可以rmdir -p /root/x(刪除xyz目錄)
★ 文件管理
? ? 文件命名規則:
? ? ? ? 1、長度不能超過255個字符
? ? ? ? 2、不能使用/
? ? ? ? 3、嚴格區分大小寫
? ? touch:創建文件/修改文件的時間戳
? ? ? ? 例如1:touch c(在當前目錄下創建一個名稱是c的文件)
? ? ? ? 例如2:touch ‘a b’(在當前目錄下創建一個名稱是“a b”的文件,Linux系統允許空格字符作為文件名的組成部分)
? ? ? ? -c:只修改文件的時間戳而不創建文件
? ? ? ? ? ? 例如:touch -c c(修改文件c的時間戳,如果c不存在也不再創建c)
? ? ? ? -a:只修改文件的訪問時間
? ? ? ? ? ? 例如:touch -a c(修改文件c的訪問時間為當前時間,修改時間不變,因為文件的訪問時間屬于文件屬性,所以c的改變時間也同時變為當前時間)
? ? ? ? -m:只修改文件的修改時間
? ? ? ? ? ? 例如:touch -m c(修改文件c的修改時間為當前時間,訪問時間不變,因為文件的修改時間屬于文件屬性,所以c的改變時間也同時變為當前時間)
? ? ? ? -t:修改文件的時間戳為指定時間
? ? ? ? ? ? 例如:touch -m -t 201212131415 c(修改文件c的修改時間為2012年12月13號14點15分,c的訪問時間不變,c的改變時間變為當前時間)
? ? ? ? (注意:touch一個文件后,這個文件的改變時間一定會變為當前時間,這是不能由任何命令控制的)
? ? stat:查看文件的狀態信息(名稱、大小、時間戳等)
? ? file:查看文件的內容類型
? ? nano:編輯文本文件內容(其實nano就是一個文本編輯器)
? ? ? ? 例如:nano hello(編輯名為hello的文本文件,如果該文件不存在,就在當前目錄下新建一個叫hello的文件。下方有操作提示,其中的^表示ctrl鍵)
? ? rm(remove):刪除文件
? ? ? ? 例如:rm hello(刪除叫hello的文件,如果是以管理員身份刪除,會有確認提示,再打y、回車即可完成刪除,普通用戶刪除不會有確認提示)
? ? ? ? (注:有些命令是有別名的,比如rm就是rm -i的別名,原生態的rm命令是不會提示刪除確認的,rm -i是帶刪除確認的命令,后來人們給rm -i起了個別名叫rm,所以現在打rm命令就是帶刪除確認的了,如果想使用原生態的rm命令,就需要在rm前加\,例如:\rm a(刪除a文件,且不帶刪除確認)。同樣,ls也是ls --color=tty的別名,所以ls查詢結果中的目錄和特殊文件會有顏色區分,原生態的ls命令是沒有任何顏色區分的。查看一個命令是不是別名,使用type即可,例如:type ls。別名機制是紅帽系統的特色)
? ? ? ? -f(force):強行刪除(不帶刪除確認提示)
? ? ? ? -r(recursive):遞歸刪除目錄(即刪除該目錄及其中的所有內容)
? ? ? ? ? ? 例如:rm -rf /mnt/test2(強行刪除mnt目錄下的test2目錄,且不帶確認提示)
? ? ? ? ? ? 注意:rm -rf /(強行刪除Linux的根目錄,這是最危險的操作,一旦刪除,Linux系統就不復存在了,相當于自殺。)
? ? cp(copy):復制文件、目錄
? ? ? ? 例如1:cp /etc/passwd /tem/(將etc目錄下的passwd文件復制到tem目錄下,并保持文件名不變。如果tem目錄不存在,則cp操作失敗)
? ? ? ? 例如2:cp /etc/passwd /tem/test(將etc目錄下的passwd文件復制到/tem/test目錄下,并保持文件名不變(如果test是目錄);將etc目錄下的passwd文件復制到tem目錄下并覆蓋test文件(如果test是文件)。覆蓋的意思是先刪除test文件,再把passwd文件復制到test所在的目錄并將passwd文件重命名為test)
? ? ? ? 例如3:cp /etc/a /etc/b /etc/c /tem/(將etc目錄下的a、b、c三個文件復制到tem目錄下,并全都保持文件名不變)
? ? ? ? -r:遞歸復制一個目錄(即復制這個目錄下的所有內容)
? ? ? ? ? ? 例如:cp -r /etc/ /tem/a(將etc目錄遞歸復制到/tem/a/目錄下。如果a目錄存在,就將etc目錄復制到a目錄下;如果a目錄不存在,就在將etc目錄復制到tem目錄下并重命名為a;如果a是個文件,則會出錯)
? ? ? ? ? ? 總結:cp的格式是:cp 源 目的地。當源是文件時,目的地可以是目錄和文件,如果目的地是目錄,則要求該目錄必須存在,否則操作失敗,如果目的地是文件,則會覆蓋目的地文件;當源是目錄是,目的地只能是目錄,如果目的地目錄存在,則會將源目錄復制到目的地目錄中,如果目的地目錄不存在,則會將源目錄復制到目的地目錄所在的目錄中并將源目錄重命名為目的地目錄。如果源是多個文件或目錄,則可以使用花括號展開機制,例如:cp /etc/{a,b,c/d} /tmp(將etc目錄下的a、b文件以及etc/c下的d文件復制到tmp目錄下)。小技巧:輸入文件名后按一下tab鍵,如果自動補上/,就說明這個文件名是個目錄。
? ? ? ? -f:強行覆蓋(覆蓋目的地文件前不會有確認提示,且如果目的地文件不能打開,則先刪掉再復制)
? ? ? ? -p:保留文件的屬主、屬組、時間戳(一般復制文件之后,這個文件的屬主、屬組、時間戳都會改變,誰復制的屬主就改成誰)
? ? ? ? -a:保留文件的所有屬性(比-p保留的更多,可以認為保留了源文件的原貌,這個操作通常用來備份文件,所以稱為歸檔復制)
? ? ? ? -P:保持鏈接文件依然是鏈接(cp操作如果復制的是一個鏈接文件,則默認會把鏈接文件指向的文件復制過去,而不是復制鏈接文件本身)
? ? ? ? -L:復制鏈接文件本身(cp -L = cp)
? ? mv(move):剪切文件、目錄
? ? ? ? 例如:mv /tmp/a /var/abc(將tmp目錄下的a文件剪切到/var/abc目錄下(如果abc是目錄);將tmp目錄下的a文件剪切到var目錄下并重命名為abc(如果abc是文件且不存在);)
? ? ? ? 注意:mv的源既可以是文件也可以是目錄,且不用加任何選項(這一點和cp不同)
? ? ? ? 總結:mv的格式是:mv 源目的地。如果源是目錄,則要求目的地必須也是目錄,如果目的地目錄存在,就把源目錄復制到目的地目錄下,如果目的地目錄不存在,就把源目錄重命名為目的地目錄并剪切到目的地目錄所在的目錄下;如果源是文件,則目的地可以是文件或者目錄,如果目的地是已有文件,則把源文件剪切過去并覆蓋目的地文件,如果目的地文件不存在,則把源文件剪切過去并重命名為目的地文件。如果目的地是目錄,則把源文件剪切到目的地目錄中。
? ? ? ? 小技巧:mv a b(把當前目錄下的a文件、目錄重命名為b)
? ? ? ? -t(target):目的地提前
? ? ? ? ? ? 例如:mv -t /tem a(把當前目錄下的a文件剪切到tem目錄下)
? ? install:復制文件或者創建目錄
? ? ? ? 例如1:install /etc/a /var(把etc目錄下的a文件復制到var目錄下)
? ? ? ? 例如2:install -d /tmp/{a,b}(在tmp目錄下新建a目錄和b目錄)(install -d = mkdir)
★ 文本查看
? ? cat:連接并顯示文本文件
? ? ? ? 例如:cat /tem/a /var/b(顯示tem目錄下的a文件和var目錄下的b文件)
? ? ? ? -n:給顯示的內容加行號
? ? ? ? -E:顯示每行的行結束符$
? ? ? ? ? ? 關于行結束符:行結束符標志著一行的結束,在windows系統中行結束符是$加回車,在Linux系統中是$。所以,在Linux中編輯的文本在windows中打開就會發現所有內容都在一行中,而在windows中編輯的文本在Linux中查看就有可能出亂碼。
? ? ? ? -A:顯示所有內容(包含行結束符、回車符等非打印字符)
? ? tac:連接并從后往前顯示文本文件(與cat顯示順序相反)
? ? ? ? cat的缺陷:瞬間把所有內容顯示完,雖然我們可以使用shift+page up/page down在Linux終端(不是使用第三方軟件連入Linux)查看內容時的翻屏操作,但是因為緩存的內容有限,所以只能往前翻有限的屏數,如果信息量太大(如:/etc/rc.d/rc.sysinit),則有可能看不到全部的內容。
? ? more:分屏顯示文本文件
? ? ? ? 例如:more /etc/rc.d/rc.sysinit
? ? ? ? 使用空格鍵向后翻一屏,b鍵向前翻一屏,回車鍵向后翻一行(不支持向前翻一行),但是一旦翻到文件尾部就自動退出了。
? ? less:分屏顯示文本文件(最常用)
? ? ? ? 例如:less /etc/rc.d/rc.sysinit
? ? ? ? 使用空格鍵向后翻一屏,b鍵向前翻一屏,回車鍵或下箭頭向后翻一行,k鍵或上箭頭向前翻一行,q鍵退出查看,使用方法同man命令(其實man命令執行的就是less命令)
? ? head:查看文本文件前n行
? ? ? ? -n:指定顯示的行數
? ? ? ? ? ? 例如:head -n2 /etc/rc.d/rc.sysinit(顯示/etc/rc.d/rc.sysinit的前2行內容)
? ? tail:查看文本文件后n行
? ? ? ? -n:指定顯示的行數
? ? ? ? -f(follow):實時顯示文件后n行內容,ctrl+c退出(文件后n行內容一旦改變立即顯示,這個命令很有用,尤其在監控日志文件時)
★ 文本處理
? ? (以下命令并不實際更改文本內容,只是控制顯示方式而已)
? ? cut:切割文本文件并顯示
? ? ? ? -d:指定字段分隔符(不指定的話就默認一個空格)
? ? ? ? -f:指定要顯示的字段
? ? ? ? ? ? 例如:cut -d: -f1,7 /etc/passwd(切割顯示/etc/passwd文件,:為字段分隔符,顯示第1和第7字段)(-f1-7就是顯示第1至7字段)
? ? join:合并文本文件并顯示(用的較少,不再細解)
? ? sort:排序顯示
? ? ? ? 例如:sort sort.test(按照每行首字符在asc碼表中的順序由小到大顯示sort.test文件)
? ? ? ? -r:有大到小顯示
? ? ? ? -n:按數值排序(不再按照asc碼表順序排序)
? ? ? ? ? ? 例如:sort -n -r sort.test(按照數值由大到小的順序顯示sort.test文件)
? ? ? ? -t:指定字段分隔符
? ? ? ? -k:指定以哪個字段為標準進行排序
? ? ? ? -u:排重顯示
? ? ? ? ? ? 例如:sort -t:-k3 -n -r -u /etc/passed(以:為分隔符,以第3字段為標準按照數值由大到小順序對/etc/passed文件進行排序并排重顯示)
? ? ? ? -f:忽略字符大小寫
? ? uniq:忽略相鄰的重復行之后再顯示
? ? ? ? 例如:sort sort.test
? ? ? ? -d:只顯示相鄰的重復行(只顯示1行)
? ? ? ? -D:顯示相鄰的所有重復行(只要是相鄰的重復的行全都顯示出來)
? ? ? ? -c:顯示每一行及相鄰行重復的次數(重復行只顯示1行)
★ 文本統計
? ? wc(word count):統計文本文件的行數、單詞數、字節數
? ? ? ? -l:只顯示行數
? ? ? ? -w:只顯示單詞數
? ? ? ? -c:只顯示字節數
? ? ? ? -m:只顯示字符數
? ? ? ? -L:最長的一行有多少個字符
? ? ? ? (一個字節就是一個字符,因為一個字符就占用一個字節,1Byte。一個漢字、中文標點占用2字節)
★ 字符處理
? ? tr:轉換或刪除字符
? ? ? ? 例如1:tr ‘ab’ ‘AB’(把以后輸入字符中的所有a和b都轉成大寫)
? ? ? ? 例如2:tr ‘a-z’ ‘A-Z’ < /etc/passwd(把/etc/passwd這個文件中所有的小寫字母都轉成大寫)
? ? ? ? -d:刪除指定的字符
? ? ? ? ? ? 例如:tr -d ‘ab’ < /etc/passwd(把/etc/passwd這個文件中所有的a和b都刪除)
★ bash及其特性
? ? shell本身就是一個可執行程序,在shell中運行一次shell就打開了一個子shell,以此類推,執行一次exit就退出一層shell,以此類推。可以用pstree查看進程樹。
? ? ☆ bash特性:
? ? ? ? 1、命令歷史
? ? ? ? 2、命令補全
? ? ? ? 3、管道、重定向
? ? ? ? 4、命令別名
? ? ? ? 5、命令行編輯
? ? ? ? 6、命令行展開
? ? ? ? 7、文件名通配
? ? ? ? 8、變量
? ? ? ? 9、編程
? ? ☆ bash支持的3種引號:
? ? ? ? 反引號``:用于命令替換
? ? ? ? 雙引號"":弱引用,用于實現變量替換
? ? ? ? 單引號'':強引用,不完成變量替換
? ? ☆ bash特性學習:
? ? ? ? 1、命令行編輯
? ? ? ? 光標跳轉:
? ? ? ? ? ? ctrl+a 跳到命令行首
? ? ? ? ? ? ctrl+e 跳到命令行尾
? ? ? ? ? ? ctrl+u 刪除光標左側所有內容
? ? ? ? ? ? ctrl+k 刪除光標右側所有內容
? ? ? ? ? ? ctrl+左右箭頭 光標向左右跳轉一個單詞(只在圖形界面中打開shell時適用)
? ? ? ? ? ? ctrl+l 清屏
? ? ? ? 2、命令歷史
? ? ? ? bash會自動記錄執行過的命令,并保存在內存的緩沖區中,以后再輸入命令時可以使用上下箭頭尋找合適的歷史命令直接執行。當用戶退出時,該用戶的命令歷史會從內存中保存到該用戶家目錄中的一個叫bash history的隱藏文件中,所以當該用戶再次登錄時,以往的命令歷史還存在。
? ? ? ? history:查看命令歷史(這是一個bash內置的命令)
? ? ? ? ? ? -c:清空命令歷史
? ? ? ? ? ? -d:刪除指定的一個或多個命令記錄
? ? ? ? ? ? ? ? 例如1:history -d 500(刪除第500條命令記錄)
? ? ? ? ? ? ? ? 例如2:history -d 500 10(刪除從第500條開始的10條命令記錄)
? ? ? ? ? ? -w:將緩沖區中的命令歷史保存到歷史文件中
? ? ? ? 查看命令歷史緩沖區大小的方法:
? ? ? ? ? ? 1、環境變量中HISTSIZE:命令歷史緩沖區大小(默認是1000條)
? ? ? ? ? ? 2、用命令查看命令歷史緩沖區大小:echo $HISTSIZE
? ? ? ? 命令歷史的使用技巧:
? ? ? ? ? ? !n:執行命令歷史中第n條命令
? ? ? ? ? ? !!:執行上一條命令
? ? ? ? ? ? !string:執行命令歷史中最近一個以指定字符串開頭的命令
? ? ? ? ? ? ? ? 例如:!man(執行命令歷史中最近一個以man開頭的命令)
? ? ? ? ? ? 按一下ESC鍵,再按一下。鍵:引用上一次命令的最后一個字符串(alt+. 在本地窗口中也可以)
? ? ? ? 3、命令補全
? ? ? ? 輸入命令時,輸入到一半時,按一下tab鍵,就有可能補全剩余的命令。(在環境變量的設置中搜索,如果有唯一一個匹配的命令,就會補全)
? ? ? ? 輸入命令到一半時,如果想不起剩余的字母怎么拼寫,就按兩下tab鍵,會自動給出所有可能的命令。
? ? ? ? 同理還有路徑補全。
? ? ? ? 4、命令別名
? ? ? ? alias:給一個命令起別名(這個別名只在當前shell進程的生命周期內有效,而且對其他shell進程是無效的。如果想永久有效且對所有用戶有效,就必須在bash程序的配置文件中修改。)
? ? ? ? ? ? 例如1:alias cl=clear(執行以后,cl就相當于clear了)
? ? ? ? ? ? 例如2:alias head=‘head -n2 /etc/rc.d/rc.sysinit’(注意:中間有空格時要用單引號引起來)
? ? ? ? ? ? 例如3:alias(查看目前全部的命令別名)
? ? ? ? unalias:撤銷別名
? ? ? ? ? ? 例如:unalias cl(以前設置的alias cl=clear就失效了)
? ? ? ? 5、命令替換
? ? ? ? 把命令中某個子命令替換為其執行結果的過程,子命令需要用$()括起來,或者用反引號``引起來。(反引號就是~鍵的那個引號)
? ? ? ? ? ? 例如1:echo "The current directory is $(pwd)"(假設當前目錄是/root,則這個命令實際執行結果是"The current directory is /root")
? ? ? ? ? ? 例如2:touch ./file-$(date +%F-%H-%M-%S).txt(在當前目錄下創建一個名稱是當前時間的文件,時間格式是年-月-日-時-分-秒)
? ? ? ? ? ? 例如3:ls -l $(which useradd)(用長格式顯示useradd文件)
? ? ? ? 6、文件名通配(globbing)
? ? ? ? 命令行展開特性有3方面:波浪線展開、花括號展開、文件名展開(即文件名通配)
? ? ? ? 文件名通配通常使用3個符號:
? ? ? ? ? ? *:匹配任意長度的任意字符(包括空白字符)
? ? ? ? ? ? ? ? 例如:ls a*3(顯示文件名是以a開頭且以3結尾的文件)
? ? ? ? ? ? ?:匹配任意單個字符(包括空白字符)
? ? ? ? ? ? ? ? 例如:ls a?3(顯示文件名是3個字符且以a開頭、以3結尾的文件)
? ? ? ? ? ? []:匹配指定范圍內的任意單個字符
? ? ? ? ? ? ? ? 例如1:ls [a-zA-Z]*[0-9a-zA-Z](顯示文件名以字母開頭且以數字或字母結尾的文件)
? ? ? ? ? ? ? ? 例如2:ls [abc]*[A-Z](顯示文件名以abc三個字母其中之一開頭且以大寫字母結尾的文件)
? ? ? ? ? ? ? ? 例如3:ls *[0-9]*(顯示文件名中包含有數字的文件)
? ? ? ? ? ? [^]:匹配指定范圍之外的任意單個字符
? ? ? ? ? ? ? ? 例如:ls [^0-9]*(顯示文件名是以非數字開頭的文件)
? ? ? ? 特殊表示法:
? ? ? ? ? ? [:space:]:空格
? ? ? ? ? ? [:punct:]:標點符號
? ? ? ? ? ? [:digit:]:數字(注意:[:digit:] = 0-9 )
? ? ? ? ? ? [:alnum:]:數字和字母(同理:[:alnum:] = 0-9a-zA-Z)
? ? ? ? ? ? [:lower:]:小寫字母(同理:[:lower:] = a-z)
? ? ? ? ? ? [:upper:]:大寫字母(同理:[:upper:] = A-Z)
? ? ? ? ? ? [:alpha:]:大小寫字母(同理:[:alpha:] = a-zA-Z)
? ? ? ? ? ? 查看所有的特殊表示法可使用命令:man 7 glob
? ? ? ? 特殊表示法的運用:
? ? ? ? ? ? 例如:ls [[:alpha:]]*[[:space:]*[^[:alpha:]](顯示文件名是以字母開頭、非字母結尾且中間包含空白字符的文件)
? ? ? ? 特別注意:
? ? ? ? ? ? 上述文件名通配的規則并不能描述所有的情況,例如:文件名不包含a的文件。要想描述所有情況,就需要使用正則表達式。
★ 用戶及權限
? ? ☆ 計算機有用戶、用戶組,文件有屬主、屬組,進程也有屬主、屬組,一一對應。每個用戶名登錄后都會在系統內進行名稱解析,生成與用戶一一對應的一串數字,即UID,存放在/etc/passwd,密碼存放在/etc/shadow。同理,組名(GID),存放在/etc/group,密碼存放在/etc/gshadow。所以,與用戶信息相關的文件有:passwd文件(記錄用戶的大部分信息)、shadow文件(記錄用戶的密碼)、group文件(記錄用戶的附加組),創建新用戶除了用命令以外,手動直接編輯上述3個文件內容,然后手動創建家目錄后把/etc/skel目錄里的環境配置文件復制到家目錄中,修改家目錄的屬主屬組也完全可以實現。
? ? ☆ 用戶的3種權限:
? ? ? ? 對文件來說:r(可讀)、w(可寫-可以編輯或刪除)、x(可執行)
? ? ? ? 對目錄來說:r(可對此目錄執行ls)、w(可在此目錄中創建文件)、x(可使用cd切換進此目錄,也可以使用ls -l查看內部文件詳細信息)
? ? ☆ 用戶類別
? ? ? ? 管理員:0
? ? ? ? 普通用戶:1-65535(使用16位二進制數表示,實際中個別系統用戶超過了65535,他們就用32位二進制數表示)
? ? ? ? ? ? 系統用戶:1-499,無家目錄
? ? ? ? ? ? 一般用戶:500-60000
? ? ? ? 說明:管理員是權限最大的用戶,普通用戶有分為兩種:一是系統用戶,開機之后跟隨操作系統一起啟動的進程就是以系統用戶的身份運行的,所以系統用戶戶不需要登錄。
? ? ☆ 用戶組類別:
? ? ? ? 管理員組
? ? ? ? 普通組
? ? ? ? ? ? 系統組
? ? ? ? ? ? 一般組
? ? ? ? 更常用的用戶組分類方法:
? ? ? ? ? ? 基本組:一個用戶屬于多個用戶組時,這個用戶創建的文件的屬組就是這個用戶的默認組,也叫基本組。
? ? ? ? ? ? 私有組:創建一個用戶時,如果沒有給這個用戶指定組,那么系統會自動給這個用戶分配一個與這個用戶同名的組,這個組就是用戶的私有組。所以,用戶的基本組不一定是他的私有組。
? ? ? ? ? ? 附加組:用戶基本組以外的其他組,也叫額外組。
? ? ☆ 關于密碼的期限
? ? ? ? 密碼最短使用時間:兩次修改密碼之間最短的時間間隔。
? ? ? ? 密碼最長使用時間:密碼的有效期限,即密碼保持有效的最大天數。
? ? ? ? 密碼到期日期:expire date,超出之后密碼過期。
? ? ? ? 警告時間:距離密碼過期多少天給用戶發警告,warning date。
? ? ? ? 非活動時間:密碼過期后距離禁用的最后期限,inactive date。
? ? ? ? 假設用戶的密碼最長使用期限是50天,密碼過期警告時間是20天,密碼非活動時間是3天,如果用戶一直不修改密碼,則會:第30天開始給用戶發密碼即將過期警告,在用戶每次登陸的時候警告用戶密碼即將過期,第50天開始密碼過期,用戶每次登陸都會強制修改密碼,不修改就不能登陸,53天開始用戶密碼被鎖定,只能找管理員解鎖。
? ? ☆ 關于創建用戶時的一些默認設置:
? ? ? ? 創建用戶時如果沒指定組,則默認給用戶分配一個與其用戶名相同的組作為其私有組,GID一般與其UID保持一致,如果GID被其他組占用了,GID就無法與UID一致了,這種情況下,這個用戶就屬于特殊用戶了,其權限也與一般用戶不同了。創建用戶時如果沒指定UID,則默認給用戶分配的UID是passwd中最后一個用戶UID加1。創建用戶時如果沒指定家目錄,則用戶默認的的家目錄是在/home下與用戶名同名的目錄。
? ? ☆ 新增用戶自動會有家目錄、密碼期限等一些默認設置的原因:
? ? ? ? /etc/default/useradd這個文件記錄了新增用戶的一些默認設置,可以使用cat /etc/default/useradd來查看,其中HOME=/home表示新增用戶的家目錄是在/home下與用戶名同名的目錄,INACTIVE表示密碼過期后距離禁用的最后期限,-1表示無限制,EXPIRE表示密碼使用期限(即過期期限)
? ? ☆ 關于進程、文件的屬主和屬組
? ? ? ? 進程有屬主、屬組,文件也有屬主、屬組。進程的屬主就是運行這個進程的人,進程的屬組就是運行這個進程的人的用戶組,文件的屬主就是創建這個文件的人,文件的屬組是創建這個文件的人的基本組。
? ? ☆ 關于文件權限位
? ? ? ? 1、文件權限位表示為3組rwx:第1組是屬主的權限,第2組是屬組的權限,第3組是其他用戶的權限。每一組權限的狀態可用3位二進制數表示,例如:rw-(110),而3位2進制數又可用1位8進制數表示,這樣3組權限就可用3位8進制數表示了。
? ? ? ? 2、掌握兩種情況下文件權限的判斷方法
? ? ? ? ? ? a、判斷用戶能否運行一個文件(用戶應以什么權限訪問文件)
? ? ? ? ? ? ? ? 方法:先判斷用戶是不是文件的屬主,如果是,用戶就以屬主的身份訪問文件,用戶的權限就是第1組rwx;如果不是,就再判斷用戶是否屬于文件的屬組,如果屬于,用戶就以屬組的身份訪問文件,用戶的權限就是第2組rwx,如果不屬于,用戶就以其他用戶的身份訪問這個文件,用戶的權限就是第3組rwx。
? ? ? ? ? ? ? ? 舉例:
? ? ? ? ? ? ? ? 用戶:tom tom
? ? ? ? ? ? ? ? 文件:rwxr-xr-x root root /bin/ls
? ? ? ? ? ? ? ? 分析:tom使用ls命令時,相當于訪問了ls這個文件。判斷tom能否執行ls命令:tom不是ls文件的屬主,也不屬于ls文件的屬組,所以tom要以其他用戶的身份訪問ls文件,tom的權限是第3組rwx,即r-x,所以tom能夠執行ls命令。(這個ls進程的屬主就是tom)
? ? ? ? ? ? b、判斷一個進程應以什么權限訪問一個文件
? ? ? ? ? ? ? ? 方法:首先判斷進程的屬主和文件的屬主是不是一樣,如果一樣,進程就以屬主的身份訪問這個文件,進程的權限就是第1組rwx;如果進程的屬主不是文件的屬主,就繼續判斷進程的屬主是不是屬于文件的屬組,如果屬于,進程就以屬組的身份訪問這個文件,進程的權限就是第2組rwx,如果不屬于,進程就以其他用戶的身份訪問這個文件,進程的權限就是第3組rwx。
? ? ? ? ? ? ? ? 舉例:
? ? ? ? ? ? ? ? 進程:tom tom
? ? ? ? ? ? ? ? 文件:rwxrw-r-- jerry tom a.txt
? ? ? ? ? ? ? ? 分析:進程的屬主不是文件的屬主,所以進程的權限不是第1組rwx,進程的屬主屬于文件的屬組,所以進程的權限是第2組rwx,即rw-。
? ? ? ? 3、關于創建新文件的默認權限
? ? ? ? ? ? 管理員:
? ? ? ? ? ? ? ? 創建的文件:644(rw-r--r--)
? ? ? ? ? ? ? ? 創建的目錄:755
? ? ? ? ? ? 普通用戶:
? ? ? ? ? ? ? ? 創建的文件:664
? ? ? ? ? ? ? ? 創建的目錄:775
? ? ? ? ? ? 解釋:實際上,創建文件的權限是:666-umask,創建目錄的權限是:777-umask。umask叫遮罩碼,專門用來計算新建文件或目錄的權限,直接輸入命令umask即可查看當前用戶的遮罩碼,管理員的是0022,取后3位022就是管理員的umask,普通用戶是0002,取后3位002就是普通用戶的umask。所以,管理員創建文件的權限:666-022=644,管理員創建目錄的權限:777-022=755,普通用戶創建文件的權限:666-002=664,普通用戶創建目錄的權限:777-002=775。umask命令也可以設定當前用戶的umask值,例如:umask 022(設定當前的用戶umask值為022)。注意兩點:1、不夠減的時候該位的結果為0,例如666-027=640;2、Linux強制使新建文件不能有x權限,如果修改umask后使得結果中有x權限,則其權限自動加1。3、
? ? ☆ passwd文件內容的解讀(可以使用man 5 passwd命令查看)
? ? ? ? 執行cat /etc/passwd命令,會發現passwd文件中每一行都有7個用“;”隔開的字段,每個字段的含義如下:
? ? ? ? 第1字段:用戶名,account
? ? ? ? 第2字段:密碼,password。這個字段內容是一個X字母,意思是用戶的密碼不在這里(在/etc/shadow文件中)
? ? ? ? 第3字段:用戶ID,UID
? ? ? ? 第4字段:用戶的基本組ID,GID。(用戶的附加組信息不在這里,在group文件中)
? ? ? ? 第5字段:用戶的其他信息(住址、聯系方式等,中間用逗號隔開),這個字段的內容往往為空,或者為其用戶名。
? ? ? ? 第6字段:用戶的家目錄,home dir(系統用戶雖然也寫有家目錄,但實際上這個家目錄是沒意義的,因為系統用戶不允許登錄的)
? ? ? ? 第7字段:用戶的默認shell(系統用戶寫的是nologin,意思是不允許登錄。對于普通用戶來說,如果這里記錄的是一個非法shell,則這個普通用戶也是不能登錄的,可以使用cat /etc/shells來查看所有的合法shell)
? ? ☆ shadow文件內容的解讀(可以使用man 5 shadow命令查看)
? ? ? ? 執行cat /etc/shadow命令,會發現shadow文件中每一行都有7個用“;”隔開的字段,每個字段的含義如下:
? ? ? ? 第1字段:用戶名,account
? ? ? ? 第2字段:加密過的密碼,encrypted password,使用的是MD5加密算法。記錄為:$1$8位字符$長串字符。1表示加密方式,8位字符表示“雜質”(也稱sault,隨機生成的字符),用來附加在數據后面一起計算特征碼,長串字符就是特征碼。有的用戶這個字段內容是!!或*,表示這個用戶是鎖定的或者是不允許登錄的。
? ? ? ? ? ? 關于加密:
? ? ? ? ? ? ? ? 加密有3種方法:1、對稱加密:加密和解密使用同一個密碼;2、公鑰加密:每個密碼都成對出現,一個為私鑰,一個為公鑰,用私鑰加密就用公鑰解密,用公鑰加密就用私鑰解密。公鑰加密與對稱加密相比:密鑰更長,安全性更高,但是解密速度更慢。3、單向加密(又叫散列加密、指紋加密、哈希加密),只能由加密前數據生成加密后數據,反之不可以。單向加密采用提取數據特征碼的方法來實現(每一個數據都有一個唯一的獨有的特征碼,數據一樣則特征碼一樣),多用于數據校驗。單向加密的特征:單向性、雪崩效應(即蝴蝶效應,數據有一點點改變,會造成其特征碼發生巨大變化,可以防破解。蝴蝶效應的演示:先將一個文件復制到當前目錄下cp /etc/inittab ./,然后計算其特征碼md5sum inittab,會得到一長串字符,再使用nano修改一點點文件內容nano inittab,再計算其特征碼md5sum inittab,就會發現這個特征碼已經與先前的大不相同了)、定長輸出(即文件計算得到的特征碼長度固定)。單向加密常用的算法:MD5算法,即Message Digest 5(信息摘要5,5表示算法版本號),是128位的定長輸出,這是麻省理工學院人工智能實驗室研發的加密算法。SHA1算法,Secure Hash Algorithm 1(安全的哈希算法,1是版本號),是160位定長輸出,安全性比MD5更高,此外還有SHA256(256位定長輸出)、SHA512(512位定長輸出)等多個變種,安全性能達到軍用級別。
? ? ? ? 第3字段:從1970年1月1號到密碼最近一次被修改所經過的天數。
? ? ? ? 第4字段:密碼最短使用期限,即兩次修改密碼之間最短的時間間隔,設置為0則無限制,可以連續修改密碼。
? ? ? ? 第5字段:密碼最長使用期限,即到期限之前必須修改密碼。
? ? ? ? 第6字段:密碼過期警告時間,即距離密碼過期多久的時候給用戶發警告。
? ? ? ? 第7字段:密碼禁用時間,即密碼過期之后多久如果再不修改密碼就密碼禁用
? ? ? ? 第8字段:密碼有效期,設置為99999則為永久有效。
? ? ? ? 第9字段:保留字段(無任何意義)
? ? ☆ group文件內容的解讀
? ? ? ? 執行cat /etc/group命令,會發現group文件中每一行都有4個用“;”隔開的字段,每個字段的含義如下:
? ? ? ? 第1字段:組名
? ? ? ? 第2字段:密碼占位符
? ? ? ? 第3字段:組ID
? ? ? ? 第4字段:以這個組為附加組的用戶列表
? ? ☆ 鎖定用戶的方法:在shadow文件中該用戶的第2字段起始位置加!!即可。
? ? ☆ 用戶管理命令
? ? ? ? useradd:創建新用戶
? ? ? ? ? ? -u:給新用戶指定UID
? ? ? ? ? ? ? ? 例如:useradd -u 1000 user1(創建一個名為user1的新用戶,指定其UID為1000)
? ? ? ? ? ? -g:給新用戶指定GID(基本組)(必須是已存在的組)
? ? ? ? ? ? -G:給新用戶指定附加組(可以有多個,中間用逗號隔開)
? ? ? ? ? ? -r:創建一個系統用戶(UID小于500且無家目錄)
? ? ? ? ? ? -c:給新用戶輸入其他信息(注釋信息)(用雙引號引起來)
? ? ? ? ? ? -d:給新用戶指定家目錄
? ? ? ? ? ? -s:給新用戶指定shell的路徑(必須是合法的shell)
? ? ? ? ? ? ? ? SHELL也是一個環境變量,到目前為止,我們一共學習了3個環境變量:PATH(可執行文件的默認路徑)、HISTSIZE(命令歷史緩存的大小)、SHELL(用戶默認shell的路徑)。可以使用命令:echo $SHELL查看當前用戶的默認shell。
? ? ? ? ? ? -m:強行給新用戶創建家目錄(-m經常和-k一起使用)
? ? ? ? ? ? -M:強行不給新用戶創建家目錄
? ? ? ? ? ? ? ? (即使是在/etc/login.defs中設定要創建家目錄也照樣不創建,這會導致用戶得不到/etc/skel目錄里的環境配置信息,但是由于用戶有默認shell,所以用戶是可以登錄的,也可以使用su命令切換到這個用戶上,但是會出現警告:“cannot change directory to /home/user1:No such file or directory”以提示該用戶沒有家目錄,用戶此時處于/root目錄中,另外該用戶登錄后的命令提示符也有了變化,變成了-bash-3.2$)
? ? ? ? ? ? ? ? 關于/etc/login.defs文件:
? ? ? ? ? ? ? ? ? ? 這個文件記錄了創建新用戶時所有的默認設定,使用cat /etc/login.defs即可查看這些信息。
? ? ? ? ? ? -k:強行復制環境配置文件到新用戶的家目錄中
? ? ? ? ? ? ? ? /etc/skel目錄里存放的是環境配置文件,是bath的配置文件(用戶默認是bath的話),這些文件時隱藏文件。創建新用戶時系統會自動將這些文件復制到新用戶的家目錄中,所以,-k選項可有可無。
? ? ? ? ? ? 附:手動創建用戶的簡要過程:(創建用戶名為hive,UID和GID都是5000,基本組是hive,附加組mygroup)
? ? ? ? ? ? ? ? ? ? nano /etc/group(光標移至最后一行,輸入:hive:x:5000:,再在mygroup一行的最后輸入hive,以加入附加組)
? ? ? ? ? ? ? ? ? ? nano /etc/passed(光標移至最后一行,輸入:hive:x:5000:5000:HIVR:/home/hive:/bin/bash)
? ? ? ? ? ? ? ? ? ? nano /etc/shadow(光標移至最后一行,輸入:hive:!!:15765:0:99999:7:::)(15765是用bc計算器算出來的,先用命令查看秒數date +%s,再除以每天的秒數86400即可得到天數15765)
? ? ? ? ? ? ? ? ? ? cp -r/etc/skel/ /home/hive(創建家目錄)
? ? ? ? ? ? ? ? ? ? chown -R hive.hive /home/hive(修改家目錄的屬主屬組)
? ? ? ? ? ? ? ? ? ? chmod -R go= /home/hive(修改家目錄的權限,使得除屬主以外任何人都不能訪問)
? ? ? ? ? ? ? ? 創建完畢(除了密碼以外),然后驗證一下:(要養成隨手驗證的習慣)
? ? ? ? ? ? ? ? ? ? ls -la /home/hive(驗證家目錄中文件的權限)
? ? ? ? ? ? ? ? ? ? su - hive(切換到創建的用戶看是否正常,新用戶還沒密碼,不能登錄,但是能用su切換過去)
? ? ? ? ? ? ? ? ? ? id(驗證UID、GID、默認組、附加組)
? ? ? ? ? ? ? ? 驗證無問題,繼續手動給新用戶加密碼:(使用openssl命令來加密)
? ? ? ? ? ? ? ? ? ? openssl passwd -1 -salt '86486246'(-1表示使用MD5加密算法,-salt表示給原始密碼加鹽后再加密,8位的salt自己隨便輸入,然后敲回車,系統會提示輸入密碼,輸完后敲回車即可顯示$1$86486246$...,然后將這一長串字符復制到/etc/shadow中替換掉!!即可)
? ? ? ? userdel:刪除用戶
? ? ? ? ? ? 例如:userdel user1(如果不帶任何選項刪除以后,用戶的家目錄是不會被刪除的)
? ? ? ? ? ? -r:刪除用戶的同時刪除其家目錄
? ? ? ? id:查看用戶的UID、GID信息
? ? ? ? ? ? -u:只看UID
? ? ? ? ? ? ? ? 例如1:id -u user1(查看user1用戶的UID)
? ? ? ? ? ? ? ? 例如2:id -u(查看當前用戶的UID)
? ? ? ? ? ? -g:查看基本組的GID
? ? ? ? ? ? -G:查看所有組的GID(包括基本組和附加組)
? ? ? ? ? ? -n:查看用戶名或組名(需和-u、-g或-G一起用)
? ? ? ? ? ? ? ? 例如:id -u -n user1(查看用戶user1的用戶名)
? ? ? ? finger:查看用戶的賬號屬性信息(家目錄、默認shell、上次登錄時間、郵箱等)
? ? ? ? ? ? 例如1:finger(查看當前用戶的賬號屬性信息)
? ? ? ? ? ? 例如2:finger user1(查看user1用戶的賬號屬性信息)
? ? ? ? usermod:修改用戶的賬號屬性
? ? ? ? ? ? -u:修改用戶的UID
? ? ? ? ? ? ? ? 例如1:usermod -u 2002 user3(把user3用戶的UID修改為2002)
? ? ? ? ? ? ? ? 例如2:usermod -u 2002(把當前用戶的UID修改為2002)
? ? ? ? ? ? -g:修改用戶的基本組的GID(該到的組必須是已經存在的組)
? ? ? ? ? ? -G:修改用戶附加組的GID
? ? ? ? ? ? ? ? 注意:如果用戶此前已經有一個或多個GID,則修改后用戶就只有改完后的一個附加組了,先前的附加組都被覆蓋了。
? ? ? ? ? ? -a:為用戶追加一個附加組(需和-G一起用)
? ? ? ? ? ? -c:為用戶增加注釋信息
? ? ? ? ? ? -d:修改用戶的家目錄
? ? ? ? ? ? ? ? 注意:直接使用-d選項會帶來一個嚴重后果:用戶如果以前的家目錄里有很多文件,則修改家目錄后,以前家目錄中的文件全都不能訪問了。所以,-d選項很少單獨使用,-d選項經常配合-m一起使用,表示修改家目錄后把以前家目錄中的所有文件移至修改后的家目錄中。
? ? ? ? ? ? -l(login name):修改用戶的登錄名(即用戶名)
? ? ? ? ? ? ? ? 例如:usermod -l wangwei root(將root用戶的用戶名改為wangwei)
? ? ? ? ? ? -s:修改用戶的默認shell
? ? ? ? ? ? -L:鎖定用戶賬號(禁止其登陸)
? ? ? ? ? ? -U:解鎖用戶賬號
? ? ? ? chsh(change shell):修改用戶的默認shell
? ? ? ? ? ? 例如:chsh user1(開始修改用戶user1的shell),(回車后系統會提示輸入新shell的路徑),/bin/tcsh(將該用戶的默認shell修改為tcsh)
? ? ? ? chfn(change finger):修改用戶的finger信息(這里指的是注釋信息)
? ? ? ? ? ? 例如:chfn user1(開始修改用戶user1的注釋信息),(回車后系統會依次提示輸入用戶名、公司地址、公司電話、家庭電話,對應輸入后即可修改完畢)
? ? ? ? chage(change age):修改用戶密碼過期信息
? ? ? ? ? ? -d:修改上次修改密碼的日期
? ? ? ? ? ? -E:修改用戶密碼到期的日期
? ? ? ? ? ? -I:修改用戶密碼的非活動時間
? ? ? ? ? ? -m:修改用戶密碼最短使用時間
? ? ? ? ? ? -M:修改用戶密碼最長使用時間
? ? ? ? ? ? -W:修改用戶密碼告警時間
? ? ? ? passwd:修改用戶密碼
? ? ? ? ? ? 注意:普通用戶只能使用passwd修改自己的密碼,管理員可以使用passwd修改自己或者其他用戶的密碼。
? ? ? ? ? ? 例如:passwd user1
? ? ? ? ? ? --stdin(standard in):接收標準輸入密碼(即鍵盤輸入來的密碼)
? ? ? ? ? ? ? ? 說明:此選項一般用于腳本中,用以自動執行完密碼修改全過程,因為使用passwd修改密碼時系統會提示輸入新密碼,這對于腳本來說是一種打斷,所以在腳本中可以利用管道來自動完成密碼修改過程:echo "redhat" | passwd --stdin user1(在腳本中利用管道將user1的密碼修改為redhat)
? ? ? ? ? ? -l:鎖定用戶賬號
? ? ? ? ? ? -u:解鎖用戶賬號
? ? ? ? ? ? -d:刪除用戶密碼(刪除密碼之后,用戶就無法登陸了,因為Linux要求所有用戶必須有密碼才能登陸)
? ? ? ? ? ? -n:修改用戶密碼最短使用時間
? ? ? ? ? ? -x:修改用戶密碼最長使用時間
? ? ? ? ? ? -i:修改用戶密碼的非活動時間(即密碼過期之后的鎖定時間,inactive date)
? ? ? ? ? ? -w:修改用戶密碼的警告時間(即密碼距離過期還剩多少天時發警告,warning date)
? ? ? ? pwck(password check):檢查用戶賬號完整性(不常用)
? ? ☆ 組管理命令
? ? ? ? groupadd:創建組(不加選項時,組的GID默認是上一個組的GID加1)
? ? ? ? ? ? -g:給創建的組指定GID
? ? ? ? ? ? -r:創建一個系統組
? ? ? ? groupmod:修改組的相關屬性
? ? ? ? ? ? -g:修改GID
? ? ? ? ? ? -n:修改組名
? ? ? ? groupdel:刪除一個組
? ? ? ? gpasswd:給組加密碼
? ? ? ? ? ? 關于組的密碼:
? ? ? ? ? ? ? ? 當使用newgrp命令臨時切換用戶的默認組時,系統會提示輸入密碼,這個密碼就是新默認組的組密碼,只有這種情況時才用得到組密碼。(當用戶的新默認組是該用戶的附加組時,就不需要輸入組密碼了,當用戶退出登錄后,該用戶的默認組自動恢復成原來的默認組)
? ? ☆ 權限管理命令
? ? ? ? chown(change owner):改變文件、目錄的屬主或屬組(只有管理員才可以使用此命令)(不加任何選項則只改變屬主)
? ? ? ? ? ? 例如1:chown tom /tmp/a,/tmp/b(把a文件/目錄和b文件/目錄的屬主改為tom)
? ? ? ? ? ? 注意:如果是改變目錄的屬主,不加選項時改變的只是目錄自身的屬主,目錄里的文件屬主并沒改變。
? ? ? ? ? ? -R:遞歸修改目錄及其內部文件或子目錄的屬主
? ? ? ? ? ? --reference=:將文件、目錄的屬主、屬組改為和某個文件、目錄的屬主、屬組相同
? ? ? ? ? ? ? ? 例如:chown -R --reference=/tmp/abc /tmp/test(將/tmp/test的屬主、屬組遞歸修改為和/tmp/abc文件是同一個屬主、屬組)
? ? ? ? ? ? USERNAME:GRPNAME(或USERNAME.GRPNAME)用法:同時改變文件、目錄的屬主和屬組
? ? ? ? ? ? ? ? 例如:chown tom:root /tmp/abc(把/tmp/abc這個文件、目錄的屬主改為tom,屬組改為root)
? ? ? ? ? ? :GRPNAME(或.GRPNAME)用法:只改變文件、目錄的屬組
? ? ? ? chgrp(change group):改變文件、目錄的屬組(只有管理員才可以使用此命令)
? ? ? ? ? ? 例如1:chgrp tom /tmp/a,/tmp/b(把a文件/目錄和b文件/目錄的屬組改為tom)
? ? ? ? ? ? 注意:如果是改變目錄的屬組,不加選項時改變的只是目錄自身的屬組,目錄里的文件屬組并沒改變。
? ? ? ? ? ? -R:遞歸修改目錄及其內部文件或子目錄的屬組
? ? ? ? ? ? --reference=:?
? ? ? ? ? ? ? ? 例如:chgrp --reference=/tmp/abc /tmp/test(?) ? ?
? ? ? ? chmod(change mode):修改文件、目錄權限
? ? ? ? ? ? 第一類用法:同時修改文件、目錄的3類用戶權限
? ? ? ? ? ? ? ? 例如:chmod 750 /tmp/abc(將/tmp/abc文件、目錄的權限修改為rwxr-x---)
? ? ? ? ? ? ? ? 注意:如果是改變目錄的權限,不加選項時改變的只是目錄自身的權限,目錄里的文件權限并沒改變。如果輸入的是75,則是075,輸入的是5,則是005。
? ? ? ? ? ? ? ? -R:遞歸修改目錄及其內部文件或子目錄的權限
? ? ? ? ? ? ? ? --reference=:將文件、目錄的權限改為和某個文件、目錄的權限相同
? ? ? ? ? ? 第二類用法:只修改某類用戶或某幾類用戶的權限
? ? ? ? ? ? ? ? 3類用戶分別是:屬主(u)、屬組(g)、其他(o),其實還有一類:全部(a)
? ? ? ? ? ? ? ? 例如1:chmod u=r-x /tmp/abc(把/tmp/abc文件、目錄的屬主權限修改為r-x)
? ? ? ? ? ? ? ? 例如2:chmod u=rx /tmp/abc(作用同例1)
? ? ? ? ? ? ? ? 例如3:chmod g=r,o=r /tmp/abc(把/tmp/abc文件、目錄的屬組和其他權限修改為r--)
? ? ? ? ? ? ? ? 例如4:chmod go=r /tmp/abc(作用同例3)
? ? ? ? ? ? ? ? 例如5:chmod g=rx,o= /tmp/abc(把/tmp/abc文件、目錄的屬組權限修改為r-x,其他權限修改為---)
? ? ? ? ? ? 第三類用法:只修改某類用戶的某位或某些位權限
? ? ? ? ? ? ? ? 例如1:chmod u+x,g-x /tmp/abc(把/tmp/abc文件、目錄的屬主權限添加x,屬組權限去掉x)
? ? ? ? ? ? ? ? 例如2:chmod +x /tmp/abc(把/tmp/abc文件、目錄的屬主、屬組、其他權限都添加x)(或者寫成a+x也行)
? ? ? ? ? ? ? ? 例如3:chmod u+rw /tmp/abc(把/tmp/abc文件、目錄的屬主權限添加rw)
? ? 1、命令格式
? ? ? ? 命令(command)+空格+選項(options)+空格+參數(argumengts)
? ? ? ? 選項:分為短選項和長選項。短選項可以組合,組合的先后順序一般沒區別,特殊情況下有區別,長選項一般不能組合。某些選項也可以帶自己的參數。例如:ls -a -l = ls -al = ls -la。
? ? ? ? 參數:命令的作用對象。
? ? ? ? 小技巧:
? ? ? ? ctrl+c:1、終止當前已開始執行的命令;2、取消在命令提示符下輸入的所有內容(不必一個一個刪了,更快捷)。
? ? 2、常用命令
? ? ? ? su(switch user):切換用戶。
? ? ? ? ? ? 格式:su 用戶名
? ? ? ? passwd:更改用戶名
? ? ? ? pwd(Printing Working Directory):顯示當前的路徑
? ? ? ? ls(list):顯示當前目錄下的文件(不加選項則只顯示文件名)
? ? ? ? ? ? -l:用長格式顯示當前目錄下的所有文件,或用長格式顯示指定的單個文件。
? ? ? ? ? ? ? ? 顯示內容解釋(從左往右):
? ? ? ? ? ? ? ? 1、10位字符
? ? ? ? ? ? ? ? ? ? 10位的第1位:文件類型
? ? ? ? ? ? ? ? ? ? ? ? -:普通文件
? ? ? ? ? ? ? ? ? ? ? ? d:目錄文件
? ? ? ? ? ? ? ? ? ? ? ? b:塊設備文件(block)
? ? ? ? ? ? ? ? ? ? ? ? c:字符設備文件(character)
? ? ? ? ? ? ? ? ? ? ? ? l:符號鏈接文件(symbolic link file)
? ? ? ? ? ? ? ? ? ? ? ? p:命令管道文件(pipe)
? ? ? ? ? ? ? ? ? ? ? ? s:套接字文件(socket)
? ? ? ? ? ? ? ? ? ? 10位的后9位:文件權限。每3位是1組,每組:rwx(讀,寫,執行),沒有相應功能則用-表示,例如:rw-(能讀,能寫,不能執行)
? ? ? ? ? ? ? ? 2、1位數字:文件硬鏈接的次數。
? ? ? ? ? ? ? ? 3、文件的屬主。root等。
? ? ? ? ? ? ? ? 4、文件的屬組。
? ? ? ? ? ? ? ? 5、文件大小。默認單位是字節。
? ? ? ? ? ? ? ? 6、時間戳(timestamp)之最近一次被修改的時間。
? ? ? ? ? ? ? ? ? ? 每個文件都有3個時間戳,分別表示文件最近一次被訪問(access)、被修改(modify)、被改變(change)的時間。修改是指修改文件內容,改變是指改變文件元數據(即文件的名字、類型等屬性)。
? ? ? ? ? ? ? ? 7、文件名
? ? ? ? ? ? -h:文件大小做單位轉換后顯示
? ? ? ? ? ? -a:顯示包括隱藏文件在內的所有文件
? ? ? ? ? ? ? ? Linux中以.開頭的文件是隱藏文件,只有一個.表示當前目錄,只有兩個.表示上一級目錄。所以,ls . = ls;ls .. 是顯示上一級目錄的文件。
? ? ? ? ? ? -A:顯示包括隱藏文件在內的所有文件(不包含.和..)
? ? ? ? ? ? -d:顯示目錄自身屬性(而不是顯示目錄下文件的屬性)
? ? ? ? ? ? -i:顯示文件的索引號
? ? ? ? ? ? ? ? 每個文件都有一個索引號(index node,縮寫為inode),相當于文件的身份證。
? ? ? ? ? ? -r:逆序顯示文件
? ? ? ? ? ? -R:遞歸(recursive)顯示文件,即目錄中的文件、目錄全都顯示。
? ? ? ? ? ? /:顯示根目錄下的所有目錄
? ? ? ? cd(change directory):切換目錄
? ? ? ? ? ? cd:回到用戶的主目錄(主目錄,又叫家目錄,是用戶登錄時默認所在的目錄)。
? ? ? ? ? ? cd ~student:回到student用戶的家目錄(只有管理員用戶可以使用此命令)
? ? ? ? ? ? cd /root:回到root目錄
? ? ? ? ? ? cd -:回到上一次所在的目錄。(連續使用此命令即可在當前目錄和上一次所在的目錄之間來回切換)
? ? ? ? type:顯示指定命令屬于哪種命令類型(命令類型分為兩種:內置命令、外部命令。內置命令是指shell自帶的命令,外部命令指在某個路徑下有對應的可執行文件的命令。)
? ? ? ? ? ? 例如:type ls
? ? printenv:顯示環境變量信息
? ? hash:顯示緩存信息
? ? ? ? (每個命令執行時,Linux會在環境變量中PATH指定的目錄下尋找這個命令的可執行文件,執行完后會把這個命令的路徑存在緩存里,下次再執行這個命令時就不再去環境變量中PATH里去找了,這樣可以提高執行速度。hash命令可以顯示執行過所有命令的次數)
? ? date:顯示、修改當前系統時間
? ? ? ? date 0226104913.30 (將系統時間修改為2月26號10點49分2013年30秒,其中年和秒如果無需修改就可以省略,秒如果要修改前邊要加.)
? ? ? ? date +%F:以年-月-日的格式顯示當前日期
? ? ? ? date +%F-%H-%M-%S:以年-月-日-時-分-秒的格式顯示當前時間
? ? clock:顯示當前硬件時間(=hwclock)
? ? ? ? hwclock -s:將系統時間修正為硬件時間
? ? ? ? hwclock -w:將硬件時間修正為系統時間
? ? ? ? (關于時間:主板上依靠紐扣電池驅動的計時器的時間叫硬件時間,Linux開機后系統會自動讀取硬件時間來作為當前的時間,之后就用軟件自己計時了,軟件自己的計時就叫系統時間,一般來說硬件時間比系統時間更準確)
? ? help:獲取內部命令的使用幫助
? ? ? ? 例如:help cd
? ? --help:獲取外部命令的使用幫助
? ? ? ? 例如:ls --help
? ? man(manual):在命令手冊中查看某個命令
? ? ? ? 例如:man ls
? ? ? ? 查詢完畢后按q鍵可以退出man命令
? ? ? ? (關于命令手冊:命令手冊中對內部命令、外部命令都有說明,而且比help更詳細。但要注意,對于內部命令,man的結果是對這個內部命令所屬的shell的說明,所以,內部命令最好用help獲取幫助。命令手冊的內容是分章節的,可以只查看指定章節的內容,例如:man 2 ls。命令手冊各章節內容:1、用戶命令。2、系統調用。3、庫調用。4、特殊文件(設備文件)。5、文件格式(配置文件的語法)。6、游戲。7、雜項。8、管理命令。命令手冊中出現的[]表示可以省略的內容,<>表示必須要有的內容,用|隔開表示多選一,...表示以此類推。查看man內容時,向后翻一屏:空格鍵,向前翻一屏:b,向后翻一行:下箭頭或者回車鍵,向前翻一行:上箭頭或者k。按/加查找內容即可查找關鍵字,用上下箭頭查看)
? ? whatis:查看命令所在命令手冊的哪些章節
? ? ? ? 例如:whatis read
? ? info:查看命令的在線文檔(發展史等信息)
? ? ? ? 例如:info ls
? ? which:查看命令對應文件的存放路徑
? ? cal:日歷
? ? ? ? 例如:cal 2016(2016年的年歷);cal 5 2016(2016年5月的日歷)
? ? echo:顯示指定的內容(末尾默認有換行符)
? ? ? ? 例如:echo “the year is 2016,today is monday”(顯示“”中的這句話)
? ? ? ? echo -e “the year is 2016,\ntoday is monday”(從,開始換行顯示這句話,-e的作用是啟用轉意符\n)
? ? ? ? echo -n “the year is 2016,today is monday”(顯示這句話并去掉這句話后邊的換行符)
? ? printf:顯示指定內容(末尾默認無換行符)
? ? ? ? 例如:printf “the year is 2016.\n”(\n是手動添加的換行符)
? ? ? ? printf “the year is 2016,\ntoday is monday.\n”(分兩行顯示這句話)
? ??
★ 根文件系統詳解
? ? Linux根目錄下的目錄有:
? ? 1、/boot:系統啟動相關的文件
? ? 2、/dev:設備文件(屬于特殊文件)
? ? ? ? 設備分為兩類:塊設備(隨機訪問的設備);字符設備(線性訪問,以字符為單位)
? ? ? ? 設備文件是特殊文件,文件名顯示背景為黑色字符為黃色,沒有大小,直接存儲為元數據,只作為設備的訪問入口。在顯示大小的位置顯示的是用逗號隔開的兩個數字,分別是主設備號(major)和次設備號(minor)。
? ? 3、/etc:配置文件
? ? 4、/home:用戶的家目錄,每個用戶的家目錄默認為/home/用戶名。但是root用戶的家目錄例外,在根目錄下的/root。
? ? 5、/lib:庫文件和內核模塊文件
? ? ? ? /lib/modules:內核模塊文件
? ? ? ? 庫文件分為兩類:靜態庫和動態庫。靜態庫是嵌在程序內部的庫,程序直接復制到其他主機上即可運行,但是當許多使用靜態庫的程序運行時會把許多重復的庫復制進內存,占用內存空間而且效率低;動態庫本身存放在主機磁盤上,并不在程序內部,程序運行時通過鏈接來將動態庫復制到內存,多個程序可在內存中共享使用這個庫,節省內存空間,但是程序直接復制到其他主機后不一定能運行,因為其他主機不一定有這個程序所需的庫。
? ? 6、/media:掛載點目錄,用來掛載移動設備
? ? 7、/mnt:掛載點目錄,用來掛載額外的臨時文件系統
? ? ? ? 掛載:新添加的設備必須關聯到Linux文件系統的某個路徑節點上才可以訪問,這個關聯過程就叫掛載。
? ? 8、/opt:可選目錄,以前用來安裝第三方軟件
? ? 9、/proc:偽文件系統,系統運行時里面的文件都是內核映射文件,記錄有系統運行狀態信息等,系統關閉后這些文件全都消失。系統性能監控和系統性能調優都和這個目錄有關。
? ? 10、/sys:偽文件系統,系統運行時里面的文件都是和硬件屬性相關的映射文件,系統關閉后這些文件全都消失。
? ? 11、/tem:臨時文件,一般每月清除一次。
? ? 12、/var:可變化的文件,系統剛運行時這個目錄中的文件很少,隨著系統運行,這個目錄中文件越來越多
? ? 13、/bin:可執行文件。用戶命令。
? ? 14、/sbin:可執行文件。管理命令。
? ? 15、/usr:全局共享只讀文件
? ? ? ? /usr/bin
? ? ? ? /usr/sbin
? ? ? ? /usr/lib
? ? ? ? /usr/local:用于安裝第三方軟件
? ? ? ? /usr/local/bin
? ? ? ? /usr/local/sbin
? ? ? ? /usr/local/lib
? ? ? ? /usr/local下的這些目錄是用來存放第三方軟件需要的一些東西。
★ 目錄管理
? ? ls
? ? cd
? ? pwd
? ? mkdir(make directory):創建空目錄
? ? ? ? 注意:mkdir /root/x/y/z 這個命令的含義是在/root/x/y創建Z目錄,所以必須要確保x和y目錄是存在的,這里使用的是絕對路徑(絕對路徑以/開始),也可用相對路徑(相對路徑以./開始),假設當前目錄是/root/x,在當前目錄下創建y目錄:mkdir y,然后在y目錄下再創建z目錄:mkdir y/z(本該是mkdir ./y/z的,只是./可以省略而已)
? ? ? ? -p:創建指定路徑上全部缺少的目錄
? ? ? ? -v:查看創建過程
? ? ? ? ? ? 例如1:mkdir -pv /root/x/y/z (在root目錄下依次創建嵌套的x、y、z目錄)
? ? ? ? {}用法舉例(這些花括號的用法屬于bash特性中的命令行展開功能中的花括號展開功能):
? ? ? ? ? ? 例如2:mkdir -pv /mnt/test/{x/m,y} (在mnt下建立test目錄,在test目錄下建立x目錄和y目錄,在x目錄下建立m目錄。)
? ? ? ? ? ? 例如3:mkdir -pv /mnt/test/{x,y}/m (在mnt下建立test目錄,在test目錄下建立x目錄和y目錄,在x目錄下建立m目錄,在y目錄下建立m目錄)
? ? ? ? ? ? 例如4:mkdir -pv /mnt/test2/{a,b}{c,d}(在mnt下建立test2目錄,在test2目錄下建立ac目錄、ad目錄、bc目錄、bd目錄)
? ? ? ? ? ? 例如5:mkdir -pv /mnt/test2/{a,b}_{c,d}(在mnt下建立test2目錄,在test2目錄下建立a_c目錄、a_d目錄、b_c目錄、b_d目錄)
? ? rmdir(remove directory):刪除空目錄
? ? ? ? -p:刪除沒有分支的一串空目錄
? ? ? ? ? ? 例如:假設已經有/root/x/y/z目錄結構,而且xyz這3個目錄都是空目錄,則可以rmdir -p /root/x(刪除xyz目錄)
★ 文件管理
? ? 文件命名規則:
? ? ? ? 1、長度不能超過255個字符
? ? ? ? 2、不能使用/
? ? ? ? 3、嚴格區分大小寫
? ? touch:創建文件/修改文件的時間戳
? ? ? ? 例如1:touch c(在當前目錄下創建一個名稱是c的文件)
? ? ? ? 例如2:touch ‘a b’(在當前目錄下創建一個名稱是“a b”的文件,Linux系統允許空格字符作為文件名的組成部分)
? ? ? ? -c:只修改文件的時間戳而不創建文件
? ? ? ? ? ? 例如:touch -c c(修改文件c的時間戳,如果c不存在也不再創建c)
? ? ? ? -a:只修改文件的訪問時間
? ? ? ? ? ? 例如:touch -a c(修改文件c的訪問時間為當前時間,修改時間不變,因為文件的訪問時間屬于文件屬性,所以c的改變時間也同時變為當前時間)
? ? ? ? -m:只修改文件的修改時間
? ? ? ? ? ? 例如:touch -m c(修改文件c的修改時間為當前時間,訪問時間不變,因為文件的修改時間屬于文件屬性,所以c的改變時間也同時變為當前時間)
? ? ? ? -t:修改文件的時間戳為指定時間
? ? ? ? ? ? 例如:touch -m -t 201212131415 c(修改文件c的修改時間為2012年12月13號14點15分,c的訪問時間不變,c的改變時間變為當前時間)
? ? ? ? (注意:touch一個文件后,這個文件的改變時間一定會變為當前時間,這是不能由任何命令控制的)
? ? stat:查看文件的狀態信息(名稱、大小、時間戳等)
? ? file:查看文件的內容類型
? ? nano:編輯文本文件內容(其實nano就是一個文本編輯器)
? ? ? ? 例如:nano hello(編輯名為hello的文本文件,如果該文件不存在,就在當前目錄下新建一個叫hello的文件。下方有操作提示,其中的^表示ctrl鍵)
? ? rm(remove):刪除文件
? ? ? ? 例如:rm hello(刪除叫hello的文件,如果是以管理員身份刪除,會有確認提示,再打y、回車即可完成刪除,普通用戶刪除不會有確認提示)
? ? ? ? (注:有些命令是有別名的,比如rm就是rm -i的別名,原生態的rm命令是不會提示刪除確認的,rm -i是帶刪除確認的命令,后來人們給rm -i起了個別名叫rm,所以現在打rm命令就是帶刪除確認的了,如果想使用原生態的rm命令,就需要在rm前加\,例如:\rm a(刪除a文件,且不帶刪除確認)。同樣,ls也是ls --color=tty的別名,所以ls查詢結果中的目錄和特殊文件會有顏色區分,原生態的ls命令是沒有任何顏色區分的。查看一個命令是不是別名,使用type即可,例如:type ls。別名機制是紅帽系統的特色)
? ? ? ? -f(force):強行刪除(不帶刪除確認提示)
? ? ? ? -r(recursive):遞歸刪除目錄(即刪除該目錄及其中的所有內容)
? ? ? ? ? ? 例如:rm -rf /mnt/test2(強行刪除mnt目錄下的test2目錄,且不帶確認提示)
? ? ? ? ? ? 注意:rm -rf /(強行刪除Linux的根目錄,這是最危險的操作,一旦刪除,Linux系統就不復存在了,相當于自殺。)
? ? cp(copy):復制文件、目錄
? ? ? ? 例如1:cp /etc/passwd /tem/(將etc目錄下的passwd文件復制到tem目錄下,并保持文件名不變。如果tem目錄不存在,則cp操作失敗)
? ? ? ? 例如2:cp /etc/passwd /tem/test(將etc目錄下的passwd文件復制到/tem/test目錄下,并保持文件名不變(如果test是目錄);將etc目錄下的passwd文件復制到tem目錄下并覆蓋test文件(如果test是文件)。覆蓋的意思是先刪除test文件,再把passwd文件復制到test所在的目錄并將passwd文件重命名為test)
? ? ? ? 例如3:cp /etc/a /etc/b /etc/c /tem/(將etc目錄下的a、b、c三個文件復制到tem目錄下,并全都保持文件名不變)
? ? ? ? -r:遞歸復制一個目錄(即復制這個目錄下的所有內容)
? ? ? ? ? ? 例如:cp -r /etc/ /tem/a(將etc目錄遞歸復制到/tem/a/目錄下。如果a目錄存在,就將etc目錄復制到a目錄下;如果a目錄不存在,就在將etc目錄復制到tem目錄下并重命名為a;如果a是個文件,則會出錯)
? ? ? ? ? ? 總結:cp的格式是:cp 源 目的地。當源是文件時,目的地可以是目錄和文件,如果目的地是目錄,則要求該目錄必須存在,否則操作失敗,如果目的地是文件,則會覆蓋目的地文件;當源是目錄是,目的地只能是目錄,如果目的地目錄存在,則會將源目錄復制到目的地目錄中,如果目的地目錄不存在,則會將源目錄復制到目的地目錄所在的目錄中并將源目錄重命名為目的地目錄。如果源是多個文件或目錄,則可以使用花括號展開機制,例如:cp /etc/{a,b,c/d} /tmp(將etc目錄下的a、b文件以及etc/c下的d文件復制到tmp目錄下)。小技巧:輸入文件名后按一下tab鍵,如果自動補上/,就說明這個文件名是個目錄。
? ? ? ? -f:強行覆蓋(覆蓋目的地文件前不會有確認提示,且如果目的地文件不能打開,則先刪掉再復制)
? ? ? ? -p:保留文件的屬主、屬組、時間戳(一般復制文件之后,這個文件的屬主、屬組、時間戳都會改變,誰復制的屬主就改成誰)
? ? ? ? -a:保留文件的所有屬性(比-p保留的更多,可以認為保留了源文件的原貌,這個操作通常用來備份文件,所以稱為歸檔復制)
? ? ? ? -P:保持鏈接文件依然是鏈接(cp操作如果復制的是一個鏈接文件,則默認會把鏈接文件指向的文件復制過去,而不是復制鏈接文件本身)
? ? ? ? -L:復制鏈接文件本身(cp -L = cp)
? ? mv(move):剪切文件、目錄
? ? ? ? 例如:mv /tmp/a /var/abc(將tmp目錄下的a文件剪切到/var/abc目錄下(如果abc是目錄);將tmp目錄下的a文件剪切到var目錄下并重命名為abc(如果abc是文件且不存在);)
? ? ? ? 注意:mv的源既可以是文件也可以是目錄,且不用加任何選項(這一點和cp不同)
? ? ? ? 總結:mv的格式是:mv 源目的地。如果源是目錄,則要求目的地必須也是目錄,如果目的地目錄存在,就把源目錄復制到目的地目錄下,如果目的地目錄不存在,就把源目錄重命名為目的地目錄并剪切到目的地目錄所在的目錄下;如果源是文件,則目的地可以是文件或者目錄,如果目的地是已有文件,則把源文件剪切過去并覆蓋目的地文件,如果目的地文件不存在,則把源文件剪切過去并重命名為目的地文件。如果目的地是目錄,則把源文件剪切到目的地目錄中。
? ? ? ? 小技巧:mv a b(把當前目錄下的a文件、目錄重命名為b)
? ? ? ? -t(target):目的地提前
? ? ? ? ? ? 例如:mv -t /tem a(把當前目錄下的a文件剪切到tem目錄下)
? ? install:復制文件或者創建目錄
? ? ? ? 例如1:install /etc/a /var(把etc目錄下的a文件復制到var目錄下)
? ? ? ? 例如2:install -d /tmp/{a,b}(在tmp目錄下新建a目錄和b目錄)(install -d = mkdir)
★ 文本查看
? ? cat:連接并顯示文本文件
? ? ? ? 例如:cat /tem/a /var/b(顯示tem目錄下的a文件和var目錄下的b文件)
? ? ? ? -n:給顯示的內容加行號
? ? ? ? -E:顯示每行的行結束符$
? ? ? ? ? ? 關于行結束符:行結束符標志著一行的結束,在windows系統中行結束符是$加回車,在Linux系統中是$。所以,在Linux中編輯的文本在windows中打開就會發現所有內容都在一行中,而在windows中編輯的文本在Linux中查看就有可能出亂碼。
? ? ? ? -A:顯示所有內容(包含行結束符、回車符等非打印字符)
? ? tac:連接并從后往前顯示文本文件(與cat顯示順序相反)
? ? ? ? cat的缺陷:瞬間把所有內容顯示完,雖然我們可以使用shift+page up/page down在Linux終端(不是使用第三方軟件連入Linux)查看內容時的翻屏操作,但是因為緩存的內容有限,所以只能往前翻有限的屏數,如果信息量太大(如:/etc/rc.d/rc.sysinit),則有可能看不到全部的內容。
? ? more:分屏顯示文本文件
? ? ? ? 例如:more /etc/rc.d/rc.sysinit
? ? ? ? 使用空格鍵向后翻一屏,b鍵向前翻一屏,回車鍵向后翻一行(不支持向前翻一行),但是一旦翻到文件尾部就自動退出了。
? ? less:分屏顯示文本文件(最常用)
? ? ? ? 例如:less /etc/rc.d/rc.sysinit
? ? ? ? 使用空格鍵向后翻一屏,b鍵向前翻一屏,回車鍵或下箭頭向后翻一行,k鍵或上箭頭向前翻一行,q鍵退出查看,使用方法同man命令(其實man命令執行的就是less命令)
? ? head:查看文本文件前n行
? ? ? ? -n:指定顯示的行數
? ? ? ? ? ? 例如:head -n2 /etc/rc.d/rc.sysinit(顯示/etc/rc.d/rc.sysinit的前2行內容)
? ? tail:查看文本文件后n行
? ? ? ? -n:指定顯示的行數
? ? ? ? -f(follow):實時顯示文件后n行內容,ctrl+c退出(文件后n行內容一旦改變立即顯示,這個命令很有用,尤其在監控日志文件時)
★ 文本處理
? ? (以下命令并不實際更改文本內容,只是控制顯示方式而已)
? ? cut:切割文本文件并顯示
? ? ? ? -d:指定字段分隔符(不指定的話就默認一個空格)
? ? ? ? -f:指定要顯示的字段
? ? ? ? ? ? 例如:cut -d: -f1,7 /etc/passwd(切割顯示/etc/passwd文件,:為字段分隔符,顯示第1和第7字段)(-f1-7就是顯示第1至7字段)
? ? join:合并文本文件并顯示(用的較少,不再細解)
? ? sort:排序顯示
? ? ? ? 例如:sort sort.test(按照每行首字符在asc碼表中的順序由小到大顯示sort.test文件)
? ? ? ? -r:有大到小顯示
? ? ? ? -n:按數值排序(不再按照asc碼表順序排序)
? ? ? ? ? ? 例如:sort -n -r sort.test(按照數值由大到小的順序顯示sort.test文件)
? ? ? ? -t:指定字段分隔符
? ? ? ? -k:指定以哪個字段為標準進行排序
? ? ? ? -u:排重顯示
? ? ? ? ? ? 例如:sort -t:-k3 -n -r -u /etc/passed(以:為分隔符,以第3字段為標準按照數值由大到小順序對/etc/passed文件進行排序并排重顯示)
? ? ? ? -f:忽略字符大小寫
? ? uniq:忽略相鄰的重復行之后再顯示
? ? ? ? 例如:sort sort.test
? ? ? ? -d:只顯示相鄰的重復行(只顯示1行)
? ? ? ? -D:顯示相鄰的所有重復行(只要是相鄰的重復的行全都顯示出來)
? ? ? ? -c:顯示每一行及相鄰行重復的次數(重復行只顯示1行)
★ 文本統計
? ? wc(word count):統計文本文件的行數、單詞數、字節數
? ? ? ? -l:只顯示行數
? ? ? ? -w:只顯示單詞數
? ? ? ? -c:只顯示字節數
? ? ? ? -m:只顯示字符數
? ? ? ? -L:最長的一行有多少個字符
? ? ? ? (一個字節就是一個字符,因為一個字符就占用一個字節,1Byte。一個漢字、中文標點占用2字節)
★ 字符處理
? ? tr:轉換或刪除字符
? ? ? ? 例如1:tr ‘ab’ ‘AB’(把以后輸入字符中的所有a和b都轉成大寫)
? ? ? ? 例如2:tr ‘a-z’ ‘A-Z’ < /etc/passwd(把/etc/passwd這個文件中所有的小寫字母都轉成大寫)
? ? ? ? -d:刪除指定的字符
? ? ? ? ? ? 例如:tr -d ‘ab’ < /etc/passwd(把/etc/passwd這個文件中所有的a和b都刪除)
★ bash及其特性
? ? shell本身就是一個可執行程序,在shell中運行一次shell就打開了一個子shell,以此類推,執行一次exit就退出一層shell,以此類推。可以用pstree查看進程樹。
? ? ☆ bash特性:
? ? ? ? 1、命令歷史
? ? ? ? 2、命令補全
? ? ? ? 3、管道、重定向
? ? ? ? 4、命令別名
? ? ? ? 5、命令行編輯
? ? ? ? 6、命令行展開
? ? ? ? 7、文件名通配
? ? ? ? 8、變量
? ? ? ? 9、編程
? ? ☆ bash支持的3種引號:
? ? ? ? 反引號``:用于命令替換
? ? ? ? 雙引號"":弱引用,用于實現變量替換
? ? ? ? 單引號'':強引用,不完成變量替換
? ? ☆ bash特性學習:
? ? ? ? 1、命令行編輯
? ? ? ? 光標跳轉:
? ? ? ? ? ? ctrl+a 跳到命令行首
? ? ? ? ? ? ctrl+e 跳到命令行尾
? ? ? ? ? ? ctrl+u 刪除光標左側所有內容
? ? ? ? ? ? ctrl+k 刪除光標右側所有內容
? ? ? ? ? ? ctrl+左右箭頭 光標向左右跳轉一個單詞(只在圖形界面中打開shell時適用)
? ? ? ? ? ? ctrl+l 清屏
? ? ? ? 2、命令歷史
? ? ? ? bash會自動記錄執行過的命令,并保存在內存的緩沖區中,以后再輸入命令時可以使用上下箭頭尋找合適的歷史命令直接執行。當用戶退出時,該用戶的命令歷史會從內存中保存到該用戶家目錄中的一個叫bash history的隱藏文件中,所以當該用戶再次登錄時,以往的命令歷史還存在。
? ? ? ? history:查看命令歷史(這是一個bash內置的命令)
? ? ? ? ? ? -c:清空命令歷史
? ? ? ? ? ? -d:刪除指定的一個或多個命令記錄
? ? ? ? ? ? ? ? 例如1:history -d 500(刪除第500條命令記錄)
? ? ? ? ? ? ? ? 例如2:history -d 500 10(刪除從第500條開始的10條命令記錄)
? ? ? ? ? ? -w:將緩沖區中的命令歷史保存到歷史文件中
? ? ? ? 查看命令歷史緩沖區大小的方法:
? ? ? ? ? ? 1、環境變量中HISTSIZE:命令歷史緩沖區大小(默認是1000條)
? ? ? ? ? ? 2、用命令查看命令歷史緩沖區大小:echo $HISTSIZE
? ? ? ? 命令歷史的使用技巧:
? ? ? ? ? ? !n:執行命令歷史中第n條命令
? ? ? ? ? ? !!:執行上一條命令
? ? ? ? ? ? !string:執行命令歷史中最近一個以指定字符串開頭的命令
? ? ? ? ? ? ? ? 例如:!man(執行命令歷史中最近一個以man開頭的命令)
? ? ? ? ? ? 按一下ESC鍵,再按一下。鍵:引用上一次命令的最后一個字符串(alt+. 在本地窗口中也可以)
? ? ? ? 3、命令補全
? ? ? ? 輸入命令時,輸入到一半時,按一下tab鍵,就有可能補全剩余的命令。(在環境變量的設置中搜索,如果有唯一一個匹配的命令,就會補全)
? ? ? ? 輸入命令到一半時,如果想不起剩余的字母怎么拼寫,就按兩下tab鍵,會自動給出所有可能的命令。
? ? ? ? 同理還有路徑補全。
? ? ? ? 4、命令別名
? ? ? ? alias:給一個命令起別名(這個別名只在當前shell進程的生命周期內有效,而且對其他shell進程是無效的。如果想永久有效且對所有用戶有效,就必須在bash程序的配置文件中修改。)
? ? ? ? ? ? 例如1:alias cl=clear(執行以后,cl就相當于clear了)
? ? ? ? ? ? 例如2:alias head=‘head -n2 /etc/rc.d/rc.sysinit’(注意:中間有空格時要用單引號引起來)
? ? ? ? ? ? 例如3:alias(查看目前全部的命令別名)
? ? ? ? unalias:撤銷別名
? ? ? ? ? ? 例如:unalias cl(以前設置的alias cl=clear就失效了)
? ? ? ? 5、命令替換
? ? ? ? 把命令中某個子命令替換為其執行結果的過程,子命令需要用$()括起來,或者用反引號``引起來。(反引號就是~鍵的那個引號)
? ? ? ? ? ? 例如1:echo "The current directory is $(pwd)"(假設當前目錄是/root,則這個命令實際執行結果是"The current directory is /root")
? ? ? ? ? ? 例如2:touch ./file-$(date +%F-%H-%M-%S).txt(在當前目錄下創建一個名稱是當前時間的文件,時間格式是年-月-日-時-分-秒)
? ? ? ? ? ? 例如3:ls -l $(which useradd)(用長格式顯示useradd文件)
? ? ? ? 6、文件名通配(globbing)
? ? ? ? 命令行展開特性有3方面:波浪線展開、花括號展開、文件名展開(即文件名通配)
? ? ? ? 文件名通配通常使用3個符號:
? ? ? ? ? ? *:匹配任意長度的任意字符(包括空白字符)
? ? ? ? ? ? ? ? 例如:ls a*3(顯示文件名是以a開頭且以3結尾的文件)
? ? ? ? ? ? ?:匹配任意單個字符(包括空白字符)
? ? ? ? ? ? ? ? 例如:ls a?3(顯示文件名是3個字符且以a開頭、以3結尾的文件)
? ? ? ? ? ? []:匹配指定范圍內的任意單個字符
? ? ? ? ? ? ? ? 例如1:ls [a-zA-Z]*[0-9a-zA-Z](顯示文件名以字母開頭且以數字或字母結尾的文件)
? ? ? ? ? ? ? ? 例如2:ls [abc]*[A-Z](顯示文件名以abc三個字母其中之一開頭且以大寫字母結尾的文件)
? ? ? ? ? ? ? ? 例如3:ls *[0-9]*(顯示文件名中包含有數字的文件)
? ? ? ? ? ? [^]:匹配指定范圍之外的任意單個字符
? ? ? ? ? ? ? ? 例如:ls [^0-9]*(顯示文件名是以非數字開頭的文件)
? ? ? ? 特殊表示法:
? ? ? ? ? ? [:space:]:空格
? ? ? ? ? ? [:punct:]:標點符號
? ? ? ? ? ? [:digit:]:數字(注意:[:digit:] = 0-9 )
? ? ? ? ? ? [:alnum:]:數字和字母(同理:[:alnum:] = 0-9a-zA-Z)
? ? ? ? ? ? [:lower:]:小寫字母(同理:[:lower:] = a-z)
? ? ? ? ? ? [:upper:]:大寫字母(同理:[:upper:] = A-Z)
? ? ? ? ? ? [:alpha:]:大小寫字母(同理:[:alpha:] = a-zA-Z)
? ? ? ? ? ? 查看所有的特殊表示法可使用命令:man 7 glob
? ? ? ? 特殊表示法的運用:
? ? ? ? ? ? 例如:ls [[:alpha:]]*[[:space:]*[^[:alpha:]](顯示文件名是以字母開頭、非字母結尾且中間包含空白字符的文件)
? ? ? ? 特別注意:
? ? ? ? ? ? 上述文件名通配的規則并不能描述所有的情況,例如:文件名不包含a的文件。要想描述所有情況,就需要使用正則表達式。
★ 用戶及權限
? ? ☆ 計算機有用戶、用戶組,文件有屬主、屬組,進程也有屬主、屬組,一一對應。每個用戶名登錄后都會在系統內進行名稱解析,生成與用戶一一對應的一串數字,即UID,存放在/etc/passwd,密碼存放在/etc/shadow。同理,組名(GID),存放在/etc/group,密碼存放在/etc/gshadow。所以,與用戶信息相關的文件有:passwd文件(記錄用戶的大部分信息)、shadow文件(記錄用戶的密碼)、group文件(記錄用戶的附加組),創建新用戶除了用命令以外,手動直接編輯上述3個文件內容,然后手動創建家目錄后把/etc/skel目錄里的環境配置文件復制到家目錄中,修改家目錄的屬主屬組也完全可以實現。
? ? ☆ 用戶的3種權限:
? ? ? ? 對文件來說:r(可讀)、w(可寫-可以編輯或刪除)、x(可執行)
? ? ? ? 對目錄來說:r(可對此目錄執行ls)、w(可在此目錄中創建文件)、x(可使用cd切換進此目錄,也可以使用ls -l查看內部文件詳細信息)
? ? ☆ 用戶類別
? ? ? ? 管理員:0
? ? ? ? 普通用戶:1-65535(使用16位二進制數表示,實際中個別系統用戶超過了65535,他們就用32位二進制數表示)
? ? ? ? ? ? 系統用戶:1-499,無家目錄
? ? ? ? ? ? 一般用戶:500-60000
? ? ? ? 說明:管理員是權限最大的用戶,普通用戶有分為兩種:一是系統用戶,開機之后跟隨操作系統一起啟動的進程就是以系統用戶的身份運行的,所以系統用戶戶不需要登錄。
? ? ☆ 用戶組類別:
? ? ? ? 管理員組
? ? ? ? 普通組
? ? ? ? ? ? 系統組
? ? ? ? ? ? 一般組
? ? ? ? 更常用的用戶組分類方法:
? ? ? ? ? ? 基本組:一個用戶屬于多個用戶組時,這個用戶創建的文件的屬組就是這個用戶的默認組,也叫基本組。
? ? ? ? ? ? 私有組:創建一個用戶時,如果沒有給這個用戶指定組,那么系統會自動給這個用戶分配一個與這個用戶同名的組,這個組就是用戶的私有組。所以,用戶的基本組不一定是他的私有組。
? ? ? ? ? ? 附加組:用戶基本組以外的其他組,也叫額外組。
? ? ☆ 關于密碼的期限
? ? ? ? 密碼最短使用時間:兩次修改密碼之間最短的時間間隔。
? ? ? ? 密碼最長使用時間:密碼的有效期限,即密碼保持有效的最大天數。
? ? ? ? 密碼到期日期:expire date,超出之后密碼過期。
? ? ? ? 警告時間:距離密碼過期多少天給用戶發警告,warning date。
? ? ? ? 非活動時間:密碼過期后距離禁用的最后期限,inactive date。
? ? ? ? 假設用戶的密碼最長使用期限是50天,密碼過期警告時間是20天,密碼非活動時間是3天,如果用戶一直不修改密碼,則會:第30天開始給用戶發密碼即將過期警告,在用戶每次登陸的時候警告用戶密碼即將過期,第50天開始密碼過期,用戶每次登陸都會強制修改密碼,不修改就不能登陸,53天開始用戶密碼被鎖定,只能找管理員解鎖。
? ? ☆ 關于創建用戶時的一些默認設置:
? ? ? ? 創建用戶時如果沒指定組,則默認給用戶分配一個與其用戶名相同的組作為其私有組,GID一般與其UID保持一致,如果GID被其他組占用了,GID就無法與UID一致了,這種情況下,這個用戶就屬于特殊用戶了,其權限也與一般用戶不同了。創建用戶時如果沒指定UID,則默認給用戶分配的UID是passwd中最后一個用戶UID加1。創建用戶時如果沒指定家目錄,則用戶默認的的家目錄是在/home下與用戶名同名的目錄。
? ? ☆ 新增用戶自動會有家目錄、密碼期限等一些默認設置的原因:
? ? ? ? /etc/default/useradd這個文件記錄了新增用戶的一些默認設置,可以使用cat /etc/default/useradd來查看,其中HOME=/home表示新增用戶的家目錄是在/home下與用戶名同名的目錄,INACTIVE表示密碼過期后距離禁用的最后期限,-1表示無限制,EXPIRE表示密碼使用期限(即過期期限)
? ? ☆ 關于進程、文件的屬主和屬組
? ? ? ? 進程有屬主、屬組,文件也有屬主、屬組。進程的屬主就是運行這個進程的人,進程的屬組就是運行這個進程的人的用戶組,文件的屬主就是創建這個文件的人,文件的屬組是創建這個文件的人的基本組。
? ? ☆ 關于文件權限位
? ? ? ? 1、文件權限位表示為3組rwx:第1組是屬主的權限,第2組是屬組的權限,第3組是其他用戶的權限。每一組權限的狀態可用3位二進制數表示,例如:rw-(110),而3位2進制數又可用1位8進制數表示,這樣3組權限就可用3位8進制數表示了。
? ? ? ? 2、掌握兩種情況下文件權限的判斷方法
? ? ? ? ? ? a、判斷用戶能否運行一個文件(用戶應以什么權限訪問文件)
? ? ? ? ? ? ? ? 方法:先判斷用戶是不是文件的屬主,如果是,用戶就以屬主的身份訪問文件,用戶的權限就是第1組rwx;如果不是,就再判斷用戶是否屬于文件的屬組,如果屬于,用戶就以屬組的身份訪問文件,用戶的權限就是第2組rwx,如果不屬于,用戶就以其他用戶的身份訪問這個文件,用戶的權限就是第3組rwx。
? ? ? ? ? ? ? ? 舉例:
? ? ? ? ? ? ? ? 用戶:tom tom
? ? ? ? ? ? ? ? 文件:rwxr-xr-x root root /bin/ls
? ? ? ? ? ? ? ? 分析:tom使用ls命令時,相當于訪問了ls這個文件。判斷tom能否執行ls命令:tom不是ls文件的屬主,也不屬于ls文件的屬組,所以tom要以其他用戶的身份訪問ls文件,tom的權限是第3組rwx,即r-x,所以tom能夠執行ls命令。(這個ls進程的屬主就是tom)
? ? ? ? ? ? b、判斷一個進程應以什么權限訪問一個文件
? ? ? ? ? ? ? ? 方法:首先判斷進程的屬主和文件的屬主是不是一樣,如果一樣,進程就以屬主的身份訪問這個文件,進程的權限就是第1組rwx;如果進程的屬主不是文件的屬主,就繼續判斷進程的屬主是不是屬于文件的屬組,如果屬于,進程就以屬組的身份訪問這個文件,進程的權限就是第2組rwx,如果不屬于,進程就以其他用戶的身份訪問這個文件,進程的權限就是第3組rwx。
? ? ? ? ? ? ? ? 舉例:
? ? ? ? ? ? ? ? 進程:tom tom
? ? ? ? ? ? ? ? 文件:rwxrw-r-- jerry tom a.txt
? ? ? ? ? ? ? ? 分析:進程的屬主不是文件的屬主,所以進程的權限不是第1組rwx,進程的屬主屬于文件的屬組,所以進程的權限是第2組rwx,即rw-。
? ? ? ? 3、關于創建新文件的默認權限
? ? ? ? ? ? 管理員:
? ? ? ? ? ? ? ? 創建的文件:644(rw-r--r--)
? ? ? ? ? ? ? ? 創建的目錄:755
? ? ? ? ? ? 普通用戶:
? ? ? ? ? ? ? ? 創建的文件:664
? ? ? ? ? ? ? ? 創建的目錄:775
? ? ? ? ? ? 解釋:實際上,創建文件的權限是:666-umask,創建目錄的權限是:777-umask。umask叫遮罩碼,專門用來計算新建文件或目錄的權限,直接輸入命令umask即可查看當前用戶的遮罩碼,管理員的是0022,取后3位022就是管理員的umask,普通用戶是0002,取后3位002就是普通用戶的umask。所以,管理員創建文件的權限:666-022=644,管理員創建目錄的權限:777-022=755,普通用戶創建文件的權限:666-002=664,普通用戶創建目錄的權限:777-002=775。umask命令也可以設定當前用戶的umask值,例如:umask 022(設定當前的用戶umask值為022)。注意兩點:1、不夠減的時候該位的結果為0,例如666-027=640;2、Linux強制使新建文件不能有x權限,如果修改umask后使得結果中有x權限,則其權限自動加1。3、
? ? ☆ passwd文件內容的解讀(可以使用man 5 passwd命令查看)
? ? ? ? 執行cat /etc/passwd命令,會發現passwd文件中每一行都有7個用“;”隔開的字段,每個字段的含義如下:
? ? ? ? 第1字段:用戶名,account
? ? ? ? 第2字段:密碼,password。這個字段內容是一個X字母,意思是用戶的密碼不在這里(在/etc/shadow文件中)
? ? ? ? 第3字段:用戶ID,UID
? ? ? ? 第4字段:用戶的基本組ID,GID。(用戶的附加組信息不在這里,在group文件中)
? ? ? ? 第5字段:用戶的其他信息(住址、聯系方式等,中間用逗號隔開),這個字段的內容往往為空,或者為其用戶名。
? ? ? ? 第6字段:用戶的家目錄,home dir(系統用戶雖然也寫有家目錄,但實際上這個家目錄是沒意義的,因為系統用戶不允許登錄的)
? ? ? ? 第7字段:用戶的默認shell(系統用戶寫的是nologin,意思是不允許登錄。對于普通用戶來說,如果這里記錄的是一個非法shell,則這個普通用戶也是不能登錄的,可以使用cat /etc/shells來查看所有的合法shell)
? ? ☆ shadow文件內容的解讀(可以使用man 5 shadow命令查看)
? ? ? ? 執行cat /etc/shadow命令,會發現shadow文件中每一行都有7個用“;”隔開的字段,每個字段的含義如下:
? ? ? ? 第1字段:用戶名,account
? ? ? ? 第2字段:加密過的密碼,encrypted password,使用的是MD5加密算法。記錄為:$1$8位字符$長串字符。1表示加密方式,8位字符表示“雜質”(也稱sault,隨機生成的字符),用來附加在數據后面一起計算特征碼,長串字符就是特征碼。有的用戶這個字段內容是!!或*,表示這個用戶是鎖定的或者是不允許登錄的。
? ? ? ? ? ? 關于加密:
? ? ? ? ? ? ? ? 加密有3種方法:1、對稱加密:加密和解密使用同一個密碼;2、公鑰加密:每個密碼都成對出現,一個為私鑰,一個為公鑰,用私鑰加密就用公鑰解密,用公鑰加密就用私鑰解密。公鑰加密與對稱加密相比:密鑰更長,安全性更高,但是解密速度更慢。3、單向加密(又叫散列加密、指紋加密、哈希加密),只能由加密前數據生成加密后數據,反之不可以。單向加密采用提取數據特征碼的方法來實現(每一個數據都有一個唯一的獨有的特征碼,數據一樣則特征碼一樣),多用于數據校驗。單向加密的特征:單向性、雪崩效應(即蝴蝶效應,數據有一點點改變,會造成其特征碼發生巨大變化,可以防破解。蝴蝶效應的演示:先將一個文件復制到當前目錄下cp /etc/inittab ./,然后計算其特征碼md5sum inittab,會得到一長串字符,再使用nano修改一點點文件內容nano inittab,再計算其特征碼md5sum inittab,就會發現這個特征碼已經與先前的大不相同了)、定長輸出(即文件計算得到的特征碼長度固定)。單向加密常用的算法:MD5算法,即Message Digest 5(信息摘要5,5表示算法版本號),是128位的定長輸出,這是麻省理工學院人工智能實驗室研發的加密算法。SHA1算法,Secure Hash Algorithm 1(安全的哈希算法,1是版本號),是160位定長輸出,安全性比MD5更高,此外還有SHA256(256位定長輸出)、SHA512(512位定長輸出)等多個變種,安全性能達到軍用級別。
? ? ? ? 第3字段:從1970年1月1號到密碼最近一次被修改所經過的天數。
? ? ? ? 第4字段:密碼最短使用期限,即兩次修改密碼之間最短的時間間隔,設置為0則無限制,可以連續修改密碼。
? ? ? ? 第5字段:密碼最長使用期限,即到期限之前必須修改密碼。
? ? ? ? 第6字段:密碼過期警告時間,即距離密碼過期多久的時候給用戶發警告。
? ? ? ? 第7字段:密碼禁用時間,即密碼過期之后多久如果再不修改密碼就密碼禁用
? ? ? ? 第8字段:密碼有效期,設置為99999則為永久有效。
? ? ? ? 第9字段:保留字段(無任何意義)
? ? ☆ group文件內容的解讀
? ? ? ? 執行cat /etc/group命令,會發現group文件中每一行都有4個用“;”隔開的字段,每個字段的含義如下:
? ? ? ? 第1字段:組名
? ? ? ? 第2字段:密碼占位符
? ? ? ? 第3字段:組ID
? ? ? ? 第4字段:以這個組為附加組的用戶列表
? ? ☆ 鎖定用戶的方法:在shadow文件中該用戶的第2字段起始位置加!!即可。
? ? ☆ 用戶管理命令
? ? ? ? useradd:創建新用戶
? ? ? ? ? ? -u:給新用戶指定UID
? ? ? ? ? ? ? ? 例如:useradd -u 1000 user1(創建一個名為user1的新用戶,指定其UID為1000)
? ? ? ? ? ? -g:給新用戶指定GID(基本組)(必須是已存在的組)
? ? ? ? ? ? -G:給新用戶指定附加組(可以有多個,中間用逗號隔開)
? ? ? ? ? ? -r:創建一個系統用戶(UID小于500且無家目錄)
? ? ? ? ? ? -c:給新用戶輸入其他信息(注釋信息)(用雙引號引起來)
? ? ? ? ? ? -d:給新用戶指定家目錄
? ? ? ? ? ? -s:給新用戶指定shell的路徑(必須是合法的shell)
? ? ? ? ? ? ? ? SHELL也是一個環境變量,到目前為止,我們一共學習了3個環境變量:PATH(可執行文件的默認路徑)、HISTSIZE(命令歷史緩存的大小)、SHELL(用戶默認shell的路徑)。可以使用命令:echo $SHELL查看當前用戶的默認shell。
? ? ? ? ? ? -m:強行給新用戶創建家目錄(-m經常和-k一起使用)
? ? ? ? ? ? -M:強行不給新用戶創建家目錄
? ? ? ? ? ? ? ? (即使是在/etc/login.defs中設定要創建家目錄也照樣不創建,這會導致用戶得不到/etc/skel目錄里的環境配置信息,但是由于用戶有默認shell,所以用戶是可以登錄的,也可以使用su命令切換到這個用戶上,但是會出現警告:“cannot change directory to /home/user1:No such file or directory”以提示該用戶沒有家目錄,用戶此時處于/root目錄中,另外該用戶登錄后的命令提示符也有了變化,變成了-bash-3.2$)
? ? ? ? ? ? ? ? 關于/etc/login.defs文件:
? ? ? ? ? ? ? ? ? ? 這個文件記錄了創建新用戶時所有的默認設定,使用cat /etc/login.defs即可查看這些信息。
? ? ? ? ? ? -k:強行復制環境配置文件到新用戶的家目錄中
? ? ? ? ? ? ? ? /etc/skel目錄里存放的是環境配置文件,是bath的配置文件(用戶默認是bath的話),這些文件時隱藏文件。創建新用戶時系統會自動將這些文件復制到新用戶的家目錄中,所以,-k選項可有可無。
? ? ? ? ? ? 附:手動創建用戶的簡要過程:(創建用戶名為hive,UID和GID都是5000,基本組是hive,附加組mygroup)
? ? ? ? ? ? ? ? ? ? nano /etc/group(光標移至最后一行,輸入:hive:x:5000:,再在mygroup一行的最后輸入hive,以加入附加組)
? ? ? ? ? ? ? ? ? ? nano /etc/passed(光標移至最后一行,輸入:hive:x:5000:5000:HIVR:/home/hive:/bin/bash)
? ? ? ? ? ? ? ? ? ? nano /etc/shadow(光標移至最后一行,輸入:hive:!!:15765:0:99999:7:::)(15765是用bc計算器算出來的,先用命令查看秒數date +%s,再除以每天的秒數86400即可得到天數15765)
? ? ? ? ? ? ? ? ? ? cp -r/etc/skel/ /home/hive(創建家目錄)
? ? ? ? ? ? ? ? ? ? chown -R hive.hive /home/hive(修改家目錄的屬主屬組)
? ? ? ? ? ? ? ? ? ? chmod -R go= /home/hive(修改家目錄的權限,使得除屬主以外任何人都不能訪問)
? ? ? ? ? ? ? ? 創建完畢(除了密碼以外),然后驗證一下:(要養成隨手驗證的習慣)
? ? ? ? ? ? ? ? ? ? ls -la /home/hive(驗證家目錄中文件的權限)
? ? ? ? ? ? ? ? ? ? su - hive(切換到創建的用戶看是否正常,新用戶還沒密碼,不能登錄,但是能用su切換過去)
? ? ? ? ? ? ? ? ? ? id(驗證UID、GID、默認組、附加組)
? ? ? ? ? ? ? ? 驗證無問題,繼續手動給新用戶加密碼:(使用openssl命令來加密)
? ? ? ? ? ? ? ? ? ? openssl passwd -1 -salt '86486246'(-1表示使用MD5加密算法,-salt表示給原始密碼加鹽后再加密,8位的salt自己隨便輸入,然后敲回車,系統會提示輸入密碼,輸完后敲回車即可顯示$1$86486246$...,然后將這一長串字符復制到/etc/shadow中替換掉!!即可)
? ? ? ? userdel:刪除用戶
? ? ? ? ? ? 例如:userdel user1(如果不帶任何選項刪除以后,用戶的家目錄是不會被刪除的)
? ? ? ? ? ? -r:刪除用戶的同時刪除其家目錄
? ? ? ? id:查看用戶的UID、GID信息
? ? ? ? ? ? -u:只看UID
? ? ? ? ? ? ? ? 例如1:id -u user1(查看user1用戶的UID)
? ? ? ? ? ? ? ? 例如2:id -u(查看當前用戶的UID)
? ? ? ? ? ? -g:查看基本組的GID
? ? ? ? ? ? -G:查看所有組的GID(包括基本組和附加組)
? ? ? ? ? ? -n:查看用戶名或組名(需和-u、-g或-G一起用)
? ? ? ? ? ? ? ? 例如:id -u -n user1(查看用戶user1的用戶名)
? ? ? ? finger:查看用戶的賬號屬性信息(家目錄、默認shell、上次登錄時間、郵箱等)
? ? ? ? ? ? 例如1:finger(查看當前用戶的賬號屬性信息)
? ? ? ? ? ? 例如2:finger user1(查看user1用戶的賬號屬性信息)
? ? ? ? usermod:修改用戶的賬號屬性
? ? ? ? ? ? -u:修改用戶的UID
? ? ? ? ? ? ? ? 例如1:usermod -u 2002 user3(把user3用戶的UID修改為2002)
? ? ? ? ? ? ? ? 例如2:usermod -u 2002(把當前用戶的UID修改為2002)
? ? ? ? ? ? -g:修改用戶的基本組的GID(該到的組必須是已經存在的組)
? ? ? ? ? ? -G:修改用戶附加組的GID
? ? ? ? ? ? ? ? 注意:如果用戶此前已經有一個或多個GID,則修改后用戶就只有改完后的一個附加組了,先前的附加組都被覆蓋了。
? ? ? ? ? ? -a:為用戶追加一個附加組(需和-G一起用)
? ? ? ? ? ? -c:為用戶增加注釋信息
? ? ? ? ? ? -d:修改用戶的家目錄
? ? ? ? ? ? ? ? 注意:直接使用-d選項會帶來一個嚴重后果:用戶如果以前的家目錄里有很多文件,則修改家目錄后,以前家目錄中的文件全都不能訪問了。所以,-d選項很少單獨使用,-d選項經常配合-m一起使用,表示修改家目錄后把以前家目錄中的所有文件移至修改后的家目錄中。
? ? ? ? ? ? -l(login name):修改用戶的登錄名(即用戶名)
? ? ? ? ? ? ? ? 例如:usermod -l wangwei root(將root用戶的用戶名改為wangwei)
? ? ? ? ? ? -s:修改用戶的默認shell
? ? ? ? ? ? -L:鎖定用戶賬號(禁止其登陸)
? ? ? ? ? ? -U:解鎖用戶賬號
? ? ? ? chsh(change shell):修改用戶的默認shell
? ? ? ? ? ? 例如:chsh user1(開始修改用戶user1的shell),(回車后系統會提示輸入新shell的路徑),/bin/tcsh(將該用戶的默認shell修改為tcsh)
? ? ? ? chfn(change finger):修改用戶的finger信息(這里指的是注釋信息)
? ? ? ? ? ? 例如:chfn user1(開始修改用戶user1的注釋信息),(回車后系統會依次提示輸入用戶名、公司地址、公司電話、家庭電話,對應輸入后即可修改完畢)
? ? ? ? chage(change age):修改用戶密碼過期信息
? ? ? ? ? ? -d:修改上次修改密碼的日期
? ? ? ? ? ? -E:修改用戶密碼到期的日期
? ? ? ? ? ? -I:修改用戶密碼的非活動時間
? ? ? ? ? ? -m:修改用戶密碼最短使用時間
? ? ? ? ? ? -M:修改用戶密碼最長使用時間
? ? ? ? ? ? -W:修改用戶密碼告警時間
? ? ? ? passwd:修改用戶密碼
? ? ? ? ? ? 注意:普通用戶只能使用passwd修改自己的密碼,管理員可以使用passwd修改自己或者其他用戶的密碼。
? ? ? ? ? ? 例如:passwd user1
? ? ? ? ? ? --stdin(standard in):接收標準輸入密碼(即鍵盤輸入來的密碼)
? ? ? ? ? ? ? ? 說明:此選項一般用于腳本中,用以自動執行完密碼修改全過程,因為使用passwd修改密碼時系統會提示輸入新密碼,這對于腳本來說是一種打斷,所以在腳本中可以利用管道來自動完成密碼修改過程:echo "redhat" | passwd --stdin user1(在腳本中利用管道將user1的密碼修改為redhat)
? ? ? ? ? ? -l:鎖定用戶賬號
? ? ? ? ? ? -u:解鎖用戶賬號
? ? ? ? ? ? -d:刪除用戶密碼(刪除密碼之后,用戶就無法登陸了,因為Linux要求所有用戶必須有密碼才能登陸)
? ? ? ? ? ? -n:修改用戶密碼最短使用時間
? ? ? ? ? ? -x:修改用戶密碼最長使用時間
? ? ? ? ? ? -i:修改用戶密碼的非活動時間(即密碼過期之后的鎖定時間,inactive date)
? ? ? ? ? ? -w:修改用戶密碼的警告時間(即密碼距離過期還剩多少天時發警告,warning date)
? ? ? ? pwck(password check):檢查用戶賬號完整性(不常用)
? ? ☆ 組管理命令
? ? ? ? groupadd:創建組(不加選項時,組的GID默認是上一個組的GID加1)
? ? ? ? ? ? -g:給創建的組指定GID
? ? ? ? ? ? -r:創建一個系統組
? ? ? ? groupmod:修改組的相關屬性
? ? ? ? ? ? -g:修改GID
? ? ? ? ? ? -n:修改組名
? ? ? ? groupdel:刪除一個組
? ? ? ? gpasswd:給組加密碼
? ? ? ? ? ? 關于組的密碼:
? ? ? ? ? ? ? ? 當使用newgrp命令臨時切換用戶的默認組時,系統會提示輸入密碼,這個密碼就是新默認組的組密碼,只有這種情況時才用得到組密碼。(當用戶的新默認組是該用戶的附加組時,就不需要輸入組密碼了,當用戶退出登錄后,該用戶的默認組自動恢復成原來的默認組)
? ? ☆ 權限管理命令
? ? ? ? chown(change owner):改變文件、目錄的屬主或屬組(只有管理員才可以使用此命令)(不加任何選項則只改變屬主)
? ? ? ? ? ? 例如1:chown tom /tmp/a,/tmp/b(把a文件/目錄和b文件/目錄的屬主改為tom)
? ? ? ? ? ? 注意:如果是改變目錄的屬主,不加選項時改變的只是目錄自身的屬主,目錄里的文件屬主并沒改變。
? ? ? ? ? ? -R:遞歸修改目錄及其內部文件或子目錄的屬主
? ? ? ? ? ? --reference=:將文件、目錄的屬主、屬組改為和某個文件、目錄的屬主、屬組相同
? ? ? ? ? ? ? ? 例如:chown -R --reference=/tmp/abc /tmp/test(將/tmp/test的屬主、屬組遞歸修改為和/tmp/abc文件是同一個屬主、屬組)
? ? ? ? ? ? USERNAME:GRPNAME(或USERNAME.GRPNAME)用法:同時改變文件、目錄的屬主和屬組
? ? ? ? ? ? ? ? 例如:chown tom:root /tmp/abc(把/tmp/abc這個文件、目錄的屬主改為tom,屬組改為root)
? ? ? ? ? ? :GRPNAME(或.GRPNAME)用法:只改變文件、目錄的屬組
? ? ? ? chgrp(change group):改變文件、目錄的屬組(只有管理員才可以使用此命令)
? ? ? ? ? ? 例如1:chgrp tom /tmp/a,/tmp/b(把a文件/目錄和b文件/目錄的屬組改為tom)
? ? ? ? ? ? 注意:如果是改變目錄的屬組,不加選項時改變的只是目錄自身的屬組,目錄里的文件屬組并沒改變。
? ? ? ? ? ? -R:遞歸修改目錄及其內部文件或子目錄的屬組
? ? ? ? ? ? --reference=:?
? ? ? ? ? ? ? ? 例如:chgrp --reference=/tmp/abc /tmp/test(?) ? ?
? ? ? ? chmod(change mode):修改文件、目錄權限
? ? ? ? ? ? 第一類用法:同時修改文件、目錄的3類用戶權限
? ? ? ? ? ? ? ? 例如:chmod 750 /tmp/abc(將/tmp/abc文件、目錄的權限修改為rwxr-x---)
? ? ? ? ? ? ? ? 注意:如果是改變目錄的權限,不加選項時改變的只是目錄自身的權限,目錄里的文件權限并沒改變。如果輸入的是75,則是075,輸入的是5,則是005。
? ? ? ? ? ? ? ? -R:遞歸修改目錄及其內部文件或子目錄的權限
? ? ? ? ? ? ? ? --reference=:將文件、目錄的權限改為和某個文件、目錄的權限相同
? ? ? ? ? ? 第二類用法:只修改某類用戶或某幾類用戶的權限
? ? ? ? ? ? ? ? 3類用戶分別是:屬主(u)、屬組(g)、其他(o),其實還有一類:全部(a)
? ? ? ? ? ? ? ? 例如1:chmod u=r-x /tmp/abc(把/tmp/abc文件、目錄的屬主權限修改為r-x)
? ? ? ? ? ? ? ? 例如2:chmod u=rx /tmp/abc(作用同例1)
? ? ? ? ? ? ? ? 例如3:chmod g=r,o=r /tmp/abc(把/tmp/abc文件、目錄的屬組和其他權限修改為r--)
? ? ? ? ? ? ? ? 例如4:chmod go=r /tmp/abc(作用同例3)
? ? ? ? ? ? ? ? 例如5:chmod g=rx,o= /tmp/abc(把/tmp/abc文件、目錄的屬組權限修改為r-x,其他權限修改為---)
? ? ? ? ? ? 第三類用法:只修改某類用戶的某位或某些位權限
? ? ? ? ? ? ? ? 例如1:chmod u+x,g-x /tmp/abc(把/tmp/abc文件、目錄的屬主權限添加x,屬組權限去掉x)
? ? ? ? ? ? ? ? 例如2:chmod +x /tmp/abc(把/tmp/abc文件、目錄的屬主、屬組、其他權限都添加x)(或者寫成a+x也行)
? ? ? ? ? ? ? ? 例如3:chmod u+rw /tmp/abc(把/tmp/abc文件、目錄的屬主權限添加rw)
總結
以上是生活随笔為你收集整理的linux 基本命令学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对于写bash脚本的朋友,read命令是
- 下一篇: linux sed命令的用法