Unix/Linux筆記全集
1:Unix/Linux操作系統概述
要求:理解應用軟件和操作系統的區別,掌握系統的Kernel(核心)和shell(外殼)之間的關系以及各自的作用
Solaris:Solaris 是Sun Microsystems研發的計算機 操作系統。它被認為是UNIX操作系統的衍生版本之一。 目前Solaris屬於混合開源軟件。
操作系統Kernel和shell
Kernel:操作系統內核 操作系統內核是指大多數操作系統的核心部分。它由操作系統中用於管理存儲器、文件、外設和系統資源的那些部分組成。操作系統內核通常運行進程,並提供進程間的通信。
Shell:俗稱殼(用來區別於核),是指“提供使用者使用界面”的軟件(命令解析器)。它類似於DOS下的和後來的cmd.exe。它接收用戶命令,然後調用相應的應用程序。同時它又是一種程序設計語言。作為命令語言,它交互式解釋和執行用戶輸入的命令或者自動地解釋和執行預先設定好的一連串的命令;作為程序設計語言,它定義了各種變量和參數,並提供了許多在高級語言中才具有的控制結構,包括循環和分支。
經常使用的shell有以下:
Bourne Shell:提示符是#為根用戶,普通用戶是$
C Shell:提供命令行的歷史和編程環境;類似於C編程語言;不兼容Bourne shell語法;其中tcsh是csh的增強,完全兼容;提示符是#為根用戶,普通用戶是%;
在Fedora系統的shell中輸入第一條命令:
tarena@ubuntu:~$ su root //su root用來登陸獲取超級權限
密碼: //輸入管理員密碼
root@ubuntu:/home/tarena# echo $SHELL //echo會將輸入的字符串送往標准輸出,$SHELL表示進入外殼
/bin/bash //容器/進入子程序-/bin/bash 就表明該文件是一個 bash程序,需要由 /bin 目錄下的 bash 程序來解釋執行
bash:bash是shell類型中的一種。Linux/Unix的bash就相當於windows的dos命令提示符. 可以交互操作,也可以進行批處理操作,然而不同的是bash等shell的開發具有較強針對性,因而其功能及易用性遠比dos命令提示符大得多。要作個類比的話,Bash更接近Windows下的批處理文件而不是dos命令提示符。
2:Unix/Linux文件系統
要求理解文件系統的概念,對Linux根目錄下各個目錄有一定了解
Linux文件系統:
Linux下磁盤分區和目錄的關系如下:
任何一個分區都必須掛載到某個目錄上。
目錄是邏輯上的區分。分區是物理上的區分。
磁盤Linux分區都必須掛載到目錄樹中的某個具體的目錄上才能進行讀寫操作。
根目錄是所有Linux的文件和目錄所在的地方,需要掛載上一個磁盤分區。
目錄:包含了其他目錄或文件的位置,我們可以創建文件或者層次的目錄結構
子目錄:在其他目錄下面的目錄稱之為子目錄
Unix用戶賬戶文件
etc指的是Unix下的文件系統
使用more命令查看/etc/passwd文件,etc是目錄,passwd是文件,more將文件顯示在終端上,每次一屏(直接輸入more可得到更多選項文件)
執行命令前最好使用 su root 命令來獲取超級權限
root@ubuntu:/home/tarena# more /etc/passwd //使用more /etc/passwd命令查看etc目錄的passwd文件
root:x:0:0:root:/root:/bin/bash //容器/進入子程序-/bin/bash 就表明該文件是一個 bash程序,需要由 /bin 目錄下的 bash 程序來解釋執行
daemon:x:1:1:daemon:/usr/sbin:/bin/sh //以下是passwd文件的內容
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
syslog:x:101:103::/home/syslog:/bin/false
messagebus:x:102:105::/var/run/dbus:/bin/false
colord:x:103:108:colord colour management daemon,,,:/var/lib/colord:/bin/false
lightdm:x:104:111:Light Display Manager:/var/lib/lightdm:/bin/false
root:x:0:0:root:/root:/bin/bash:
root是管理員用戶,x表示密碼,但是這裡不顯示,已經放到shadow第一個0,表示用戶id,後一個表示用戶組id後面哪個root是對該用戶的描述,可以亂寫。,:/root:/bin/bash表示是文件路徑
使用more命令查看/etc/shadow密碼文件
root@ubuntu:/home/tarena# more /etc/shadow
root:$6$038l1vQ.$4P7hRhPDxAGPzZfaBpIJRWU5iFEGUBwfy1eP8aGZ/g/rjuyx5iwTc4lr2tjmzKZ
RQOXBImLHFQfGZk35TSWBQ1:15879:0:99999:7:::
daemon:*:15453:0:99999:7:::
bin:*:15453:0:99999:7:::
sys:*:15453:0:99999:7:::
sync:*:15453:0:99999:7:::
games:*:15453:0:99999:7:::
man:*:15453:0:99999:7:::
lp:*:15453:0:99999:7:::
mail:*:15453:0:99999:7:::
news:*:15453:0:99999:7:::
uucp:*:15453:0:99999:7:::
proxy:*:15453:0:99999:7:::
www-data:*:15453:0:99999:7:::
backup:*:15453:0:99999:7:::
list:*:15453:0:99999:7:::
irc:*:15453:0:99999:7:::
gnats:*:15453:0:99999:7:::
nobody:*:15453:0:99999:7:::
libuuid:!:15453:0:99999:7:::
syslog:*:15453:0:99999:7:::
messagebus:*:15453:0:99999:7:::
colord:*:15453:0:99999:7:::
beinan:x:500:500:beinan sun:/home/beinan:/bin/bash
linuxsir:x:501:502::/home/linuxsir:/bin/bash
第一字段:用戶名(也被稱為登錄名);在上面的例子中,我們看到這兩個用戶的用戶名分別是 beinan 和linuxsir;
第二字段:口令;在例子中我們看到的是一個x,其實密碼已被映射到/etc/shadow 文件中;
第三字段:UID ;請參看本文的UID的解說;
第四字段:GID;請參看本文的GID的解說;
第五字段:用戶名全稱,這是可選的,可以不設置,在beinan這個用戶中,用戶的全稱是beinan sun ;而linuxsir 這個用戶是沒有設置全稱;
第六字段:用戶的家目錄所在位置;beinan 這個用戶是/home/beinan ,而linuxsir 這個用戶是/home/linuxsir ;
第七字段:用戶所用SHELL 的類型,beinan和linuxsir 都用的是 bash ;所以設置為/bin/bash ;
2)關於UID 的理解:
UID 是用戶的ID 值,在系統中每個用戶的UID的值是唯一的,更確切的說每個用戶都要對應一個唯一的UID
,系統管理員應該確保這一規則。系統用戶的UID的值從0開始,是一個正整數,至於最大值可以在/etc/login.defs
可以查到,一般Linux發行版約定為60000; 在Linux 中,root的UID是0,擁有系統最高權限;
UID 在系統唯一特性,做為系統管理員應該確保這一標准,UID
的唯一性關系到系統的安全,應該值得我們關注!比如我在/etc/passwd 中把beinan的UID
改為0後,你設想會發生什麼呢?beinan這個用戶會被確認為root用戶。beinan這個帳號可以進行所有root的操作;
UID 是確認用戶權限的標識,用戶登錄系統所處的角色是通過UID 來實現的,而非用戶名,切記;把幾個用戶共用一個UID
是危險的,比如我們上面所談到的,把普通用戶的UID 改為0,和root共用一個UID
,這事實上就造成了系統管理權限的混亂。如果我們想用root權限,可以通過su或sudo來實現;切不可隨意讓一個用戶和root分享同一個UID ;
UID是唯一性,只是要求管理員所做的,其實我們修改/etc/passwd 文件,可以修改任何用戶的UID的值為0,
一般情況下,每個Linux的發行版都會預留一定的UID和GID給系統虛擬用戶占用,虛擬用戶一般是系統安裝時就有的,是為了完成系統任務所必須的用戶,但虛擬用戶是不能登錄系統的,比如ftp、nobody、adm、rpm、bin、shutdown等;
在Fedora 系統會把前499 個UID和GID 預留出來,我們添加新用戶時的UID
從500開始的,GID也是從500開始,至於其它系統,有的系統可能會把前999UID和GID預留出來;以各個系統中/etc/login.defs
中的 UID_MIN 的最小值為准; Fedora 系統 login.defs的UID_MIN是500,而UID_MAX
值為60000,也就是說我們通過adduser默認添加的用戶的UID的值是500到60000之間;而Slackware
通過adduser不指定UID來添加用戶,默認UID 是從1000開始;
beinan:$1$VE.Mq2Xf$2c9Qi7EQ9JP8GKF8gH7PB1:13072:0:99999:7:::
linuxsir:$1$IPDvUhXP$8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108:
第一字段:用戶名(也被稱為登錄名),在/etc/shadow中,用戶名和/etc/passwd 是相同的,這樣就把passwd 和shadow中用的用戶記錄聯系在一起;這個字段是非空的;
第二字段:密碼(已被加密),如果是有些用戶在這段是x,表示這個用戶不能登錄到系統;這個字段是非空的;
第三字段:上次修改口令的時間;這個時間是從1970年01月01日算起到最近一次修改口令的時間間隔(天數),您可以通過passwd 來修改用戶的密碼,然後查看/etc/shadow中此字段的變化;
第四字段:兩次修改口令間隔最少的天數;如果設置為0,則禁用此功能;也就是說用戶必須經過多少天才能修改其口令;此項功能用處不是太大;默認值是通過/etc/login.defs文件定義中獲取,PASS_MIN_DAYS 中有定義;
第五字段:兩次修改口令間隔最多的天數;這個能增強管理員管理用戶口令的時效性,應該說在增強了系統的安全性;如果是系統默認值,是在添加用戶時由/etc/login.defs文件定義中獲取,在PASS_MAX_DAYS 中定義;
第六字段:提前多少天警告用戶口令將過期;當用戶登錄系統後,系統登錄程序提醒用戶口令將要作廢;如果是系統默認值,是在添加用戶時由/etc/login.defs文件定義中獲取,在PASS_WARN_AGE 中定義;
第七字段:在口令過期之後多少天禁用此用戶;此字段表示用戶口令作廢多少天後,系統會禁用此用戶,也就是說系統會不能再讓此用戶登錄,也不會提示用戶過期,是完全禁用;
第八字段:用戶過期日期;此字段指定了用戶作廢的天數(從1970年的1月1日開始的天數),如果這個字段的值為空,帳號永久可用;
第九字段:保留字段,目前為空,以備將來Linux發展之用;
使用more命令查看/etc/group用戶組的配置文件
root@ubuntu:/home/tarena# more /etc/group //根用戶@該系統名稱:/首頁/用戶名稱# more /文件系統目錄/用戶組的配置文件
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:tarena
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:tarena
floppy:x:25:
tape:x:26:
sudo:x:27:tarena
audio:x:29:pulse
dip:x:30:tarena
/etc/group
文件是用戶組的配置文件,內容包括用戶和用戶組,並且能顯示出用戶是歸屬哪個用戶組或哪幾個用戶組,因為一個用戶可以歸屬一個或多個不同的用戶組;同一用
戶組的用戶之間具有相似的特征。比如我們把某一用戶加入到root用戶組,那麼這個用戶就可以浏覽root用戶家目錄的文件,如果root用戶把某個文件
的讀寫執行權限開放,root用戶組的所有用戶都可以修改此文件,如果是可執行的文件(比如腳本),root用戶組的用戶也是可以執行的;
用戶組的特性在系統管理中為系統管理員提供了極大的方便,但安全性也是值得關注的,如某個用戶下有對系統管理有最重要的內容,最好讓用戶擁有獨立的用戶組,或者是把用戶下的文件的權限設置為完全私有;另外root用戶組一般不要輕易把普通用戶加入進去.
root:x:0:root,linuxsir 注:用戶組root,x是密碼段,表示沒有設置密碼,GID是0,root用戶組下包括root、linuxsir以及GID為0的其它用戶 (可以通過/etc/passwd查看);
beinan:x:500:linuxsir 注:用戶組beinan,x是密碼段,表示沒有設置密碼,GID是500,beinan用戶組下包括linuxsir用戶及GID為500的用戶 (可以通過/etc/passwd查看);
linuxsir:x:502:linuxsir 注:用戶組linuxsir,x是密碼段,表示沒有設置密碼,GID是502,linuxsir用戶組下包用戶linuxsir及GID為502的用戶(可以通過/etc/passwd查看);
_
3:Unix/Linux的常用命令
要求:熟識掌握各個常用命令的使用方法,針對常用參數加深理解
UNIX命令提示符:
在命令行下,操作系統會顯示一提示符,提示用戶在此提示符後可以輸入一行命令。不同的Shell有不同的缺省提示符:
B Shell和K Shell的缺省提示符為"$";
C Shell的缺省提示符為"%";
但當以root用戶登錄時,系統提示符統一缺省為"#"。
用戶可以更改自己的缺省Shell和提示符
命令格式:
UNIX命令由一個命令(command)和零到多個參數構成,命令和參數之間,以及參數與參數之間用空格隔開。UNIX的命令格式和DOS的命令格式相似,但UNIX的命令區分大小寫,且命令和參數之間必須隔開
命令 [-選項] [參數] //其中命令相當於一個變量,選項和參數相當於變量的參數,選項是可選的,但是參數是必須選擇的
其中選項和參數是可選的
可以在一行中輸入多個命令,命令間用“;”分開:
mkdir tmp ; cp file1 tmp/file2 ; ls -l tmp //UNIX會順序執行以上三條命令
基本命令
在輸入一個不完全的命令或文件名時按tab可以補全
^c:終止當前命令
sudo passwd root:重新設置擁有者密碼
sudo init 0:關機
clear:清屏
pwd:打印當前路徑
mv:文件重命名;mv 舊文件名 新文件名;mv a.txt a.sh //把a.txt更換成a.sh
cd:改變路徑;相對路徑就是從當前目錄出發描述路徑的方式;絕對路徑就是從根目錄出發描述路徑的方式,路徑只要有,根目錄,上一級目錄,當前目錄,用戶主目錄
cd ..:使用上一級目錄
cd .:使用當前目錄
cd /:使用根目錄
root@ubuntu:/home/tarena# pwd //打印當前路徑命令
/home/tarena //顯示當前路徑為/home/tarena
root@ubuntu:/home/tarena# cd //改變路徑,選項為空
root@ubuntu:~# pwd //再次打印路徑
/root //顯示路徑為根目錄
root@ubuntu:~# cd /etc //cd /etc 改變路徑為etc
root@ubuntu:/etc# pwd //再次打印路徑
/etc //顯示在etc目錄中
ls:顯示當前目錄的內容(文件夾和文件)
ls -a:顯示全部內容,包括隱藏文件
ls -l:詳細形式顯示文件:
root@ubuntu:/# ls -l
總用量 92 //該目錄下所有文件及目錄列表第5個字段的和(以k為單位),也就是該目錄的大小
drwxr-xr-x 2 root root 4096 Aug 20 2012 bin
drwxr-xr-x:文件屬性和權限描述;第一位為d表示目錄,"-"為普通文件,"|"為鏈接文件;rwx表示擁有者對該文件的訪問權限,r讀,w寫(可生成文件或子目錄,刪除文件或子目錄),x執行(可查找該目錄下內容),-無權限;r-x同組用戶對該文件的訪問權限;r-x其他人對該文件的訪問權限
2:文件的硬鏈接數
root:擁有者
root:所屬組group
4096:文件大小,單位:byte字節
Aug 20 2012:修改日期-2012年8月20
bin:文件名
chmod:修改權限,有符號模式和絕對模式
符號模式:chmod g+w nc.openbsd
g:表示同組用戶,為u所有者,為o其他用戶,為a所有用戶
+:表示增加權限,為-減去權限,為=最終權限(chmod g/o=/+w/- 表示同組用戶和其他用戶分別增加寫權限和減去所有權限),
w:表示寫入,r為讀取權限,x為執行權限
root@ubuntu:/bin# ls -l nc.openbsd //查看文件nc.openbsd的詳細
-rwxr-xr-x 1 root root 26152 Jul 2 2011 nc.openbsd //同組用戶只要讀取和執行權限
root@ubuntu:/bin# chmod g+w nc.openbsd //為同組用戶增加寫入權限
root@ubuntu:/bin# ls -l nc.openbsd //再查看文件nc.openbsd的詳細
-rwxrwxr-x 1 root root 26152 Jul 2 2011 nc.openbsd //現在同組用戶和擁有者權限一樣了
絕對模式:
文件或目錄的權限用三個數字表示,從左到右,第一位表示所有者的權限,第二位表示同組用戶權限,第三位表示其他用戶權限;
1:表示執行權限
2:寫入權限
4:讀取權限
三個權限數值可以組成:0.1.2.3.4.5.6.7;
0沒有任何權限
1只有執行權限
2只有寫入權限
3執行和寫入
4只有讀取權限
5執行和讀取權限
6寫入和讀取權限
7三個權限都有
root@ubuntu:/bin# ls -l nc.openbsd //查看文件nc.openbsd的詳細
-rwx-w-r-x 1 root root 26152 Jul 2 2011 nc.openbsd //目前擁有者為寫入和讀取,同組用戶為執行和讀取,其他用戶讀取執行
root@ubuntu:/bin# chmod 644 nc.openbsd //更改三個用戶權限
root@ubuntu:/bin# ls -l nc.openbsd //再查看文件nc.openbsd的詳細
-rw-r--r-- 1 root root 26152 Jul 2 2011 nc.openbsd //擁有者變成讀取和寫入,同組用戶只有讀取,其他用戶只有讀取
touch:文件創建
在當前目錄中創建文件:touch a.txt //創建一個txt文本a
mkdir:目錄創建
在當前目錄中創建子目錄: mkdir mumu //創建一個子目錄munu
如果需要一次創建一個多層目錄,需要使用 -p選項:
mkdir -p BBB/Test //在工作目錄下的 BBB 目錄中,建立一個名為 Test 的子目錄。若 BBB 目錄原本不存在,則建立一個,若不加 -p,且原本 BBB目錄不存在,則產生錯誤
cp:復制
root@ubuntu:/bin# cp ./a.txt ~/.. //cp復制;"."表示當前目錄,~代表的是你當前用戶的home目錄;..上一級目錄;意味把當前位置的文件復制到當前用戶的home目錄的上一級目錄
root@ubuntu:/bin# ls ~/.. //查看當前用戶的home目錄的上一級目錄是否已經復制文件
mv:文件移動
mv a.txt ~;ls //移動當前位置的a.txt文件到當前用戶的home目錄中,然後執行ls查看當前文件夾有什麼文件或文件夾,可以知道a.txt文件已經轉移,這是一行多命令
mv /usr/lib/* /001 //是將 /usr/lib/下所有的東西移到/001/中
mv /usr/lib/ /001 //將lib和其內部的所有東西移到/001/中。 此後,/usr裡不再有lib; /001裡有lib/及其原有的東西
刪除命令
rm:刪除一個文件或目錄
rm -r:刪除一個目錄,該目錄裡面可以包含子目錄和文件
rmdir:刪除一個目錄,該目錄必須為空目錄,裡面不能有其他東西
rm a.txt;ls //刪除當前目錄中文件,然後執行顯示當前目錄
rmdir ./BBB/;ls //rm -r刪除當前目錄中的BBB目錄,注意從當前目錄組進行操作都要加 ‘.’ ,如果是操作當前目錄的文件,就不用加 ‘.’ 。
rm -r ./BBB/;ls //rm -r刪除當前目錄中的BBB目錄,並且BBB目錄不為空,BBB目錄裡面還包含其他目錄和文件
說明:一般在刪除的時候,會有確認提示,輸入y表示是,n表示否
rm -f BBB:略過不存在的文件或目錄,不顯示任何信息
ln:創建連接
硬鏈接
root@ubuntu:~# touch a.txt;echo wenhanqin > a.txt //創建了一個文本;//echo會將字符串送往標准輸出,這裡是把字符輸出到文本中,如果命令缺少指定文本,就輸出到屏幕
root@ubuntu:~# cat a.txt //cat查看當前目錄的文件內容,
wenhanqin
root@ubuntu:~# ln a.txt b;cat b //ln創建一個執行文本的指針b;然後使用cat查看指針b,看到的內容等於指向的文本的內容
wenhanqin
root@ubuntu:~# ls //顯示當前目錄的內容
a.txt b //發現有兩個文件
root@ubuntu:~# ls -l //詳細顯示
總用量 8
-rwxr-xr-x 2 root root 10 Jun 26 21:23 a.txt
-rwxr-xr-x 2 root root 10 Jun 26 21:23 b //發現雖然沒有後綴名,但是是指向文件的指針,所以b實際上是一個文件,因為文本和b開頭都是 -
硬鏈接本質上就是磁盤上文件數據的另一個訪問數據,刪除本來的文件時,系統關閉了文件對磁盤數據的訪問路徑,但是不影響硬鏈接b對數據的訪問,如下:
root@ubuntu:~# touch a.txt;echo wenhanqin > a.txt
root@ubuntu:~# cat a.txt
wenhanqin
root@ubuntu:~# ln a.txt b;cat b
wenhanqin
root@ubuntu:~# rm a.txt //刪除文件a.txt
root@ubuntu:~# ls -l
總用量 4
-rw-r--r-- 1 root root 10 Jun 26 21:40 b //b還存在,不因為本來的文件被刪除就消失
root@ubuntu:~# cat b //顯示b訪問路徑
wenhanqin //數據依然存在
root@ubuntu:~#
軟連接:軟連接裡面只保存了目標文件的位置,當刪除目錄文件的時候,軟連接文件也失去了訪問磁盤數據的通道
root@ubuntu:~# ls //現在可以看到有兩個文件,b是硬鏈接
a.txt b
root@ubuntu:~# ln -s a.txt c;ls -l //創建一個連接到a.txt文件的指針c,ln參數為-s表示軟連接;然後顯示目錄詳細
總用量 8
-rw-r--r-- 2 root root 10 Jun 26 21:54 a.txt
-rw-r--r-- 2 root root 10 Jun 26 21:54 b
lrwxrwxrwx 1 root root 5 Jun 26 21:54 c -> a.txt //發現c是指向a.txt文件的指針,軟連接相當硬鏈接,軟連接更像是指針形式
root@ubuntu:~# cat c //閱讀指針c發現內容和文本是一樣的
wenhanqin
root@ubuntu:~# rm a.txt;cat b;cat c //刪除a.txt;閱讀硬鏈接b;閱讀軟連接c
wenhanqin //硬鏈接能讀出來
cat: c: 沒有那個文件或目錄 //因為a.txt被刪除,執行a.txt的軟連接也就失去了訪問的通道;另外在shell裡看到的軟連接名稱顏色區別於其他類型名稱顏色,這裡是藍色
echo:會將輸入的字符串送往標准輸出
echo o //就會打印當前字符o
echo wenhanq > a.txt //輸出字符到a.txt文件中
cat:查看當前目錄的文件內容
cat a.txt : cat 程序讀a.txt文件,並把它顯示出來,cat獲取到的是一個a.txt文件名
cat < a.txt : cat程序 顯示 a.txt文件的內容 ,cat程序獲取的不是文件名,而是a.txt的內容
more:查看當前目錄的文件內容,和cat不同的是,more是分屏顯示文件內容,並且more不能把直接從鍵盤輸入的字符輸出到屏幕
root@ubuntu:/# more etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
--more--(78%)
回車鍵查看下一行,空格鍵查看下一屏幕內容,按鍵q推出
head:查看文件開頭的n行
head -5 etc/passwd //參數-5表示只查看文件的開頭5行
tail:查看文件最後的n行
tail -5 etc/passwd //參數-5表示只查看文件的最後5行
find:文件查找命令
注意,命令中的語句要查找的路徑必須在該路徑之前輸入,不能進入到b路徑裡面,然後查找b路徑的文件,這樣是不行的;並只能搜索到文件,不能查找目錄
find /路徑名 -選項 -對象方式
路徑名:用.來表示當前目錄,用/來表示系統根目錄;
對象:將匹配的文件輸出到標准輸出
方式:相當放大查找范圍,看下例題:
root@ubuntu:/# find /etc -name pass* //查找路徑為etc,選項-name表示要查找文件名稱;pass表示被查找的文件名稱;*表示凡是符合pass開頭的文件都被查找出來
/etc/passwd //passwd符合要求被查找出來
/etc/passwd- //passwd-符合要求被查找出來
/etc/cron.daily/passwd
/etc/pam.d/passwd
root@ubuntu:/#
選項參數:
-name:按照文件名查找文件
-perm:按照文件權限查找
-prune:使用這一選項可以使find命令不在當前指定的目錄中查找,如果同時使用-depth選項,那麼-prune將被find命令忽略。
-user:
按照文件屬主來查找文件
-group:
按照文件所屬的組來查找文件
-mtime?-n?+n:
按照文件的更改時間來查找文件,?-?n表示文件更改時間距現在n天以內,+?n表示文件更改時間距現在
-nogroup:查找無有效所屬組的文件,即該文件所屬的組在/etc/groups中不存在
-nouser:查找無有效屬主的文件,即該文件的屬主在/etc/passwd中不存在
-newer?file1 ! file2:查找更改時間比文件file1新但比文件file2舊的文件
-type:查找某一類型的文件;
b - 塊設備文件;d - 目錄;c - 字符設備文件;p - 管道文件;l - 符號鏈接文件;f - 普通文件;
-cpio:對匹配的文件使用cpio命令,將這些文件備份到磁帶設備中
-amin?n:查找系統中最後N分鐘訪問的文件
atime?n:查找系統中最後n*24小時訪問的文件
cmin?n:查找系統中最後N分鐘被改變文件狀態的文件
mmin?n:查找系統中最後N分鐘被改變文件數據的文件
更多http://wenku.baidu.com/view/d47e7715866fb84ae45c8d0b.html
grep:內容查找命令
在linux中grep命令是非常有用的,它和管道(|)配合使用,非常強大,用於搜索文本文件.如果想要在幾個文本文件中查找一字符串,可以使用‘grep’命令。‘grep’在文本中搜索指定的字符串。
假設您正在‘/usr/src/linux/Documentation’目錄下搜索帶字符串‘magic’的文件:
$?grep?magic?/usr/src/linux/Documentation/*??
sysrq.txt:*?How?do?I?enable?the?magic?SysRQ?key???
sysrq.txt:*?How?do?I?use?the?magic?SysRQ?key??
其中文件‘sysrp.txt’包含該字符串,討論的是Sysrq的功能。
默認情況下,‘grep’只搜索當前目錄。如果此目錄下有許多子目錄,‘grep’會以如下形式列出
grep:?sound:?Is?a?directory?
這可能會使‘grep’的輸出難於閱讀。這裡有兩種解決的辦法:
明確要求搜索子目錄:grep?-r??
或忽略子目錄:grep?-d?skip??
當然,如果預料到有許多輸出,您可以通過管道將其轉到‘less’上閱讀:$?grep?magic?/usr/src/linux/Documentation/*?|?less
有一點要注意,您必需提供一個文件過濾方式(搜索全部文件的話用?*)。如果您忘了,‘grep’會一直等著,直到該程序被中斷。如果您遇到了這樣的情況,按<CTRL?c>,然後再試。
在etc/passwd文件中搜索和root字符有關的內容:
root@ubuntu:/# grep root /etc/passwd //查找/etc/passwd文件中的root字符
root:x:0:0:root:/root:/bin/bash
root@ubuntu:/# grep -n root /etc/passwd //查找/etc/passwd文件中的root字符,參數-n表示顯示匹配行及 行號
1:root:x:0:0:root:/root:/bin/bash
參數:
-?:同時顯示匹配行上下的?行;grep -2 root /etc/passwd 同時顯示匹配行的上下2行
-b:打印匹配行前面打印該行所在的塊號碼
-c:只輸出匹配行的計數
-f:從文件中提取模板,空文件中包含0個模板,所以什麼都不匹配
-h:查詢多文件時不顯示文件名
-|:查詢多文件時只輸出包含匹配字符的文件名
-i:不區分大 小寫(只適用於單字符)
-q:取消顯示,只返回退出狀態。0則表示找到了匹配的行
-n:顯示匹配行及 行號
-v:反檢索,只顯示不匹配的行
-V:顯示軟件版本信息
-s:不顯示不存在或無法讀取文件的錯誤信息
-L:打印不匹配模板的文件清單
-l:打印匹配模板的文件清單。
ps:查看進程;ps -a 參數:
-a:列出所有的行程
-w:顯示加寬可以顯示較多的資訊
-au:顯示較詳細的資訊
-aux:顯示所有包含其他使用者的行程
au:顯示輸出格式,包含使用者,PID,%cpu,路徑,時間等信息
USER:行程擁有者
PID:pid為文本文件,內容只有一行, 記錄了該進程的ID;防止進程啟動多個副本。只有獲得pid文件(固定路徑固定文件名)寫入權限(F_WRLCK)的進程才能正常啟動並把自身的PID寫入該文件中。其它同一個程序的多余進程則自動退出。
%MEM:占用的記憶體使用率
VSZ:占用的虛擬記憶體大小
RSS:占用的記憶體大小
TTY:終端的次要裝置號碼
STAT:該行程的狀態
D:不可中斷的靜止
R:正在執行中
S:靜止狀態
T:暫停執行
Z:不存在但暫時無法消除
W:沒有足夠的記憶體分頁可分配
<:高優先序的進程
N:低優先序的進程
L:有記憶體分頁分配並鎖在記憶體內
START:進程開始時間
TIME:執行的時間
COMMAND:所執行的指令
kill:殺掉指定進程
kill [-s <信息名稱或信號編號>][程序;pid] 或 kill [-l <信息編號>]
這裡的信號機制類似C++的映射消息機制
root@ubuntu:/home/tarena# sleep 10& //顯示sleep的進程PID
[1] 7914
root@ubuntu:/home/tarena# ps //sleep進程已經在列表中了
PID TTY TIME CMD
7800 pts/1 00:00:00 su
7809 pts/1 00:00:00 bash
7914 pts/1 00:00:00 sleep
7916 pts/1 00:00:00 ps
root@ubuntu:/home/tarena# kill 7914 //終止sleep進程
root@ubuntu:/home/tarena# ps //再次查看,已經沒有了
PID TTY TIME CMD
7800 pts/1 00:00:00 su
7809 pts/1 00:00:00 bash
7918 pts/1 00:00:00 ps
如果使用了信號機制,就相當於讓一個進程去執行一個映射函數
kill [ -s signal | -p ] [ -a ]
-s:指定發送的信號
-p:模擬發送信號
-l:指定信號的名稱列表
pid:要中止進程的ID號
Signal:表示信號
sleep:在shell腳本中延遲時間
以下用法中<n>可以為小數
sleep ns 或 sleep n //延遲n秒
sleep nm //延遲n分鐘
sleep nh //延遲n小時
sleep nd //延遲n天
[root@jfht ~]# date; sleep 5; date //輸出日期數據;延遲5秒;輸出日期數據
2011年 04月 17日 星期日 19:49:23 CST
2011年 04月 17日 星期日 19:49:28 CST
top:查看所有的進程的信息,包括使用的空間,cpu,pid,時間等
su:切換用戶
tarena@ubuntu:~$ whoami //顯示當前用戶為客戶tarena
tarena
tarena@ubuntu:~$ su root //切換到超級管理員
密碼:
root@ubuntu:/home/tarena# //現在就是超級管理員權限了,提示符變成了#
whoami:顯示當前使用者用戶
passwd:修改密碼
sudo passwd root:修改密碼
*:通配任意多個任意字符
root@ubuntu:/home/tarena# touch file_1 file_2 file_3 //創建3個目錄
root@ubuntu:/home/tarena# ls //查看
Desktop examples.desktop file_3 Public workdir
Documents file_1 Music Templates 安裝軟件列表
Downloads file_2 Pictures Videos 安裝軟件列表~
root@ubuntu:/home/tarena# rm -f file* //刪除所以匹配file的文件
root@ubuntu:/home/tarena# ls
Desktop Downloads Music Public Videos 安裝軟件列表
Documents examples.desktop Pictures Templates workdir 安裝軟件列表~
root@ubuntu:/home/tarena#
?:通配任意一個字符
root@ubuntu:/home/tarena# ls //查看
Desktop examples.desktop file_3 Public workdir
Documents file_1 Music Templates 安裝軟件列表
Downloads file_2 Pictures Videos 安裝軟件列表~
root@ubuntu:/home/tarena# ls file? //查看匹配file的文件
file_1 file_3
[]:通配一個字符集或者范圍
root@ubuntu:/home/tarena# ls //查看
file_a file_b file_c file_d file_e
root@ubuntu:/home/tarena# ls file[a-c] //查看匹配file的文件
file_a file_c
輸入重定向
echo hello > a.txt //輸入字符到文本a.txt
cat < a.txt > b.txt //輸出文本a.txt的字符到文本b.txt 中
cat b.txt //輸出文本b.txt字符到桌面
hello
輸出重定向:
echo hello //輸入字符到屏幕
hello
echo hello > a.txt //輸入字符到文本a.txt
cat a.txt //輸出文本a.txt到屏幕
hello
追加:不會出現覆蓋內容
cat a.txt //輸出文本a.txt到屏幕
hello
echo hi >> a.txt //追加輸入字符到屏幕
cat a.txt //輸出文本a.txt到屏幕
hello
hi
|:管道符,將一個命令的輸出作為下一個命令的輸入
ls -l /etc | more //詳細輸出etc目錄內容,然後把這些目錄裡的文件名作為more參數,被more讀出來到屏幕
;:命令分隔符,在一行中輸入多個命令,用分隔符隔開,然後回車就可以從左到右順序執行這些命令
cal;pwd;date //打印日歷;打印路徑;打印當前時間
\:續行符
cat /etc/passwd \
> | sort > ~/userinfo
讀取passwd文件內容到sort輸出的userinfo文件中
sort:針對文本文件的內容,以行為單位來排序,詳見網絡解析
4:Unix/Linux常用文本編輯器vi
要求:熟識掌握vi三種操作模式之間的切換,掌握命令模式下各個命令的使用
vi的操作模式分為三種
命令mode //控制屏幕光標的移動,字符或光標的刪除,移動復制某區段及進入Insert mode下,或者到Last line mode
底行命令mode //儲存文件或離開編輯器,也可設置編輯環境,如尋找字符串、列出行號等
文本編輯mode //唯有在Insert mode下,才可做文字數據輸入,按Esc等可回到Comand mode
vi a.txt //輸入vi及文件名稱後,即可進入vi全屏幕編輯畫面
注意:進入vi之後是處於“Command mode”下,您要切換到Insert mode才能輸入文字
輸入模式:
按ESC鍵轉換回Command mode,在Command mode下按‘i’、‘a’或‘o’三鍵就可進入Insert mode
i: 插入,從目前光標所在之處插入所輸入的文字。
a: 增加,目前光標所在的下一個字開始輸入文字。
o: 插入新的一行,從行首開始輸入文字。
說明:您目前處於Insert mode,您就只能一直打字。假如您發現打錯字了,想用光標鍵往回移動,將該字刪除,就要按ESC鍵轉換回Command mode,再按方向鍵移動光標刪除文字
vi可以直接用鍵盤上的光標鍵來上下左右移動,但正規的vi是用小寫英文字母
h、j、k、l,分別控制光標左、下、上、右移一格。
Ctrl+B:屏幕往後移動一頁。[常用]
Ctrl+F:屏幕往前移動一頁。[常用]
Ctrl+U:屏幕往後移動半頁。
Ctrl+D:屏幕往前移動半頁。
0 (數字零):移動文章的開頭。[常用]
G:移動到文章的最後。[常用]
w:光標跳到下個word的開頭。[常用]
e:光標跳到下個word的字尾。
b:光標回到上個word的開頭。
$:移到光標所在行的行尾。[常用]
^:移到該行第一個非空白的字符。
0:移到該行的開頭位置。[常用]
#:移到該行的第#個位置,例:51、121。[常用]
刪除文字:在命令模式下
x:每按一次刪除光標所在位置的後面一個字符。[超常用]
#x:例如,6x 表刪除光標所在位置的後面6個字符。[常用]
X:大字的X,每按一次刪除光標所在位置的前面一個字符。
#X:例如,20X 表刪除光標所在位置的前面20個字符。
dd:刪除光標所在行。[超常用]
#dd:例如,6dd表刪除從光標所在的該行往下數6行之文字。[常用]
5dd:刪除五行
dw:刪除當前詞
在底行命令模式下:5,10d 刪除從第五行到第十行
拷貝和粘帖文本:在命令模式下
yw:將光標所在位置到字符尾的字符復制到緩沖區中。
p:將緩沖區內的字符粘貼到光標所在位置(指令‘yw’與‘p必須搭配使用)。
yy:復制光標所在行。 p粘帖
#yy:如:6yy表示復制從光標所在的該行往下數6行之文字。 p粘帖
“ayy:將復制行放入buffer a, vi提供buffer功能,可將常用的數據存在buffer
“ap:將放在buffer a的數據粘貼。
“b3yy:將三行數據存入buffer b。
“b3p:將存在buffer b的資料粘貼
跳至指定行:命令模式下
Ctrl+G:列出光標所在行的行號。
底行命令模式
按ESC鍵轉換回Command mode,在Command mode下按" : / ? "進入命令模式,底行命令模式命令參數:
:w filename:(輸入“w filename”,將文章存入指定的文件名filename)
:wq:保存文件並退出vi
:wq!:強制保存文件,並退出vi
:q!:強制離開並放棄編輯的文件
:q:不保存文件,退出vi
:e!:放棄所有修改,從上次保存文件開始再編輯
:w:保存文件但不退出vi
:w!:強制保存,不推出vi
列出行號:在底行命令模式下
set nu: 會在文章的每一行前面列出行號。
#:井號代表一個數字,再按Enter就會跳到該行了,
/字符串:尋找字符串;先按/,再輸入您想尋找的字,如果第一次找的關鍵字不是您相盡可能的,可以一直按n會往下尋找到您要的關鍵字為止。
?關鍵字:先按?,再輸入您想尋找的字,如果第一次找的關鍵字不是您想要的,可以按n會往前尋找到您要的關鍵字為止
#G:15G,表示移動光標當前頁的第15行行首。
數字:例如 :15 光標停留在指定的15行
高級編輯命令
~:改變大小寫 //not use
J:把當前行和下一行連起來
u:廢除剛才的編輯操作(每按一次n,撤消一次)
取代字符串:在last line mode輸入
1,$s/舊字符串/新字符串/g //會將全文的string字符串取代為replace字符串,1,$s就是指搜尋區間為文章從頭至尾的意思,g則是表示全部取代不必確認
%s/string/replace/c:同樣會將全文的string字符串取代為replace字符串,和上面指令不同的地方是,%s和1,$s是相同的功能,c則是表示要替代之前必須再次確認是否取代
1,20s/string/replace/g:將1至20行間的string替代為relpace字符串
shell腳本
要求:理解腳本的概念和作用,掌握簡單腳本的編寫
腳本文件後綴名必須為.sh
root@ubuntu:/home/tarena# touch a.sh //創建一個腳本文件
root@ubuntu:/home/tarena# vi a.sh //編輯腳本文件,這裡名寫了三行;pwd cal date
root@ubuntu:/home/tarena# ls -l a.sh //現在看到我們對腳本文件是沒有訪問權限的
-rw-r--r-- 1 root root 13 Jun 29 11:47 a.sh
root@ubuntu:/home/tarena# chmod 777 a.sh //修改訪問權限
root@ubuntu:/home/tarena# ls -l a.sh
-rwxrwxrwx 1 root root 13 Jun 29 11:47 a.sh //現在可訪問該腳本文件了
root@ubuntu:/home/tarena# ./a.sh //編譯該腳本文件的是在當前名錄,按照這個方式來編寫
/home/tarena //打印路徑
June 2013 //日期
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8 //打印日歷
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Sat Jun 29 11:49:24 CST 2013 //打印文件數據
root@ubuntu:/home/tarena#
腳本編輯:
pwd
cal
date