1、在 Linux 這個系統當中,幾乎所有的硬件裝置文件都在/dev 這個目錄下。
2、幾個重要的存儲文件
1)、 /etc/passwad :所有的系統上的賬號與一般身份使用者,還有那個 root 的相關信息
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
......
passwd文件由許多條記錄組成,每條記錄佔一行,記錄了一個用戶帳號的所有信息。每條記錄由7個字段組
成,字段間用冒號“:”隔開,其格式如下:
username:password:User ID:Group ID:comment:home directory:shell
值得一提的 password 該帳號的密碼是經過加密處理的。daemon、bin等,這些帳號有着特殊的用途,一般用
於進行系統管理。這些帳號的口令大部分用(x)號表示,代表它們不能在登錄時使用。
2)、/etc/shadow:存放賬戶的真是密碼,只有root用戶才能看
whoopsie:*:16365:0:99999:7:::
avahi:*:16365:0:99999:7:::
lightdm:*:16365:0:99999:7:::
pulse:*:16365:0:99999:7:::
colord:*:16365:0:99999:7:::
hplip:*:16365:0:99999:7:::
joey:$6$enM1lo0k$xWyqfa5UhlDMQuaANeeiBUS.d0cqheaK0UOd4d4Iz1sEgPQr86QIc9QrHuMXBMS8rV
pz/zQTGgQSrpvc6SNOt/:17261
:0:99999:7:::
可以看到都是經過加密的。它的每個條目有7個域,分別是名字:密碼:用戶id:組id:用戶信息:主目
錄:shell
3)、/etc/group:用戶組的配置文件,內容包括用戶和用戶組,並且能顯示出用戶是歸屬哪個用戶組或哪
幾個用戶組,因爲一個用戶可以歸屬一個或多個不同的用戶組。
root:x:0:
bluetooth:x:121:
pulse:x:122:
pulse-access:x:123:
colord:x:124:
joey:x:1000:
sambashare:x:125:joey
格式:group_name:passwd:GID:user_list.
passwd密碼也是加密的;
user_list 每個用戶之間用,號分割;本字段可以爲空;如果字段爲空表示用戶組爲GID的用戶名;
新增加一個用戶並將其列入一個已有的用戶組中需要用到 useradd 命令。如果還沒有這個用戶組,可以先創建該用戶組 useradd -G {group-name} username
root@Joey:/etc# cat group | grep "joey"
joey:x:1000:zhaoyuan
root@Joey:/etc# useradd -G joey liuyu
root@Joey:/etc# cat group | grep "joey"
joey:x:1000:zhaoyuan,liuyu
3、切換用戶的命令
su/su - 用戶名。 需要密碼的輸入密碼即可。如果超級權限用戶root向普通或虛擬用戶切換不需要密碼.
root@Joey:/etc# su joey
joey@Joey:/etc$ su sambashare
No passwd entry for user 'sambashare'
joey@Joey:/etc$ su
Password:
root@Joey:/etc#
root@Joey:/etc# su - joey
joey@Joey:~$
su命令和su -命令最大的本質區別就是:前者只是切換了root身份,但Shell環境仍然是普通用戶的Shell;
而後者連用戶和Shell環境一起切換成root身份了。只有切換了Shell環境纔不會出現PATH環境變量錯誤
sudo 表示獲取臨時的root權限命令,命令執行完成後,直接退回到當前用戶。
4、Linux中各個類型的文件的詳解。
-rw-r--r-- 1 xp022430 domain_users 16246 May 15 10:32 AndroidManifest.xml
-rw-r--r-- 1 xp022430 domain_users 1010 May 12 15:27 Android.mk
drwxr-xr-x 2 xp022430 domain_users 4096 May 12 15:27 assets
/dev下面的
crw------- 1 root root 10, 234 May 18 16:50 btrfs-control
drwxr-xr-x 3 root root 60 May 18 16:50 bus
lrwxrwxrwx 1 root root 3 May 18 16:50 cdrom -> sr0
brw-rw---- 1 root disk 7, 0 May 18 16:50 loop0
brw-rw---- 1 root disk 7, 1 May 18 16:50 loop1
第一 欄:
當是[ d ]則是目錄。
當是[ - ]則是文件。
當是[ l ]則表示爲連結檔(link file),類似 Windows 系統底下的快捷方式啦
當是[ b ]則表示爲裝置文件裏面的可供儲存的接口設備(可隨機存取裝置);區塊(block)設備檔,就是一些
儲存數據, 以提供系統隨機存取的接口設備
當是[ c ]則表示爲裝置文件裏面的串行端口設備,如鍵盤、鼠標等字符(character)設備文件。這些設備
的特色就是『一次性讀取』的,不能夠截斷輸出。 舉例來說,你不可能讓鼠標跳到另一個畫面。
當是[ s ]則表示爲資料接口文件(sockets)。最常在/run 或/tmp 這些個目錄中看到這種文件類型了。
當是[ p ]則表示爲數據輸送文件(FIFO, pipe):FIFO 也是一種特殊的文件類型,他主要的目的在解決多個
程序同時存取一個文件所造成的錯誤問題。 FIFO是 first-in-first-out 的縮寫。
第二欄:
表示有多少檔名連結到此節點(i-node):每個文件都會將他的權限與屬性記錄到文件系統的 i-node 中,
不過,我們使用的目錄樹卻是使用文件名來記錄, 因此每個檔名就會連結到一個 i-node 囉!這個屬性記錄的,
就是有多少不同的檔名連結到相同的一個 i-node 號碼去就是了。
第三欄:表示這個文件(或目錄)的擁有者賬號。
第四欄: 表示這個文件的所屬羣組
第五欄:爲這個文件的容量大小,默認單位爲 bytes;
第六欄:爲這個文件的建檔日期或者是最近的修改日期:
第七欄:爲這個文件的檔名,這個字段就是檔名了。比較特殊的是:如果檔名之前多一個『 . 』,則代表這個
文件爲『隱藏檔』。
5、文件和目錄的權限的含義。
目錄與文件的權限意義並不相同,這是因爲目錄與文件所記錄的數據內容不相同所致。(按照Linux裏面都因
該說是文件,目錄是目錄類型的文件)。
1)、對於文件裏面存儲的是數據所以:
r: 代表當前文件可以被讀
w:代表當前文件可以被修改,一定要注意它控制不了這個文件是否能被刪除。 還有個問題,你想修
改,必須有r不然丫的根本打不開!
x:代表當前文件可以被執行,就是運行。在windows下通過後綴.exe等來判斷的這個是通過權限。
2)、存放的文件或者目錄名列表結構。
r:代表可以讀去當前目錄下都有哪些內容,就是 ls可以顯示。
如下沒有可讀權限的時候,可以看到什麼也不顯示了。
d--x--x--x 2 xp022430 domain_users 4096 May 26 15:10 TestMode
cnbjlx24729:/media/$ cd TestMode/
cnbjlx24729:/media/TestMode$ ls
ls: cannot open directory .: Permission denied
w:代表可以去修改當前目錄下的文件結構,如:新建文件/目錄、刪除文件/目錄(和文件本身的權限
無關)、重命名等等
dr-xr-xr-x 2 xp022430 domain_users 4096 May 26 15:10 TestMode
cnbjlx24729:/media/TestMode$ rm TestFile.txt
rm: cannot remove ‘TestFile.txt’: Permission denied
即使文件本身就有w權限
cnbjlx24729:/media/TestMode$ ls -l
-rwxrwxrwx 1 xp022430 domain_users 19 May 26 15:10 TestFile.txt
cnbjlx24729:/media/TestMode$ rm TestFile.txt
rm: cannot remove ‘TestFile.txt’: Permission denied
x:代表的是用戶能否進入該目錄成爲工作目錄,說白了就是能不能進去這個文件。
dr--r--r-- 2 xp022430 domain_users 4096 May 26 15:10 TestMode
drwxr-xr-x 3 xp022430 domain_users 4096 May 12 15:27 tests
cnbjlx24729:/media/$ cd TestMode/
bash: cd: TestMode/: Permission denied
注意root用戶其實是不受任何權限影響的即使比如root是所有者,你把所有者的權限也改爲不可r,不起作
用的。
綜上:要開放目錄給任何人瀏覽時,應該至少也要給予 r 及 x 的權限,但 w 權限不可隨便給!因爲這樣它就
可以刪除你的文件了,即使不能修改文件內部的內容。
6、修改羣組、所有者、權限。
1)、chgrp :改變文件所屬羣組,注意只有root用戶纔可以使用
格式:chgrp (-R) groupname filename -R遞歸
root@Joey:/home/joey/Desktop# ls -l
drwxrwxr-x 2 joey joey 4096 5月 31 21:47 Test.txt
root@Joey:/home/joey/Desktop# chgrp zhaoyuan haha.txt
root@Joey:/home/joey/Desktop# ls -l
-rw-rw-r-- 1 joey zhaoyuan 7 5月 31 21:53 haha.txt
2)、chown :改變文件擁有者,也是root用戶纔可以哦。
chown [-R] 用戶名稱:[組名] 文件 組名字可以省略。
root@Joey:/home/joey/Desktop# ls -l
-rw-rw-r-- 1 joey zhaoyuan 7 5月 31 21:53 haha.txt
root@Joey:/home/joey/Desktop# chown zhaoyuan haha.txt
root@Joey:/home/joey/Desktop# ls -l
-rw-rw-r-- 1 zhaoyuan zhaoyuan 7 5月 31 21:53 haha.txt
3)、chmod :改變文件的權限, SUID, SGID, SBIT 等等的特性,root用戶使用。
chmod兩種方式:(此處不介紹文件的權限描述位)
a、數字:
r w x 分別對應 4 2 1 ,也好記就是111二進制這種形式換算出來的數。
例子:chmod 754(權限) filename
b、字母:
u-----user, g-----group, o-----others,a------all。
+、-、=:分別對應宇添加、去掉某某權限。
例子:chmod u+x haha.txt 爲文件所有者添加x權限
root@Joey:/home/joey/Desktop# ls -l
-rw-rw-r-- 1 zhaoyuan zhaoyuan 7 5月 31 21:53 haha.txt
root@Joey:/home/joey/Desktop# chmod u+x haha.txt
root@Joey:/home/joey/Desktop# ls -l
-rwxrw-r-- 1 zhaoyuan zhaoyuan 7 5月 31 21:53 haha.txt
root@Joey:/home/joey/Desktop# chmod a+x haha.txt
root@Joey:/home/joey/Desktop# ls -l
-rwxrwxr-x 1 zhaoyuan zhaoyuan 7 5月 31 21:53 haha.txt
7、Linux中的文件後綴。
基本上,Linux 的文件是沒有所謂的擴展名的,我們剛剛就談過,一個 Linux 文件能不能被執行,與他的第一欄的
十個屬性有關, 與文件名根本一點關係也沒有。
還有就算具有x可執行權限,但也不一定能執行,具有『可執行的權限』以及『具有可執行的程序代碼』是
兩回事!這個 x 代表這個文件具有可執行的能力, 但是能不能執行成功,當然就得要看該文件的內容。
Linux 系統上的文件名真的只是讓你瞭解該文件可能的用途而已, 真正的執行與否仍然需要權限的規範纔行!
*.sh : 腳本或批處理文件 (scripts),因爲批處理文件爲使用 shell 寫成的,所以擴展名就編成 .sh 囉;
*Z, *.tar, *.tar.gz, *.zip, *.tgz: 經過打包的壓縮文件。這是因爲壓縮軟件分別爲 gunzip, tar 等等的,由於不
同的壓縮軟件,而取其相關的擴展名
*.html, *.php:網頁相關文件,分別代表 HTML 語法與 PHP 語法的網頁文件。
8、Linux命令小發現。
發現好多Linux命令都是 命令 來源處 目的地。
如:cp 來源文件 目標文件。
還有一個小技巧。當一個命令你不知道格式和參數的時候後 命令 --help。
如:ls --help
9、Linux系統的目錄配置。
Filesystem Hierarchy Standard (FHS)標準 FHS 的重點在於規範每個特定的目錄下應該要放置什麼樣子的數
據而已。 這樣做好處非常多,因爲 Linux 操作系統就能夠在既有的面貌下(目錄架構不變)發展出開發者想要的獨
特風格。
FHS 所定義的三層主目錄爲:/, /var, /usr 三層而已。注意 usr是 Unix Software Resource 的縮寫, 也就是
『Unix 操作系統軟件資源』所放置的目錄,而不是users。
常見的系統目錄。
/etc/, /boot, /usr/bin, /bin, /usr/sbin, /sbin, /dev, /var/log, /run
/etc/:幾乎系統的所有配置文件案均在此,尤其 passwd,shadow
/boot:開機配置文件,也是預設擺放核心 vmlinuz 的地方
/usr/bin, /bin:一般執行檔擺放的地方
/usr/sbin, /sbin:系統管理員常用指令集
/dev:擺放所有系統裝置文件的目錄
/var/log:擺放系統註冊表文件的地方
/ 代表根目錄
. 代表此層目錄
.. 代表上一層目錄
- 代表前一個工作目錄 (上一個工作目錄和上層目錄是有區別的,如下)
cnbjlx24729:/media/xp022430/source/projects/pre-o-yoshino2$ cd frameworks/base/core/
cnbjlx24729:/media/xp022430/source/projects/pre-o-yoshino2/frameworks/base/core$ cd -
/media/xp022430/source/projects/pre-o-yoshino2
cnbjlx24729:/media/xp022430/source/projects/pre-o-yoshino2$
就到了你上次所在的目錄
再比如:你好可以實現往前跳。
cnbjlx24729:~$ cd -
/media/xp022430/source/projects/pre-o-yoshino2/frameworks/base
cnbjlx24729:/media/xp022430/source/projects/pre-o-yoshino2/frameworks/base
~ 代表『目前用戶身份』所在的家目錄
~account 代表 account 這個用戶的家目錄(account 是個賬號名稱)
根目錄的當前目錄和上層目錄是一樣的
xp022430@cnbjlx24729:/$ ls -la
total 116
drwxr-xr-x 26 root root 4096 May 17 07:57 .
drwxr-xr-x 26 root root 4096 May 17 07:57 ..
drwxr-xr-x 2 root root 4096 May 18 07:56 bin
可以看到權限屬性一模一樣,它們其實是指向一塊的。
一個查看路徑的命令 pwd:顯示當前目錄 顯示的絕對路徑。
pwd [-P] -P:顯示出確實的路徑,而非使用鏈接 (link) 路徑。有時候是連接指向的,就直接把鏈接指向的那
個實際的地址顯示。
root@Joey:/home/joey/Desktop# pwd
/home/joey/Desktop
如果僅輸入 cd 時,代表的就是『 cd ~ 』的意思~ 亦即是會回到自己的家目錄。
11、幾個常用的命令的縮寫。
ls 是 list
pwd 是 print working directory
cd 是 change directory
chgrp 是 change group
chown 是 change owner
chmod 是 change mode
cp 是 copy
mv 是 move
rm 是 remove
12、mkdir、cp
mkdir (make directory) 創建新的目錄.目錄得一層一層的建立纔行。但是可通過添加參數-p(感覺應該是
patch的縮寫吧)慎用,不然萬一拼寫錯誤,很亂。參數-m 來強制給予一個新的目錄相關的權限, 例如上表當中,
我們給予 -m 711 來給予新的目錄 drwx--x--x 的權限。
cnbjlx24729:/media/packages/apps/Nfc/TestMode$ mkdir home/bird/testing
mkdir: cannot create directory ‘home/bird/testing’: No such file or directory
cnbjlx24729:/media/packages/apps/Nfc/TestMode$ mkdir -p home/bird/testing
cnbjlx24729:/media/packages/apps/Nfc/TestMode$ ls -l
drwxr-xr-x 3 xp022430 domain_users 4096 May 27 09:57 home
cnbjlx24729:/media/packages/apps/Nfc/TestMode$ cd home/bird/testing/
要複製文件,請使用 cp (copy) (該文件你必須要有 read 的權限纔行啊!)
格式:cp [-adfilprsu] 來源文件(source) 目標文件(destination)。
此時你可以寫全路徑,如 :cp TestMode/TestFile.txt Testelse/haha.txt 這樣就會完成複製和改名,
如果你:cp TestMode/TestFile.txt Testelse/ 那麼就會用以前的名字。
複製文件的時候主要考慮如下:
1)、是否需要完整的保留來源文件的信息?
2)、 來源文件是否爲連結檔 (symbolic link file)?
3)、來源檔是否爲特殊的文件,例如 FIFO, socket 等?
4)、來源文件是否爲目錄?
對應不同參數,到時候自己選!
常用參數:
-r :遞歸持續複製,用於目錄的複製行爲;(常用)
-s :複製成爲符號鏈接文件 (symbolic link),亦即『快捷方式』文件;
-p :連同文件的屬性(權限、用戶、時間)一起復制過去,而非使用默認屬性(備份常用);
-i :若目標文件(destination)已經存在時,在覆蓋時會先詢問動作的進行(常用);
-a :相當於 -dr --preserve=all 的意思,至於 dr 請參考下列說明;(常用) ,感覺比-p好用點,-a會遞歸!
-u :destination 比 source 舊才更新 destination,或 destination 不存在的情況下才複製。
默認的賦值權限、文件所有者、羣組等等都會變的。
cnbjlx24729:/media/packages/apps/Nfc/TestMode$ ls -l
total 8
drwxr-xr-x 3 xp022430 domain_users 4096 May 27 09:57 home
-rwxrwxrwx 1 xp022430 domain_users 19 May 26 15:10 TestFile.txt (注意初始權限)
cnbjlx24729:/media/packages/apps/Nfc/TestMode$ cp TestFile.txt ../
(複製當前目錄下的TestFile文件到上一個目錄,注意..的運用)
cnbjlx24729:/media/packages/apps/Nfc/TestMode$ cd ..
cnbjlx24729:/media/packages/apps/Nfc$ ls -l
(可以看到默認的權限修改時間已經改變)
-rwxr-xr-x 1 xp022430 domain_users 19 May 27 11:13 TestFile.txt
使用-p的參數
cnbjlx24729:/media/packages/apps/Nfc/TestMode$ cp -p TestFile.txt ../
cnbjlx24729:/media/packages/apps/Nfc/TestMode$ cd ..
cnbjlx24729:/media/packages/apps/Nfc$ ls -l
-rwxrwxrwx 1 xp022430 domain_users 19 May 26 15:10 TestFile.txt
使用-a 會遞歸的把入目下的所有的都複製過去,並且保留全部的屬性和時間
- cnbjlx24729:/media/packages/apps/Nfc$ cp -a TestMode/ Testelse/
cnbjlx24729:/media/packages/apps/Nfc$ ls -l
drwxr-xr-x 3 xp022430 domain_users 4096 May 27 11:28 Testelse
drwxrwxrwx 4 xp022430 domain_users 4096 May 27 11:27 TestMode
cnbjlx24729:/media/packages/apps/Nfc$ cd Testelse/
cnbjlx24729:/media/packages/apps/Nfc/Testelse$ ls -l
total 4
drwxrwxrwx 4 xp022430 domain_users 4096 May 27 11:27 TestMode
cnbjlx24729:/media/packages/apps/Nfc/Testelse$ cd TestMode/
cnbjlx24729:/media/packages/apps/Nfc/Testelse/TestMode$ ls -l
total 12
drwxr-xr-x 3 xp022430 domain_users 4096 May 27 09:57 home
-rwxrwxrwx 1 xp022430 domain_users 19 May 26 15:10 TestFile.txt
drwxrwxrwx 3 xp022430 domain_users 4096 May 27 09:57 TestMode
至於移動目錄與文件,重命名,則使用 mv (move)。
至於移除嗎?那就是 rm (remove)
rm [-fir] 文件或目錄
選項與參數:
下面這三個很常用啊!
-f :就是 force 的意思,忽略不存在的文件,不會出現警告訊息;
-i :互動模式,在刪除前會詢問使用者是否動作
-r :遞歸刪除啊!最常用在目錄的刪除了!這是非常危險的選項!!!
13、對PATH變量的理解(PATH 還是有點理解不到,應該是操作系統這塊的概念)
PATH的值是一系列目錄,當你運行一個程序時,Shell腳本在這些目錄下進行搜尋。
格式:PATH=$PATH:<PATH1>:<PATH2>:<PATH3>:------:<PATHN>
執行文件路徑的變量: $PATH
比如我們在任何地方使用ls,但其實那ls是在/bin/ls 目錄下的,我們把/bin配置到PATH當中就可以在任何
地方執行了!
查看PATH變量的值的命令: echo $PATH
root@Joey:/home/joey/Desktop# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
由一堆目錄所組成的,每個目錄中間用冒號(:)來隔開,有順序之分,有多個的時候先查詢到的就先執行。
添加patch,添加到路徑PATH="${PATH}:/test" “/test”是要添加的路徑。此時是根目錄下的test
root@Joey:/home/joey/Desktop# PATH="${PATH}:/test"
root@Joey:/home/joey/Desktop# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/test
爲什麼 ${PATH} 搜尋的目錄不加入本目錄(.)?
爲了安全起見,不建議將『.』加入 PATH 的搜尋目錄中。 比如我在當前目錄,寫了一個ls的程序,一旦你
使用的時候,優先用到了我的,我在這個ls中加入竊取用戶數據的程序!那麼可想而知很恐怖!