linux 啟動時會看到很多啟動信息。 一般 linux 啟動分為5個階段:
內核的引導 Boot運行 init系統初始化建立終端用戶登陸系統Linux 常見的rc的含義
在linux中經常會碰到 bashrc,rc.d,rc.local等帶有rc的文件或目錄,一般都是啟動時需要加載的。
英文原義:RC (runcom,run command)中文釋義:含有程序(應用程序甚至操作系統)啟動指令的腳本文件注解:這一文件在操作系統啟動時會自動執行,它含有要運行的指令(命令或其它腳本)列表。
真正的rc啟動腳本實際上都是放在/etc/rc.d/init.d/目錄下。 而這些rc啟動腳本有著類似的用法,它們一般能接受start、stop、restart、status等參數。
用戶登陸方式
一般來說,用戶的登錄方式有三種:
Linux 的賬號驗證程序是 login,login 會接收 mingetty 傳來的用戶名作為用戶名參數。 然后 login 會對用戶名進行分析:如果用戶名不是 root,且存在 /etc/nologin 文件,login 將輸出 nologin 文件的內容,然后退出。 這通常用來系統維護時防止非root用戶登錄。只有/etc/securetty中登記了的終端才允許 root 用戶登錄,如果不存在這個文件,則 root 用戶可以在任何終端上登錄。 /etc/usertty文件用于對用戶作出附加訪問限制,如果不存在這個文件,則沒有其他限制。
Linux 文件屬性
Linux 是一種典型的多用戶系統,不同的用戶處于不同的地位,擁有不同的權限。 為了保護系統的安全性,Linux系統對不同的用戶訪問同一文件(包括目錄)的權限做了不同的規定。
在 Linux 中,可以使用 ls -l 命令來顯示一個文件的屬性以及文件所屬的用戶和組。如:

代碼語言:Javascript代碼運行次數:0運行復制
ls -ltotal 23028-rw-rw-r-- 1 deploy deploy 2 Dec 25 21:54 10-rw-rw-r-- 1 deploy deploy 0 Dec 18 16:48 6-rw-rw-r-- 1 deploy deploy 97119 Dec 20 23:52 arthas-boot.jar-rw-rw-r-- 1 deploy deploy 461 Dec 18 20:49 awkvars.out-rw-rw-r-- 1 deploy deploy 5 Dec 27 12:36 emp.awk-rw-r--r-- 1 deploy deploy 81 Dec 17 16:12 emp.data-rw-r--r-- 1 deploy deploy 23 Dec 29 12:35 hello.txt-rw-rw-r-- 1 deploy deploy 43379 Dec 28 12:27 index.html-rw-r--r-- 1 deploy deploy 109230 Dec 18 14:52 loan.txtdrwxr-xr-x 4 deploy deploy 4096 Jan 9 16:17 lua-5.3.0-rw-rw-r-- 1 deploy deploy 278045 Jan 6 2015 lua-5.3.0.tar.gzdrwxr-xr-x 4 deploy deploy 4096 Mar 18 2015 luarocks-2.2.1-rw-rw-r-- 1 deploy deploy 114431 Oct 31 04:52 luarocks-2.2.1.tar.gzdrwxr-xr-x 19 deploy deploy 4096 Dec 28 14:18 Python-3.7.2-rw-rw-r-- 1 deploy deploy 22897802 Dec 24 11:42 Python-3.7.2.tgz
在 Linux 中第一個字符代表這個文件時目錄、文件或鏈接文件等等。
為 d 表示是目錄為 – 表示是文件為 l 表示是鏈接文件(link file)為 b 表示為裝置文件里面的可供儲存的接口設備(可隨機存取裝置)為 c 表示為裝置文件里面的串行端口設備,例如鍵盤、鼠標(一次性讀取裝置)
接下來的字符中,且均為 rwx 的三個參數的組合,其中 r 表示可讀,w 表示可寫, x 表示可執行。 這三個權限的位置不會改變,如果沒有權限,就會出現減號 -。

Linux 文件屬性和屬組
對于文件來說,它都有一個特定的所有者,也就是對該文件具有所有權的用戶。 同時,在 Linux 系統中,用戶是按組分類的,一個用戶屬于一個或多個組。 文件所有者以外的用戶又可以分為文件所有者的同組用戶和其他用戶。
因此,Linux 系統按文件所有者、文件所有者同組用戶和其它用戶來規定了不同的文件訪問權限。
代碼語言:JavaScript代碼運行次數:0運行復制
ls -ltotal 64drwxr-xr-x 2 root root 4096 Feb 15 14:46 crondrwxr-xr-x 3 mysql mysql 4096 Apr 21 2014 mysql
在上面實例中,mysql 文件是一個目錄文件,屬主和屬組都為 mysql,屬主有可讀、可寫、可執行的權限; 與屬主同組的其他用戶有可讀和可執行的權限;其它用戶也有可讀和可執行的權限。
對于 root 用戶,一般情況下,文件的權限對其不起作用。
更改文件屬性1. chgrp 更改文件屬組-R : 遞歸更改文件屬組,就是在更改某個目錄文件的屬組時,如果加上 -R 的參數,那么該目錄下的所有文件的屬組都會更改。2. chown 更改文件屬主,也可以同時更改文件屬組
進入 /root 目錄(~)將install.log的擁有者改為bin這個賬號:
代碼語言:javascript代碼運行次數:0運行復制
[root@www ~] cd ~[root@www ~]# chown bin install.log[root@www ~]# ls -l-rw-r--r-- 1 bin users 68495 Jun 25 08:53 install.log
將install.log的擁有者與群組改回為root:
代碼語言:javascript代碼運行次數:0運行復制
[root@www ~]# chown root:root install.log[root@www ~]# ls -l-rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log
chmode: 更改文9個屬性
Linux 文件屬性有2中設置方法,一種是數字,一種是符號。 Linux 文件的基本權限有9個。分別是owner/group/others三種身份各有自己的read/write/execute權限。 文件權限字符為 -rwxrwxrwx 這九個權限是三個三個一組的。其中,我們可以使用數字來代表各個權限,個權限的分數對照表如下:
r: 4w: 2x: 1
每種身份各自的三個權限分數是需要累加的。 例如 -rwxrwx— 分數則為:
owner: rwx = 4+2+1 = 7group: rwx = 4+2+1 = 7others:— = 0+0+0 = 0
所以該文件的權限數字就是770了。
變更權限的指令chmod語法是這樣的:
選項與參數:
xyz: 就是剛剛提到的數字類型的權限屬性,為 rwx 屬性數值的相加。-R : 進行遞歸的持續變更,亦即連同次目錄下的所有文件都會變更
實例,將 .hashrc 文件的所有權限都設定為啟用,則命令如下:
代碼語言:javascript代碼運行次數:0運行復制
[root@www ~]# ls -al .bashrc-rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc# 777表示 -rwxrwxrwx 的權限符號表示[root@www ~]# chmod 777 .bashrc [root@www ~]# ls -al .bashrc-rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc
符號類型改變文件權限
還有一個改變權限的方法,從之前的介紹中我們可以發現基本上就9個權限分別是:
ownergroupothers
那么我們可以用 u、g 和 o 來代表三種身份的權限!
如果我們要將文件設置為 -rwxr-xr– ,可以使用 chmod u=rwx,g=rx,o=r 文件名 來設定:
代碼語言:javascript代碼運行次數:0運行復制
[deploy@sz-local3 lff]$ ll hello.txt -rwxrwx--- 1 deploy deploy 23 Dec 29 12:35 hello.txt[deploy@sz-local3 lff]$ chmod u=rwx,g=rwx,o=rwx hello.txt [deploy@sz-local3 lff]$ ll hello.txt -rwxrwxrwx 1 deploy deploy 23 Dec 29 12:35 hello.txt
拿掉全部人的可執行權限:
代碼語言:javascript代碼運行次數:0運行復制
[deploy@sz-local3 lff]$ ll hello.txt -rwxrwxrwx 1 deploy deploy 23 Dec 29 12:35 hello.txt[deploy@sz-local3 lff]$ chmod a-x hello.txt [deploy@sz-local3 lff]$ ll hello.txt -rw-rw-rw- 1 deploy deploy 23 Dec 29 12:35 hello.txt
更多實例:
代碼語言:javascript代碼運行次數:0運行復制
[deploy@sz-local3 lff]$ ll hello.txt -rw-rw-rw- 1 deploy deploy 23 Dec 29 12:35 hello.txt[deploy@sz-local3 lff]$ chmod a+rwx hello.txt [deploy@sz-local3 lff]$ ll hello.txt -rwxrwxrwx 1 deploy deploy 23 Dec 29 12:35 hello.txt[deploy@sz-local3 lff]$ chmod u-x,g-x,o-x hello.txt [deploy@sz-local3 lff]$ ll hello.txt -rw-rw-rw- 1 deploy deploy 23 Dec 29 12:35 hello.txt
Linux 文件與目錄管理處理目錄的常用命令ls: 列出目錄cd : 切換目錄pwd : 顯示當前目錄mkdir : 創建一個新的目錄rmdir : 刪除一個空目錄cp : 復制文件或目錄rm : 移除文件或目錄mv : 移動文件或目錄,或修改文件與目錄的名稱
可以使用 man [命令] 來查看各個命令的使用文檔,如: man cp等。
ls (列出目錄)
選項與參數:
-a : 全部的文件,連同隱藏(開頭為 . 的文件)一起列出來-d : 僅僅列出目錄本身,而不是列出目錄內的文件內容-l :長數據串列出,包含文件的屬性與權限等數據cd (切換目錄)
cd 是 Change Directory 的縮寫。
pwd (顯示當前所在的目錄)-P : 顯示出確實的路徑,而非使用連接路徑mkdir (創建新目錄)
選項參數:
-m : 配置文件的權限!直接配置,無需使用默認權限。-p : 幫助你直接將所需要的目錄(包含上一級目錄遞歸創建)代碼語言:javascript代碼運行次數:0運行復制
[deploy@sz-local3 lff]$ mkdir test #創建目錄test[deploy@sz-local3 lff]$ ls10 arthas-boot.jar emp.awk hello.txt loan.txt lua-5.3.0.tar.gz luarocks-2.2.1.tar.gz Python-3.7.2.tgz tmpDir6 awkvars.out emp.data index.html lua-5.3.0 luarocks-2.2.1 Python-3.7.2 test[deploy@sz-local3 lff]$ mkdir test1/test2/test3 #創建連接目錄,失敗mkdir: cannot create directory `test1/test2/test3': No such file or directory[deploy@sz-local3 lff]$ mkdir -p test1/test2/test3 #加上-p參數后,創建連接目錄OK[deploy@sz-local3 lff]$ ls10 arthas-boot.jar emp.awk hello.txt loan.txt lua-5.3.0.tar.gz luarocks-2.2.1.tar.gz Python-3.7.2.tgz test16 awkvars.out emp.data index.html lua-5.3.0 luarocks-2.2.1 Python-3.7.2 test tmpDir
實例: 創建權限為 rwx–x–x 的目錄:
代碼語言:javascript代碼運行次數:0運行復制
[deploy@sz-local3 test1]$ mkdir test2[deploy@sz-local3 test1]$ lltotal 4drwxrwxr-x 2 deploy deploy 4096 Jan 15 19:55 test2[deploy@sz-local3 test1]$ mkdir -m 711 test7 # 指定權限 rwx--x--x[deploy@sz-local3 test1]$ lltotal 8drwxrwxr-x 2 deploy deploy 4096 Jan 15 19:55 test2drwx--x--x 2 deploy deploy 4096 Jan 15 19:56 test7
rmdir (刪除空的目錄)
選項參數:
-p : 連同上一級(空的)目錄也一起刪除代碼語言:javascript代碼運行次數:0運行復制
# 創建連接目錄[deploy@sz-local3 test1]$ mkdir -p tst1/tst2/tst3/tst4 [deploy@sz-local3 test1]$ lstst1# 使用 rmdir 命令嘗試刪除,無法刪除存在內容的目錄 [deploy@sz-local3 test1]$ rmdir tst1rmdir: failed to remove `tst1': Directory not empty[deploy@sz-local3 test1]$ rmdir -p tst1rmdir: failed to remove `tst1': Directory not empty# 使用 rmdir -p 刪除上一級空目錄[deploy@sz-local3 test1]$ rmdir -p tst1/tst2/tst3/tst4
注意: rmdir 僅能刪除空的目錄,使用 rm 命令可以來刪除非空目錄。
cp (復制文件或目錄)
選項與參數:
-a : 相當于 -pdr。-d : 若來源為連接屬性(link file),則復制連接檔屬性而非文件本身-f : 為強制的意思,若目標文件已經存在且無法開啟,則移除后再嘗試一次-i : 若目標檔已存在,在覆蓋時會先詢問動作的進行-l : 進行硬式連結(hard link)的連結檔創建,而非復制文件本身;-p : 連同文件的屬性一同復制過去,而非使用默認屬性-r : 遞歸復制,用于目錄的復制行為-s : 復制成為符號鏈接檔,即快捷方式-u : 若目標比源舊才升級目標檔代碼語言:javascript代碼運行次數:0運行復制
[deploy@sz-local3 test1]$ lltotal 0-rwxrwxrwx 1 deploy deploy 0 Jan 15 20:21 hello.txt[deploy@sz-local3 test1]$ cp hello.txt hello2.txt[deploy@sz-local3 test1]$ lltotal 0-rwxrwxr-x 1 deploy deploy 0 Jan 15 20:26 hello2.txt #默認屬性-rwxrwxrwx 1 deploy deploy 0 Jan 15 20:21 hello.txt[deploy@sz-local3 test1]$ cp -p hello.txt hello3.txt #連同屬性賦值[deploy@sz-local3 test1]$ [deploy@sz-local3 test1]$ lltotal 0-rwxrwxr-x 1 deploy deploy 0 Jan 15 20:26 hello2.txt-rwxrwxrwx 1 deploy deploy 0 Jan 15 20:21 hello3.txt-rwxrwxrwx 1 deploy deploy 0 Jan 15 20:21 hello.txt
rm (移除文件或目錄)
選項與參數:
-f : 忽略不存在的文件,不會出現警告信息-i : 互動模式,在刪除前會詢問使用者是否動作-r : 遞歸刪除。代碼語言:javascript代碼運行次數:0運行復制
[deploy@sz-local3 test1]$ lshello2.txt hello3.txt hello.txt[deploy@sz-local3 test1]$ rm -i hello.txt rm: remove regular empty file `hello.txt'? n #取消刪除[deploy@sz-local3 test1]$ lshello2.txt hello3.txt hello.txt[deploy@sz-local3 test1]$ rm -i hello.txt rm: remove regular empty file `hello.txt'? y #確認刪除[deploy@sz-local3 test1]$ lshello2.txt hello3.txt[deploy@sz-local3 test1]$ rm -f hello2.txt [deploy@sz-local3 test1]$ lshello3.txt[deploy@sz-local3 test1]$ rm -rf hello3.txt [deploy@sz-local3 test1]$ ls
mv (移動文件與目錄,或修改名稱)
選項與參數:
-f : 強制。如果目標文件已經存在,不會詢問,直接覆蓋。-i :若目標文件已存在,則詢問是否覆蓋。-u : 若目標文件已存在,且源比較新,才會升級。代碼語言:javascript代碼運行次數:0運行復制
[deploy@sz-local3 test1]$ cat hello.txt hello[deploy@sz-local3 test1]$ cat boy.txt boy[deploy@sz-local3 test1]$ mv hello.txt boy.txt # 將hello.txt命名為boy.txt,原來的boy.txt沒了[deploy@sz-local3 test1]$ lsboy.txt tmpdir[deploy@sz-local3 test1]$ cat boy.txt hello[deploy@sz-local3 test1]$ mv boy.txt tmpdir/[deploy@sz-local3 test1]$ lstmpdir[deploy@sz-local3 test1]$ cd tmpdir/[deploy@sz-local3 tmpdir]$ lsboy.txt[deploy@sz-local3 test1]$ echo 'hello' > hello.txt[deploy@sz-local3 test1]$ echo 'boy' > boy.txt[deploy@sz-local3 test1]$ mv -i hello.txt boy.txt #提示是否覆蓋已存在的boy.txt文件mv: overwrite `boy.txt'?
Linux 文件內容查看
Linux 系統中使用以下命令來查看文件的內容:
cat : 由第一行開始顯示內容tac : 從最后一行開始顯示,可以看出 tac 是 cat 的倒寫nl : 顯示的時候,順道輸出行號more : 一頁一頁的顯示文件less : 與 more 類似,但是比more更好的是,less可以往前翻頁head : 只看頭幾行tail : 只看尾幾行cat 由第一行開始顯示文件內容
選項與參數:
-A : 相當于 -vET 的組合項,可列出一些特殊字符而不是空白而已-b : 列出行號,僅針對非空白行做行號顯示,空白行不標行號-E : 將結尾的斷行字節$顯示出來-n : 列出行號,連同空白行也會有行號,與 -b 選項不同-T : 將tab鍵以 ^| 顯示出倆-v : 列出一些看不出來的特殊字符tac 和cat相反
QuickSortTest.java 的內容如下:
代碼語言:javascript代碼運行次數:0運行復制
package org.byron4j.cookbook.algrithms;import org.junit.Test;public class QuickSortTest { @Test public void test(){ int[] arr = new int[]{6, 2, 4, 1, 5, 9}; QuickSort.sortCore(arr, 0, 5); for (int i : arr) { System.out.println(i); } }}
示例如下:
代碼語言:javascript代碼運行次數:0運行復制
[deploy@sz-local3 test1]$ cat QuickSortTest.java package org.byron4j.cookbook.algrithms;import org.junit.Test;public class QuickSortTest { @Test public void test(){ int[] arr = new int[]{6, 2, 4, 1, 5, 9}; QuickSort.sortCore(arr, 0, 5); for (int i : arr) { System.out.println(i); } }}[deploy@sz-local3 test1]$ [deploy@sz-local3 test1]$ [deploy@sz-local3 test1]$ tac QuickSortTest.java } } } System.out.println(i); for (int i : arr) { QuickSort.sortCore(arr, 0, 5); int[] arr = new int[]{6, 2, 4, 1, 5, 9}; public void test(){ @Testpublic class QuickSortTest {import org.junit.Test;package org.byron4j.cookbook.algrithms;
nl 顯示行號查看內容
選項與參數:
-b : 指定行號指定的方式,主要有兩種: -b a:表示不論是否為空行,也同樣列出行號(類似 cat -n);-b t:如果有空行,空的那一行不要列出行號(默認值)-n :列出行號表示的方法,有三種: -n ln : 行號在屏幕的最左方顯示-n rn : 行號在行號欄位的最右方顯示-n rz : 行號在行號欄位的最右方顯示,且補足0-w : 行號欄位的占用的位數
實例,分別展示了行號在行號欄位的展示位置:
代碼語言:javascript代碼運行次數:0運行復制
[deploy@sz-local3 test1]$ nl -nln QuickSortTest.java 1 package org.byron4j.cookbook.algrithms;2 3 import org.junit.Test;4 5 public class QuickSortTest {6 @Test7 public void test(){8 int[] arr = new int[]{6, 2, 4, 1, 5, 9};9 QuickSort.sortCore(arr, 0, 5);10 for (int i : arr) {11 System.out.println(i);12 }13 }14 }[deploy@sz-local3 test1]$ nl -nrn QuickSortTest.java 1 package org.byron4j.cookbook.algrithms; 2 3 import org.junit.Test; 4 5 public class QuickSortTest { 6 @Test 7 public void test(){ 8 int[] arr = new int[]{6, 2, 4, 1, 5, 9}; 9 QuickSort.sortCore(arr, 0, 5); 10 for (int i : arr) { 11 System.out.println(i); 12 } 13 } 14 }[deploy@sz-local3 test1]$ nl -nrz QuickSortTest.java 000001 package org.byron4j.cookbook.algrithms;000002000003 import org.junit.Test;000004000005 public class QuickSortTest {000006 @Test000007 public void test(){000008 int[] arr = new int[]{6, 2, 4, 1, 5, 9};000009 QuickSort.sortCore(arr, 0, 5);000010 for (int i : arr) {000011 System.out.println(i);000012 }000013 }000014 }
more 一頁一頁的翻動
lovelyman.txt 摘錄了魏巍的《誰是最可愛的人?》文章。下面以此為例演示:

使用了 more lovelyman.txt查看文件內容,一頁后顯示了當前所占文件內容的比例。 在 more 這個程序的運行過程中,你有幾個按鍵可以按的:
空白鍵 : 代表向下翻一頁Enter : 代表向下翻一行/str : 代表這個顯示的內容當中,向下搜尋str這個關鍵字:f : 立刻顯示出文檔名以及當前顯示的行數q : quit,表示立刻離開more,不再顯示該文件內容b 或 ctrl-b : 代表往回翻頁,但是這只對文件有用,對管道無用less 一頁一頁翻動
less 運行時可以輸入的命令有:
空白鍵 : 向下翻一頁pagedow : 向下翻一頁pageup : 向上翻一頁/str : 向下搜尋str?str : 向上搜尋strn : 重復前一個搜尋(與/或?相關)N : 反向的重復前一個搜尋(與/或?相關)q : 離開less這個程序head 去除文件前面幾行代碼語言:javascript代碼運行次數:0運行復制
[deploy@sz-local3 test1]$ head -n 5 QuickSortTest.java package org.byron4j.cookbook.algrithms;import org.junit.Test;public class QuickSortTest {
tail 取出文件后面幾行-n : 后面接數字,代表顯示幾行的意思-f :表示持續偵測后面所接的檔名,要等到按下ctrl-c才會結束tail的偵測代碼語言:javascript代碼運行次數:0運行復制
[deploy@sz-local3 test1]$ tail -n 5 QuickSortTest.java for (int i : arr) { System.out.println(i); } }}