提供《Linux命令大全.chm》文件,下載地址為:
/Files/amazon/Linux命令大全.rar

shutdown指令:
shutdown命令用于終止操作系統、重開機或者向所有用戶傳送信息,具體路徑為/sbin/shutdown,只有root權限才有權運行此命令。
shutdown [-t seconds] [-arkhncfF] minutes [警告信息]
-h    shutdown后立即halt
-k    不shutdown,僅發送警告信息給所有用戶
-r    shutdown后重新開機
-n    非正常方式關機,用強迫的方式kill掉所有程序然后關機
-t sec    在警告信息和關機信號之間有sec秒的延遲
-f    關機并開機后,略過fsck工具的磁盤檢查
-F   關機并開機后,強制fsck工具的磁盤檢查
-c   取消shutdown指令,不需要使用minutes參數,但是可以有警告信息
注意:minutes參數是強制性的,可以用now表示立即關機。

linux文件屬性:
-rwxrwx---
第一個屬性代表文件是目錄(d)、文件(-)、鏈接文件(l)、設備文件中供存儲的接口設備(b)、設備文件中的串口設備如鍵盤鼠標(c)。
接下來的屬性3個為一組,其中r代表可讀、w代表可寫、x代表可執行、-代表不具備某個屬性。第一組為擁有者的權限,第二組為群組的權限,第三組為其他非本群組的用戶的權限。
對于目錄的權限要額外注意。如果對某目錄的權限是rwx,那么可讀可寫可執行;如果權限是r-x,那么可讀可進入,但無法寫入;如果權限是r--,那么不可進入該目錄。注意:目錄與x的關系很重要,如果某用戶對某目錄沒有x權限,自然也就無法執行ls、cd等指令,所以也就無法進入目錄。如果某用戶對某目錄僅有r的權限,是不能進入該目錄的。
linux下的文件是否可執行與后綴名無關,而是由x這個屬性來決定的,后綴僅起到修飾的作用。文件名之前如果有一個".",說明該文件是隱藏文件,例如“.bashrc_history”,使用ls -al可以顯示隱藏文檔。

改變所在群組/bin/chgrp:
chgrp group file/dir
注意:改變的群組名必須在/etc/group中存在,否則會顯示錯誤。

改變擁有者/bin/chown:
chown [-R] owner file/dir
chown [-R] owner:group file/dir

-R    循環地將該目錄下的所有文件都改成owner與group的名稱,而不僅僅是該目錄
 
改變權限/bin/chmod:
chmod [-R] xyz file/dir
-R    循環地將該目錄下的文件都改變,而不僅僅是該目錄
xyz為三組rwx屬性數值的相加,其中r為4,w為2,x為1,那么-wx就是3,rwx就是7。
chmod [-R] u=,o=,g= file/dir
其中:
u是user,g是group,o是others,a是所有三組。例如:chmod u=rwx,og=rx file,chmod u=rwx,g=rx,o=r file。
+是加入,-是除去。chmod a+w file/dir,chmod u-x file/dir。

chattr/lsattr:
待查。


------------------------------------------------------------------------------------------------

cd命令:
cd 相對路徑/絕對路徑
登入linux系統后,root的工作路徑會自動切換到root目錄下,而用戶會自動轉到/home/user下。

/bin/pwd命令:
pwd
pwd用于顯示當前所在目錄。

/bin/mkdir和/bin/rmdir命令:
mkdir [-p] 目錄名稱
-p    順序創建目錄和子目錄,例如mkdir -p a/b/c,則順序建立a、a/b和a/b/c。
mkdir建立新的目錄,尤其注意:當建立/home/amazon/test的目錄時,必須確保前面的目錄都存在
rmdir 目錄名稱
-p    順序刪除目錄和子目錄,同上。
rmdir刪除舊有的目錄,目錄需要層層刪除,而且被刪除的目錄中不能有其他的目錄或文件,除非使用rm -rf 目錄名稱 這樣的命令。

/bin/ls命令:
ls [-ailS]
-a    列出所有文件(包括隱藏文檔)
-i    打印inode的值
-l    詳細列出,包括文件大小,屬性數據等
-S   以文件大小排序
--color=never 不顯示顏色
--color=always 總顯示顏色
--color=auto 由系統自行判斷
如果想使ls默認沒有顏色,可以在/root/.bashrc或者根用戶的.bashrc文件中加入下面的代碼:
alias ls='ls --color=never'

/bin/cp命令:
cp [-drsu] 源文件 目標文件
-r    可以進行目錄的復制
-s    做成符號鏈接文件,與ln指令功能相同
-u    如果源文件較新,或者沒有目標文件,才會進行復制動作,可用于備份操作
-d   如果是復制鏈接文件,若不加任何參數則默認情況下會將鏈接到的源文件復制到目的地;若加-d,則鏈接文件可原封不動地鏈接這個快捷方式到目的地,即保留軟硬鏈接
注意:只有目標路徑而缺少目標文件的話,只要源目錄與目標目錄不相同即可,復制后的目標文件與源文件同名。

/bin/rm命令:
rm [-irf] 文件名
-i    提供用戶確認(默認值)
-r    循環刪除,直到沒有東西為止
-f    強制刪除
注意:-rf可以連續刪除某目錄下所有文件與目錄,以及該目錄本身。

/bin/mv命令:
mv [-u] 源文件 目標文件
-u 為update的縮寫,當源文件比目標文件還新時才會動作
示例:
mv file file.new       //更改文件名
mv file1 file2 /tmp  //最后一個/tmp才是目標文件目錄,file1和file2是源文件

/bin/cat和/bin/tac命令:
cat [-n] 文件名
-n 顯示時,連行號一起輸出到屏幕上
tac 文件名
tac剛好將cat反寫過來,從最后一行到第一行反向顯示在屏幕上。

/bin/more和/usr/bin/less命令:
more 文件名
more命令可以一頁一頁地顯示文件內容,而通常情況下用cat沒法看清楚。more也可以用來配合管道使用,例如ls -al | more可以將顯示的內容一頁一頁地列出。
less 文件名
使用more時無法向前翻看,而使用less就可以使用pageup和pagedown向前向后翻看。

/usr/bin/head和/usr/bin/tail命令:
head [-n number] 文件名
顯示一個文件的前幾行,若沒有加上-n參數,默認顯示前10行,若只想顯示一行,可以輸入head -n 1 filename。
tail [-n number] 文件名
同上。
例子:要求輸出某文件的第n行到第n+m行,可以使用head -n n+m file | tail -n m這樣的指令。

/usr/bin/nl命令:
nl 文件名
nl指令的用法和cat -n用法相似,即查看文件的同時也可以顯示行號。

/usr/bin/od命令:
od 文件名
od用于讀取非ASCII文件,例如二進制文件,使用cat或者vi讀取二進制文件是亂碼。

--------------------------------------------------------------------------------------------

硬鏈接/符號鏈接:
hard link就是重新建立一個inode鏈接到文件放置的block塊,并在查詢時利用原來的inode與后來添加的inode均可指定到該文件放置的地點,讀取兩個indoe的結果都是存取同一個文件的內容。但是使用硬鏈接有兩個最大限制:
1.不能跨文件系統,因為不同文件系統有不同的inode table;
2.不能鏈接目錄,因為目錄本身不是文件,僅僅消耗inode而沒有block,而inode是鏈接到block塊的。
symbolic link就是再建立一個獨立文件,這個文件會讓數據讀取操作指向它鏈接的那個文件。其缺點在于,當源文件被刪除,符號鏈接的文件就打不開了,屏幕顯示“無法開啟某文件”。

ln [-s] 源文件 目標文件
-s    提供符號鏈接,不加該參數為硬鏈接
假設a為文件,a.hard為硬鏈接文件,a.sym為符號鏈接文件,那么使用rm a之后,more a.hard依然正常顯示文件內容,而more s.sym顯示“不存在該目錄或文件”。這是因為a.sym為符號鏈接文件,對其進行操作相當于對a指定的block內文件進行操作;而a.hard為硬鏈接文件,相當于a的另外一個別名,去掉a只是去掉了其中一個別名而已,但文件還在block中。

-----------------------------------------------------------------------------------------

/usr/bin/which、/usr/bin/whereis和/usr/bin/find等指令:

which command
which查看命令所在可執行文件的位置(僅僅是可執行文件),即通過PATH環境變量到該路徑內尋找可執行文件。

whereis [-bmsu] command
-b    只尋找二進制文件
-m   只尋找在說明文件manual路徑下的文件
-s    只尋找source源文件
-u    只尋找非說明文檔的文件
whereis將命令行所在文件的路徑列出來。

find 路徑 [參數]
find命令將某一路徑下的文件列印出來。
-atime n      將n×24小時內被存取過的文件列出來
-ctime n      將n×24小時內被改變、新增的文件或目錄列出來
-mtime n      將n×24小時內被修改過的文件列出來
-newer file   把比file還要新的文件列出來
-gid n        尋找群組ID為n的文件
-group name   尋找群組名稱為name的文件
-uid n        尋找擁有者ID為n的文件
-user name    尋找用戶名為name的文件
-name file    尋找文件名為file的文件
-type type    尋找文件屬性為type的文件,包括b、c、d、p、l、s等。

locate dir/file
使用locate查找數據比find快,因為locate是從已經建立的數據庫/var/lib/slocate中查找數據,不用直接在硬盤中存取數據。

----------------------------------------------------------------------------------------------

查看硬盤或目錄的容量指令/bin/df和/bin/du:

df [-ikm]
查看硬盤的總容量、已用容量與inode等。
-i     使用inodes顯示結果
-k    使用KBytes顯示結果(默認)
-m   使用MBytes顯示結果

du [-abckms] [目錄名稱] (省略表示當前所在目錄)
統計某目錄下的文件容量。
-a    列出所有的文件與目錄,默認值是列出目錄的值
-b    列出的值以bytes輸出
-c    最后求總total
-k    列出的值以KB輸出(默認)
-m    列出的值以MB輸出
-s    只列出最后求總的值

---------------------------------------------------------------------------------------------

/bin/echo指令:
echo $variable
顯示當前variable變量。

/bin/env指令:
env
顯示系統的所有環境變量,某些重要的環境變量如下:
ENV=/home/amazon/.bashrc              用戶自定義環境變量的配置文件,root用戶的是/root/.bashrc
HISTSIZE=1000                               當前指令記憶數量
HOME=/home/amazon                       登入者的根目錄
HOSTNAME=localhost.localdomain  主機的名字
HOSTTYPE=i386                             主機硬件的等級狀態(i386、i686)
LANGUAGE =C                               默認語言的資料
LOGNAME=amazon                         登入者的帳號
MAIL=/var/spool/mail/amazon            郵件文件
PATH=......                                        指令路徑
PWD=/home/amazon                          當前所在路徑
USERNAME=amazon                       登入者的帳號
USER=amazon                                   用戶帳號

/bin/set指令:
set
顯示當前的環境變量,也會顯示自定義的變量。注意:自定義變量只能自己使用,而不會干擾到別人,除非修改了系統的配置文件。

變量設定規則:
var='......'
1.變量與變量內容用=連結;
2.等號兩邊不能直接接空格符,如name = variable錯誤;
3.變量只能是英文字母與數字,數字不能開頭;
4.有空格符的情況下,使用雙引號或者單引號括住變量,雙引號的特殊字符可以保留變量特性,如"$PATH",單引號不可以
5.\為轉義字符,可以將特殊字符(Enter、$、\、空格符、'等)變成一般符號,而不需要雙引號;
6.擴增變量需要用"$PATH":/home、"$PATH:/home"或者$PATH:/home這樣的形式累加;
7.若該變量需要在其他子程序執行,以export使變量可以動作,如export PATH;(什么意思?)
8.系統預設變量用大寫,自定義變量用小寫;
9.用unset variable取消變量

別名alias指令:
alias name='.....'
別名和變量的定義基本一致。
alias
查詢所有別名,包括系統默認別名和自定義別名。
unalias name
取消別名。

-----------------------------------------------------------------------------------------

/usr/bin/compress指令:
compress [-d] filename
-d    解壓縮參數,也可以使用uncompress filename指令
zcat filename.Z
zcat可以讀取.Z壓縮文件的內容。
注意:compress用來壓縮與解壓縮后綴名為.Z的文件。使用compress壓縮后,如果沒有給出其他參數,原始文件會被后來的.Z文件取代,使用uncompress指令也是一樣。

/usr/binbzip2和/usr/binbzcat指令:
bzip2 [-dz] filename                   
-d    解壓縮,可以使用bunzip2 filename取代
-z    壓縮(默認)
bzcat filename.bz2                      //讀取壓縮文件內容,而不需要解壓縮
注意:當文件后綴為.bz、.bz2、tbz、tbz2等時,可以使用bzip2進行解壓。原始文件會被壓縮文件.bz2等取代。

/bin/gzip和/bin/zcat指令:
gzip [-d#] filename
-d    解壓縮參數
-#    壓縮等級,1最不好,9最好,默認為6
zcat filename.gz
注意:zcat不僅可以讀取.gz后綴的壓縮文件,也可以同時讀取compress的壓縮文件(.Z)。原始文件會被壓縮文件.bz2等取代。

/bin/tar指令:
tar [-zxcvfpP] tarfile file
-z    同時具有gzip
-j    同時具有bzip
-x    解開一個壓縮文件
-t    查看tarfile的文件
-c    建立一個壓縮文件
-v    壓縮過程中顯示文件
-p    使用原文件的屬性
-P    可以使用絕對路徑
-f  file   使用file文件名作為目標
-N 'yyyy/mm/dd'    比后面接的日期還要新的文件才會被打包進新建的文件中
--exclude FILE  在壓縮過程中,不要將FILE打包
例子:
tar -cvf file.tar file                    //可以打包目錄,并且原文件/目錄依然存在
tar -zcvf file.tar.gz file
tar -xvf file.tar                         //不使用-zxvf,因為是.tar文件而不是.tar.gz文件,且壓縮文件依然存在
tar -zxvf file.tar.gz

tar -ztvf file.tar.gz                    //查看tar.gz里面的文件信息,而不需要解壓縮
tar -tvf file.tar
tar -N '2002/06/25' -zcvf home.tar.gz /home  //將/home目錄中,比日期還要新的文件打包進入home.tar.gz中
tar -zcvf host.tar.gz /home --exclude /amazon --exclude /host  //除amazon和host外,home目錄打包
tar -cvf - /home | tar -xvf -          //直接打包后解壓縮,沒有中間文件

-------------------------------------------------------------------------------------------

正則表達式/bin/grep:
grep "word" filename
將某filename文件中含有word的那一行顯示出來。
例子:
grep root /var/log/secure
grep "*[a-d]*" /var/log/secure
grep boot /etc/*                  //輸出的是/etc下文件內容含有boot的所有行
grep \* /etc/*
grep "a\{5\}" file                 //必須要有雙引號
符號:
^    句首字符相符
$    句尾字符相符
?    任何一個單一字符
*    任意幾個字符,包括0個
\     轉義字符,使^、?、*等變為普通字符
[list]       列表中的字符,例如[123456789]
[range]   列表范圍內的字符,例如[1-9]
\{n\}      與前一個相同字符連續n個
\{n,m\}  與前一個相同字符連續n到m個

------------------------------------------------------------------------------------------

如何增加用戶:
1.如果用戶所屬群組不存在,先新增群組。(增加用戶前,該群組必須存在)
2.新增用戶帳號。
如何刪除群組:
3.如果某群組中有用戶,先刪除用戶。(刪除群組前,該群組必須為空)
4.刪除群組。

groupadd [-g GID] groupname
-g GID    自行設定GID的大小,否則默認提供
groupdel groupname
注意:在刪除群組之前,必須將該群組下的用戶刪除。

useradd [-u UID] [-g GID] [-d HOME] [-mM] [-s shell] username
-u    直接給出一個UID
-g    直接給出一個GID(此GID必須已存在)
-d    直接將其根目錄指向已經存在的目錄(系統不會再默認建立)
-M   不建立根目錄
-s     定義其使用的shell
userdel [-r] username
-r    將該帳號的[home directory]和[/var/spool/mail/username]一并刪除,默認情況下是保留的

密碼管理與設定:
root可以設定任何樣式的密碼,而且可以幫助user設定他們的密碼,而user僅能修改自己的密碼。
passwd [username]

用戶身份切換:
su 
使用su可以進行身份切換,但是需要注意:
1.環境依然屬于當初登入的那個用戶,例如以test的身份登入linux,再切換到root,但是個人的mail、PATH等環境變量都還是test的。
2.對于環境變量,最麻煩的當屬PATH,為了避免一般用戶使用root的管理指令,通常linux會將指令分類放在兩個目錄下,分別是/bin和/sbin,其中/sbin存放的大多是root用來管理系統的指令。所以,當從一般用戶切換到root后,某些指令不可用,就是因為PATH中沒有/sbin這個路徑。 
具體解決方法如下:
1.使用命令的完整路徑。
2.將/sbin和/usr/sbin路徑添加到普通用戶的PATH路徑中。
3.使用su -命令切換,-是指同時切換用戶的環境變量
sudo [-u username/#uid] [command]
-u    將分身變成username的身份
使用sudo可以不需要root的密碼也能執行root身份的工作。具體情況略。

用戶查詢:
id [username]
直接輸入id查詢當前帳號的UID、GID與所屬群組,輸入id username生成username的相關信息。不需要察看/etc/passwd和/etc/group。
finger [-s] [username]
-s 完整列出
使用finger可以知道某用戶的相關信息,基本都在/etc/passwd上,還包括/var/spool/mail這個郵件存放地點,所以還會顯示是否有郵件信息。
groups
直接輸入groups就可以顯示當前用戶所屬的群組。

手動添加用戶:
大致步驟如下:
1.先建立需要的群組(vi /etc/group)
2.建立帳號的各個屬性(vi /etc/passwd)
3.將passwd與shadow同步(pwconv)
4.建立該帳號的密碼(passwd acount)
5.建立用戶根目錄(cp -r /etc/skel /home/account)
6.更改根目錄屬性(chown -R account.group /home/account)
刪除帳號步驟:
1.刪除/etc/passwd與/etc/shadow中的相關信息
2.轉到/home下刪除該帳號的根目錄
3.轉到/var/spool/mail下刪除該帳號的郵件