1.1 Linux基礎linux
1.1.1 Linux文件系統程序員
圖1.1 Linux目錄文件樹shell
與Windows將硬盤看作「C盤」、「D盤」幾個獨立的分區不一樣,Linux將整個文件系統看作一棵樹,這棵樹的樹根叫作根文件系統,用/表示。各個分區經過「掛載」(Mount)以文件夾的形式訪問。編程
1、根文件系統:ubuntu
/:Linux文件系統根目錄。vim
2、一級目錄windows
/root:系統管理員的目錄,這是根用戶的主目錄。與保留給我的用戶的/home下的目錄很類似,該目錄中還包含僅與根用戶有關的條目。數組
/home:用戶主目錄的默認位置。存儲普通用戶的我的文件。每一個用戶的主目錄均在/home下以本身的用戶名命名。緩存
/etc:該目錄中包含系統和應用軟件的配置文件。bash
/dev:包含系統支持的全部設備文件。具體來講,console表示控制檯,lp0表示打印機,mem表示系統的物理內存,sda表示鏈接到主控制器的第一個磁盤,ttyXX表示串口設備。
/boot:包含系統引導程序GRUB及其配置文件、linux內核文件vmlinuz和磁盤內存映像文件initrd.img等重要引導文件。
/lib:這個目錄裏存放着系統最基本的共享連接庫和內核模塊。共享連接庫在功能上相似於Windows裏的.dll文件。
/proc:它是存在於內存中的虛擬文件系統。裏面保存了內核和進程的狀態信息。多爲文本文件,能夠直接查看。如/proc/cpuinfo保存了有關CPU的信息。
/sbin:供超級用戶使用的可執行文件,裏面可能是系統管理命令,如fsck, reboot, shutdown, ifconfig等。
/usr:靜態的用戶級應用程序等。
/var:動態的程序數據等。長度可變的文件,尤爲是些記錄數據,如日誌文件和打印機文件。例如/var/log,/var/cache等。
/bin:該目錄中存放了供全部用戶使用的完成基本維護任務的命令。其中bin是binary的縮寫,表示二進制文件,一般爲可執行文件。包含普通用戶和系統管理員能夠共享的各類通用程序,如bash、dd、df、gzip、grep、mv、mkdir等經常使用的基本命令。
/lost+found:用於存儲fsck命令在檢測與修復文件系統時刪除的文件和目錄
/media 包含移動存儲介質的掛載點,插入U盤,系統會自動將U盤掛載到該目錄的某個子目錄。
/mnt:包含全部自定義的文件系統的掛載點,能夠掛載任何文件系統 包括NFS或CIFS網絡文件系統。
/opt:應用程序等附加軟件的安裝目錄,相似於windows系統中的Program Files目錄。
3、二級目錄
/etc/apt:包含軟件管理工具使用的配置文件,如sources.list等。
/etc/cron.d:用於存儲cron進程調度運行後臺進程所用的配置文件盒控制文件。其餘有關目錄cron.hourly,cron.daily,cron.weekly,cron.monthly四個目錄。
/etc/init.d:用於存儲系統啓動引導過程當中須要由init調度執行的腳本文。
/etc/network:包含網絡接口的配置文件interfaces以及相關的配置工具
/etc/X11:包含X服務器使用的各類配置文件,如xorg.conf等。
/usr下的目錄結構與根目錄類似,但根目錄中的文件可能是系統級的文件,而/usr中是用戶級的文件,通常與具體的系統無關。
/usr/bin:包含用戶常用的各類命令。
/usr/include:用於存儲各類C語言頭文件。這個目錄及其子目錄是開發人員常常引用的文件。其中sys、linux和bits等子目錄中定義的數據結構,對於深刻學習、理解和掌握Linux系統具備極大的參考價值。
/usr/lib:其中包含各類共享的庫函數,可供程序員已靜態或動態的方式連接本身開發的程序。
/usr/sbin:包含系統引導完成以後系統管理員常用的各類系統管理和維護命令。
/usr/share:共享目錄,包含man(聯機文檔的根目錄)、info(GNU info文檔的根目錄)、doc(各類軟件包特定的文檔)、locale(語言環境)、vim(用戶指南)、zoneinfo(時區定義)等子目錄。
/usr/src:存放linux系統內核的源代碼和文檔等。
/var/lib:存儲軟件包特定的動態連接共享庫、配置文件、數據文件和狀態信息等。
/var/log:系統守護進程日誌文件的存儲目錄,其中包括lastlog(每一個用戶最後一次登陸的時間)、messages(由syslogd記錄的全部內核和系統程序的日誌消息)及wtmp(全部用戶的系統註冊/註銷記錄)等重要文件。位於/var/log中的文件會不斷地增加,於是要求按期備份或刪除,一般linux系統均採用日、周或月爲時間週期,按期執行例程檢查,以循環截取的方式,刪除過期的數據,保留必定時間範圍的最新數據,使文件的大小保持一個適中的規模。在Ubuntu Linux系統中,每日將會執行一次logrotate程序,檢查並處理系統日誌文件。
/var/lock:用於存儲各類服務進程或應用程序訪問特定的設備或文件時設置的封鎖文件。
/var/run:系統運行信息文件的根目錄,其中包括各類.pid文件中存有守護進程的PID。另一個最典型的文件是/var/run/utmp,其中包含當前系統中用戶註冊信息。
/var/spool:用於緩存各類等待處理的文件,如打印服務等。一般每類待處理的緩存文件均位於各自的子目錄中,如/var/spool/cups等。
/var/tmp:用於存儲各類臨時文件。
1.1.2 Linux桌面環境
相對於如今的Windows系統,UNIX/Linux自己是沒有圖形界面的,咱們一般在UNIX/Linux發行版上看到的圖形界面實際都只是運行在Linux系統之上的一套軟件,相似Windows95以前的Windows的圖形界面實則也只是運行在DOS環境的一套軟件。
圖1.2 Linux桌面圖形架構
1.1.3 Linux終端
一般咱們在使用Linux時,並非直接與系統打交道,而是經過一個叫作Shell的中間程序來完成的,在圖形界面下爲了實現讓咱們在一個窗口中完成用戶輸入和顯示輸出,Linux系統還提供了一個叫作終端模擬器的程序(Terminal),下面是幾個比較常見的終端模擬器:gnome-terminal、Konsole、xterm、rxvt、kvt、nxterm和eterm。
在Ubuntu中打開終端的快捷鍵是Ctrl+Alt+T。其餘一些經常使用快捷鍵如表1.2所示。
表1.2 Ubuntu終端快捷命令
快捷鍵 |
功能 |
快捷鍵 |
功能 |
Tab |
自動補全 |
Ctrl+r |
查找歷史命令 |
Ctrl+a |
光標移動到開始位置 |
Ctrl+b |
向回移動光標 |
Ctrl+e |
光標移動到最末尾 |
Ctrl+f |
向前移動光標 |
Ctrl+k |
刪除此處至末尾的全部內容 |
Ctrl+t |
將光標位置的字符和前一個字符進行位置交換 |
Ctrl+u |
刪除此處至開始的全部內容 |
Ctrl+& |
恢復 ctrl+h 或者 ctrl+d 或者 ctrl+w 刪除的內容 |
Ctrl+d |
刪除當前字符 |
Ctrl+S |
暫停屏幕輸出 |
Ctrl+h |
刪除當前字符前一個字符 |
Ctrl+Q |
繼續屏幕輸出 |
Ctrl+w |
刪除此處到左邊的單詞 |
Ctrl+Left-Arrow |
光標移動到上一個單詞的詞首 |
Ctrl+y |
粘貼由Ctrl+u, Ctrl+d, Ctrl+w刪除的單詞 |
Ctrl+Right-Arrow |
光標移動到下一個單詞的詞尾 |
Ctrl+l |
至關於clear,即清屏 |
Ctrl+p |
向上顯示緩存命令 |
Ctrl+n |
向下顯示緩存命令 |
Shift+Ctrl+W |
關閉標籤頁 |
Ctrl+d |
關閉終端 |
Shift+Ctrl+C |
複製 |
Ctrl+xx |
在EOL和當前光標位置移動 |
Shift+Ctrl+V |
粘貼 |
Ctrl+x@ |
顯示可能hostname補全 |
Alt+數字 |
切換至對應的標籤頁 |
Ctrl+c |
終止進程/命令 |
Shift+Ctrl+N |
打開新的終端窗口 |
Shift+上或下 |
終端上下滾動 |
Shift+Ctrl+Q |
管壁終端窗口 |
Shift+PgUp/PgDn |
終端上下翻頁滾動 |
Shift+Ctrl+PgUp/PgDn |
左移右移標籤頁 |
Ctrl+Shift+n |
新終端 |
Ctrl+PgUp/PgDn |
切換標籤頁 |
alt+F2 |
輸入gnome-terminal打開終端 |
F1 |
打開幫助指南 |
Shift+Ctrl+T |
打開新的標籤頁 |
F10 |
激活菜單欄 |
F11 |
全屏切換 |
Alt+S |
打開 「搜索」 菜單(search) |
Alt+F |
打開 「文件」 菜單(file) |
Alt+T |
打開 「終端」 菜單(terminal) |
Alt+E |
打開 「編輯」 菜單(edit) |
Alt+H |
打開 「幫助」 菜單(help) |
Alt+V |
打開 「查看」 菜單(view) |
|
|
幾個實用命令的詳細說明:
1、Tab命令
使用Tab鍵來進行命令補全,這個技巧給你帶來的最大的好處就是當你忘記某個命令的全稱時能夠只輸入它的開頭的一部分,而後按下Tab鍵就能夠獲得提示或者幫助完成。連續按兩次Tab能夠顯示所有候選結果。
2、方向鍵↑↓
使用鍵盤上的方向上鍵↑↓,恢復到此前輸入過的命令。
3、通配符
通配符是一種特殊語句,主要有星號(*)和問號(?),用來對字符串進行模糊匹配(好比文件名、參數名)。當查找文件夾時,可使用它來代替一個或多個真正字符;當不知道真正字符或者懶得輸入完整名字時,經常使用通配符代替一個或多個真正字符。
示例:
#建立兩個名爲adsfasd.txt和wergjlkas.txt的文件,touch是一個文件建立命令 $touch adsfasd.txt wergjlkas.txt #想在一大堆文件中找到這兩個文件,就可使用通配符 $ls *.txt adsfasd.txt wergjlkas.txt |
SHELL經常使用通配符:
字符 |
含義 |
* |
匹配0或多個字符 |
? |
匹配任意一個字符 |
[list] |
匹配list中的任意單一字符 |
[!list] |
匹配除list中的任意單一字符之外的字符 |
[c1-c2] |
匹配c1-c2中的任意單一字符 |
{string1,string2, ...} |
匹配string1或string2或更多中某個字符串 |
{c1..c2} |
匹配c1-c2中所有字符,如{1..10} |
4、man命令
在 Linux 環境中,若是遇到困難,可使用man命令,它是Manual pages的縮寫。Manual pages 是UNIX或類UNIX操做系統中在線軟件文檔的一種廣泛的形式,內容包括計算機程序(包括庫和系統調用)、正式的標準和慣例,甚至是抽象的概念。用戶能夠經過執行man命令調用手冊頁。爲了便於查找,man 手冊被進行了分冊(分區段)處理,在 Research UNIX、BSD、OS X 和 Linux 中,手冊一般被分爲8個區段,安排以下:
區段 |
說明 |
1 |
通常命令 |
2 |
系統調用 |
3 |
庫函數,涵蓋了C標準函數庫 |
4 |
特殊文件(一般是/dev中的設備)和驅動程序 |
5 |
文件格式和約定 |
6 |
遊戲和屏保 |
7 |
雜項 |
8 |
系統管理命令和守護進程 |
要查看相應區段的內容,就在 man 後面加上相應區段的數字便可,如:
$man 1 ls |
1.1.4 Linux文件操做命令
1、路徑操做
使用cd命令能夠切換目錄,在Linux裏面:「.」表示當前目錄;「..」表示上一級目錄;「-」表示上一次所在目錄;「~」表示當前用戶的home目錄。使用pwd命令能夠得到當前所在絕對路徑。
ubuntu:~/$pwd /home/ubuntu ubuntu:~/$cd /usr/local/bin ubuntu:bin/$pwd /usr/local/bin ubuntu:bin/$cd .. ubuntu:local/$pwd /usr/local ubuntu:local/$cd ~ ubuntu:~/$ |
2、新建
touch命令新建空白文件,建立名爲 test 的空白文件,由於在其它目錄沒有權限,因此須要先 cd ~ 切換回用戶的 /home/shiyanlou 目錄
$cd ~ $touch test |
mkdir命令新建空目錄,也可同時指定建立目錄的權限屬性。
建立名爲「 mydir 」的空目錄:
$cd ~ $mkdir mydir |
使用-p參數,同時建立父目錄(若是不存在該父目錄),以下咱們同時建立一個多級目錄(這在安裝軟件、配置安裝路徑時很是有用):
$cd ~ $mkdir -p father/son/grandson |
3、複製
使用cp(copy)命令複製一個文件到指定目錄。將以前建立的「 test 」文件複製到「/home/shiyanlou/father/son/grandson」目錄中
$ cp test father/son/grandson |
目錄複製,要成功複製目錄須要加上-r或者-R參數,表示遞歸複製。
$mkdir family $ cp -r father family |
4、刪除
使用 rm(remove files or directories)命令刪除一個文件。直接刪除文件,可使用-f參數強制刪除。跟複製目錄同樣,要刪除一個目錄,也須要加上-r或-R參數。
#刪除文件test $rm -f test #刪除目錄family $rm -r family |
5、移動文件
使用mv(move or rename files)命令移動文件(剪切)。
$mkdir file1 $ mkdir Documents $ mv file1 Documents |
6、查看文件
使用cat,tac和nl命令查看文件。cat和tac用來打印文件內容到標準輸出(終端),其中cat爲正序顯示,tac爲倒序顯示。
$cp /etc/passwd . $cat passwd #能夠加上 -n 參數顯示行號 $cat -n passwd |
nl命令,添加行號並打印,這是個比cat -n更專業的行號打印命令。
more和less命令分頁查看文件。Enter鍵向下滾動一行,使用Space鍵向下滾動一屏,按下h顯示幫助,q退出。
head和tail命令查看文件頭幾行和尾部幾行。
#查看passwd文件頭1行和尾部2行 $head -n 1 passwd $tail -n 2 passwd |
tail命令的參數-f,這個參數能夠實現不停地讀取某個文件的內容並顯示。這可讓咱們動態查看日誌,達到實時監視的目的。
在Linux中文件的類型不是根據文件後綴來判斷的,咱們一般使用 file 命令查看文件的類型。
7、編輯文件
在Linux下面編輯文件一般咱們會直接使用專門的命令行編輯器好比(emacs,vim,nano)。
1.1.5 Linux環境變量
1、變量
變量是計算機中用於記錄一個值的符號。一般變量與值是一對一的關係,能夠經過表達式讀取它的值並賦值給其它變量,也能夠直接指定數值賦值給任意變量。爲了便於運算和處理,大部分的編程語言會區分變量的類型,用於分別記錄數值、字符或者字符串等等數據類型。Shell 中的變量也基本如此,有不一樣類型(但不用專門指定類型名),能夠參與運算,有做用域限定。
# declare 命令建立一個變量名爲 tmp 的變量 $ declare tmp |
也能夠不用 declare 預聲明一個變量,直接即用即建立,這裏只是告訴你 declare 的做用,這在建立其它指定類型的變量(如數組)時會用到。
使用=號賦值運算符,將變量tmp賦值爲var_tmp
$ tmp=var_tmp $echo $tmp |
讀取變量的值,使用echo命令和$符號($符號用於表示引用一個變量的值,初學者常常忘記輸入)。
2、環境變量
環境變量的做用域比自定義變量的要大,如Shell的環境變量做用於自身和它的子進程。在全部的UNIX和類UNIX系統中,每一個進程都有其各自的環境變量設置,且默認狀況下,當一個進程被建立時,除了建立過程當中明確指定的話,它將繼承其父進程的絕大部分環境設置。Shell程序也做爲一個進程運行在操做系統之上,而咱們在Shell中運行的大部分命令都將以Shell的子進程的方式運行。
一般涉及的變量有三類:
(1)當前Shell進程私有用戶自定義變量,如上面咱們建立的tmp變量,只在當前Shell中有效。
(2)Shell自己內建的變量。
(3)從自定義變量導出的環境變量。
與上述三類變量相關的命令:
命令 |
說明 |
set |
顯示當前 Shell 全部變量,包括其內建環境變量(與 Shell 外觀等相關),用戶自定義變量及導出的環境變量。 |
env |
顯示與當前用戶相關的環境變量,還可讓命令在指定環境中運行。 |
export |
顯示從 Shell 中導出成環境變量的變量,也能經過它將自定義變量導出爲環境變量。 |
如何區分環境變量,如下命令能夠體驗:
$temp=var_test $ech $temp Var_test #建立子shell,ubuntu默認shell爲bash $bash $echo $temp
#值爲空,表示該變量無效 $exit #導出變量temp爲環境變量 $export temp $bash $echo $temp var_test |
按變量的生存週期,變量分永久的和臨時的兩類:
(1)永久變量,須要修改配置文件,變量永久生效;
(2)臨時變量,使用export命令行聲明便可,變量在關閉shell後失效。
有兩個重要文件/etc/bashrc和/etc/profile,它們分別存放的是shell變量和環境變量。
3、添加自定義路徑到「PATH」環境變量
在每一個用戶的home目錄中有一個Shell每次啓動時會默認執行一個配置腳本,以初始化環境,包括添加一些用戶自定義環境變量等等。Bash的配置文件爲.bashrc。它們在etc下還都有一個或多個全局的配置文件,不過咱們通常只修改用戶目錄下的配置文件。
咱們能夠簡單地使用下面命令直接添加內容到 .bashrc 中:
$echo "PATH=$PATH:~/mybin">>.bashrc |
上述命令中>>表示將標準輸出以追加的方式重定向到一個文件中,注意前面用到的>是以覆蓋的方式重定向到一個文件中,使用的時候必定要注意分辨。在指定文件不存在的狀況下都會建立新的文件。
4、變量刪除
可使用unset命令刪除一個環境變量。
5、環境變量當即生效
在shell中修改了一個配置腳本文件以後(好比bash的配置文件home目錄下的.bashrc),每次都要退出終端從新打開甚至重啓主機以後其才能生效,非常麻煩,咱們可使用source命令來讓其當即生效。
$source ~/.bashrc |
1.1.6 Linux其餘命令
類別 |
命令 |
說明 |
文件搜索 |
whereis |
|
which |
|
|
find |
|
|
locate |
|
|
文件解壓縮 |
zip |
zip 打包文件夾:zip something.zip something(目錄請加-r參數) |
tar |
tar打包:tar -zcvf something.tar something tar解包:tar -zxvf something.tar |
|
uzip |
zip解包:unzip something.zip |
|
磁盤操做 |
df |
df命令查看磁盤的容量 |
du |
du命令查看目錄的容量 |
|
幫助命令 |
help |
help命令用於顯示shell內部命令的幫助信息。help命令只能顯示shell內部的命令幫助信息。而對於外部命令的幫助信息只能使用--help、man或者info命令查看 |
--help |
--help命令是用於顯示shell外部命令的簡要幫助信息。 |
|
man |
man命令是Linux下的幫助指令,經過man指令能夠查看Linux中的指令幫助、配置文件幫助和編程幫助等信息。 |
|
info |
info頁面比man page編寫得要更好、更容易理解,也更友好,但man page使用起來確實要更容易得多 |