linux基礎知識大綱

yoylee_web發表於2018-06-26
1Linux作業系統概述
  1. Linux作業系統的發展過程、創始人、GNU計劃等
源於UNIX
得益於GNU計劃;
藉助internet得以壯大;
推動了自由軟體、開源軟體的發展
1991年底,Limus Torvalds 公開了Linux 核心原始碼0.02
GNU1984年由RMS(Richard Mathew Stallman)發起,目的是開發一整套與UNIX相容的自由免費軟體。
Linux目前的應用:主要應用在伺服器領域;在手機、家電等嵌入系統方面,Linux有很好的表現;在桌面領域的擴張也非常快
  1. Linux作業系統的組成,核心的含義
組成
Linux核心
一些GNU程式庫和工具
命令列Shell
圖形介面的X windows系統和相應的桌面環境,如KDEGNOME
辦公套件、編譯器、文字編輯器等工具和應用軟體。
核心含義
只是基本的作業系統管理功能,不能直接當作業系統使用,還必須有Shell和各類系統軟體和應用軟體
  1. 瞭解Linux作業系統的特點,優缺點以及Linux作業系統的發行版本
Linux特點:
免費,良好的移植性(c語言寫成,編譯到不同硬體平臺上相對方便)
支援多使用者,多處理機
可完全定製
豐富的網路功能(TCP\IP起源自unix,所以linux天然就有網路上的優勢)
出色的安全穩定性
強大的技術支援(開源社群和商業技術支援並存)
良好的相容

發行版本:
Redhat企業版本
Fedora
CentOS
Debian
Ubuntu
Linux Mint
Mandriva
Suse
紅旗Linux
2shell的基本應用
1)字元介面、影像介面,以及各個終端介面之間的切換
         Ctrl Alt Fn
2)超級使用者、普通使用者的理解
root使用者:超級許可權者,有且只有一個可以做任何操作。
普通使用者:可以建立許多普通使用者,併為其指定相應的許可權,使其有限地使用Linux系統。
  1. 什麼是shell,常見的shelll型別,預設的shell
shellC語言編寫的一個命令解釋程式,解釋執行使用者命令或指令碼程式。
型別:sh csh bash ksh dash rbash
預設shellbash
  1. Linux樹形目錄的含義
邏輯上只有一個最高階別的根目錄“/,物理上內容可分佈在多個磁碟分割槽上。
  • Linux的目錄結構中主要的目錄有:
    • /:根目錄,最特殊的目錄,所有目錄的起點;
    • /home:除root以外的使用者主目錄都在這裡;
    • ~:指代每個使用者的主目錄(/home/使用者名稱);
    • /bin:存放Linux的常用命令;
    • /boot:核心和啟動檔案所在目錄;
    • /etc:系統多部分配置檔案所在之處;
    • /dev:所有裝置檔案儲存在這;
    • /mnt: 這個目錄是空的,系統提供這個目錄是讓使用者臨時掛載別的檔案系統。
    • /media:一般用於自動掛載,系統自動掛載的光碟、u盤檔案系統都在這下面。
    • /proc:在磁碟上實際不存在,裡面的檔案是動態生成的,根據執行的命令,採集系統程式執行狀態等資訊形成檔案放在該目錄下。
  1. shell常用基本命令的使用,以及常見的基本引數
pwd命令
用途:檢視工作目錄(Print Working Directory)當前工作目錄

cd 目錄名(或指代符號)
進入到指定的目錄中,常用指代符號有:
..”當前目錄的上一級目錄,
~”使用者的主目錄
-”上一次變更當前目錄前所在的目錄。

設定普通使用者的許可權
root使用者下 vi /etc/sudoers
su切換到root使用者許可權
 
echo命令
用於在終端顯示字串或變數,格式為:“echo [字串 | 變數]
echo命令檢視SHELL變數的值(前面有$符號):
# echo $SHELL
看本機主機名:
# echo $HOSTNAME

date命令
date命令用於顯示/設定系統的時間或日期,格式為:”date [選項] [+指定的格式]”。

reboot命令
用於重啟系統(root使用者可以使用)

wget命令
用於使用命令列下載網路檔案
格式為:wget [引數] 下載地址

find命令
例:find /home -name “hello” -atime +5 -ok rm -f {} \;
引數:-atime:在指定時間內被存取過的檔案,小時為單位
-amin: 在指定時間內被存取過的檔案,分鐘為單位
-ctime:指定時間內被更改的檔案,小時為單位
-cmin:指定時間內被更改的檔案,分鐘為單位
ifconfig用於獲取網路卡配置與網路狀態等資訊
格式為   ifconfig  [網路裝置]   [引數]”。
檢視本機當前的網路卡配置與網路狀態等資訊:
# ifconfig

uname命令用於檢視系統核心版本等資訊
格式為    uname [-a]
檢視系統的核心名稱、核心發行版、核心版本、節點名、硬體名稱、硬體平臺、處理器型別、作業系統等
# uname –a

who命令
用於檢視當前登入主機的使用者情況,
格式為:who   [引數]

last命令
用於檢視所有系統的登入記錄,
格式為:last   [引數]

看看當前登入的哪個shell
 echo $SHELL   顯示系統變數SHELL的值

type命令可以準確的告訴你一個可找到的命令的型別和位置
 type ksh

exit命令
退出到控制檯終端的login(登入)介面
退出虛擬終端,回到圖形桌面

命令輸入時的快捷鍵
tab自動補齊命令
輸入命令的幾個開始字元,按TAB可自動補齊命令  
反斜槓“\”:強制換行
快捷鍵 Ctrl+U:清空至行首
快捷鍵 Ctrl+K:清空至行尾
快捷鍵 Ctrl+L:清屏
快捷鍵 Ctrl+C:取消本次命令編輯
快捷鍵 Ctrl+D 傳送一exit訊號,沒有那麼強烈
Home:跳到行首
End:跳到行尾

清除歷史命令
  • 執行:history -c
呼叫歷史命令
  • !n:執行歷史記錄中的第n條命令
         
man open 顯示的是open(1),即最前面section
man 2 open       檢視open系統呼叫

         top命令
         動態監控linux系統狀況,用於實時顯示程式的狀態。
         ps命令
         提供程式過去資訊的一次性快照

磁碟掛載
1 fdisk –l 檢視所有掛載硬碟
3.執行命令
mkdir /mnt/usb          自建一個空目錄
mount -t vfat /dev/sdc1 /mnt/usb    執行掛載命令
mount  檢視所有掛載情況
4.可以進入目錄操作U盤了
u盤上建檔案
cd /mnt/usb
ls
vi my.txt
i,進入編輯,寫些內容。按冒號進入末行模式,輸入wq儲存退出。
ls                           顯示U盤檔案,my文字檔案已經存在了:)
複製檔案到u
cd ~   到使用者目錄下新建檔案後複製到u
touch my2.txt
cp my2 /mnt/usb
5.**解除安裝**
保證所有的終端或視窗都不在usb目錄下
umount /dev/sdc1
點掉虛擬機器選單中的可移動裝置,u盤就會轉回被windows識別

檔案管理
目錄操作:ls瀏覽目錄;Mkdir 新建目錄、rmdir刪除目錄;pwd顯示當前目錄、cd進入目錄
cp複製檔案、mv移動檔案(重新命名)、rm刪除檔案
touch 新建檔案、ln 建檔案連結
輸出檔案內容:catmore可向後翻頁、less前後翻頁
部分輸出檔案內容: cuthead
查詢檔案:findlocate
 grep(按檔案內容與指定的字串匹配查詢檔案,涉及正規表示式)
chmod設定檔案許可權
其他:*sortwccommdiffclear清屏、tar 壓縮包處理

程式管理
檢視程式狀態: ps top
程式控制:killbgfg

使用者管理
passwd設定密碼、who查詢當前登入使用者
useraddusermoduserdel
groupaddgroupmodgroupdel
susudo 換為root身份

磁碟管理
fdiskmount 掛載磁碟
dfdu,檢視磁碟空間

網路管理
ifconfig
ping traceroute netstat arpftp

幫助及其他
maninfo
calhistory

  1. 管道、別名、重定向的使用
設定別名(alias
alias [別名]=[需要定義別名的命令]
alias  ll=‘ls –al’
注意事項:
等號兩端不能空格,字串最好加引號
瀏覽別名:$ alias
取消別名:$ unalias 命令
寫入配置檔案:為命令取的別名在該次登入期間始終有效。若要別名在每次登入時都有效,需將alias命令寫到初始化指令碼檔案中。

輸入輸出流的重定向
輸入
獲得鍵盤輸入後寫入到testfile中,按ctrl+d結束輸入。
cat >testfile 
test.sh獲得輸入資料,然後輸出給catfile檔案
cat >catfile <test.sh
輸出
> 會覆蓋檔案原內容;>> 則是在原內容後追加
可利用重定向快速建立檔案:
 echo “hello” >testfile
0        代表stdin標準輸入
1        代表stdout標準輸出
2        代表stderr標準錯誤輸出
  • 命令 >file    (預設為1
輸出重定向到檔案file,終端上只會有標準錯誤輸出。
  • 命令 2>file
錯誤提示重定向到檔案file,終端上只會有標準輸出。
遮蔽命令的任何輸出
cp /etc/my.conf  >/dev/null  2>&1
這是一個沒有實際意義的錯誤命令,只演示一個沒有任何資訊或錯誤提示輸出的命令執行。
  • cp命令沒有目標檔案,應該輸出錯誤。
  • 2>&1表示錯誤重定向指向標準輸出。
  • >/dev/null又使標準輸出重定向到空裝置,最後就是沒有任何輸出資訊。

管道符“|
 前一個的結果作為後一個命令的輸入
 ls | head -5  (此為“橫槓5”不是減號5   (head -n –(+)k的建議用法)
瀏覽當前目錄下的檔案資訊,但只顯示前五條
找不同:
準備工作:
echo “1hello”  >>testfile
echo “2hello”  >>testfile
echo “3hello”  >>testfile
//
head –n +2 testfile  前面兩條資料   等同(head –n 2 testfile
head –n -2 testfile  除了最後兩條資料的所有條資料
tail -n 3 testfile  最後三行資料  等同(tail -n -3 testfile
tail -n +3 testfile  除了前三行資料的其他所有資料

壓縮檔案命令
tar –zxvf  a.gz
該命令將壓縮包a.gz解壓
-z 說明是解壓.GZ型別檔案
-x 說明是解壓操作
-v 顯示詳細資訊
-f 必須,表示使用歸檔檔案

幫助命令
  • [命令] ——help
  • man [命令]
    • man  [選項] 命令名稱
    • 常用選項               說      明
    • -S           根據章節顯示,一個命令可能會有很多類別,類別說明見下表
    • -f            只顯示出命令的功能而不顯示其中詳細的說明檔案
    • -w          不顯示手冊頁,只顯示將被格式化和顯示的檔案所在位置。
    • -a           顯示所有的手冊頁,而不是隻顯示第一個。
    • -E           在每行的末尾顯示$符號   
    • 舉例
    • 1
    • man passwd
    • man S 5 passwd
    • 2open,kill這種既有命令,又有系統呼叫,也可用章節限定查詢的範圍
    • man open     顯示的是open(1),即最前面section
    • man 2 open  檢視open系統呼叫
  • info [命令]
  • 幾個操作命令
    • q:退出man狀態
    • enter: 逐行閱讀man 檔案
    • 空格鍵:逐頁閱讀man 檔案
    • b鍵:向前翻頁
    • /string: 查詢string 字串

cal命令
  • 語法:cal [引數] [ [月份] 年份 ]
  • 說明:顯示指定月份的日曆,預設為當前月份。
  • 引數說明:
    • -3    顯示指定月份的前一個月、指定月份、下一個月三個月的日曆
    • -m   以“星期一”為星期的起始
    • -w   在每欄下面顯示星期數
    • -y     顯示指定年份所有月份的日曆

history
  • 語法:history [引數]
  • 說明:顯示輸入過的所有命令。

搭配grep的正規表示式
  • ∧表示開始位置,$表示結束位置,[a-z]表示字元的範圍,
 .表示任意字元出現一次或更多次
  • 檢視以英文字母開頭,/結束的行  
  • ls -F |grep “[a-z]./$”

file命令
  • 語法:file [選項] [-f] 檔案
  • 說明:顯示指定檔案的型別與編碼格式。
  • 引數說明:
    • -b    以簡明方式顯示資訊
    • -f     指定該選項後面的字串為檔案列表
    • -z     檢視壓縮檔案內部的檔案資訊
    • -d    顯示除錯資訊
-s        按照普通檔案處理特殊檔案(如字元裝置檔案
wc命令
-c       位元組
-w      word         
-l        line
  • 統計當前目錄下的檔案數和目錄數
  • # ls -l |grep "^-"|wc l
 # ls -l |grep "^d"|wc -l

cat命令
           將檔案和標準輸入裝置的輸入使用標準輸出流輸出。常被用來顯示檔案的內容。
cat /etc/passwd
  • 引數說明:
    • -b    對所有的非空行進行編號輸出
    • -n    對所有的行進行編號輸出
    • -T    將所有的“Tab”顯示成“^I
    • -s     對於連續出現的多個空行,僅輸出一個空行
    • -E    在每行的結束位置輸出“$

more命令
           顯示檔案內容,每次顯示一屏。常與其他命令結合使用:
ls -help |more
  • 注意: more命令中按“ENTER”是向後移動一行,按“SPACE”是向後移動一頁,按“q”退出。

less命令
ls -help |less
           more相似,但瀏覽文字時允許翻頁來回看。Less並不在一開始就讀入整個檔案,因此在開啟大型檔案時比vi等文字編輯器快。

cut命令
           截斷顯示檔案中的內容,常用於對/etc/ passwd 類的檔案進行處理:
  • 顯示每行從開頭算起 n1 n2 的文字。
cut c n1-n2 file
  • 以空格為分隔符,顯示第2個欄位
cut f 2 d file

sort命令
         對檔案內容進行排序顯示:
         cat /etc/passwd 預設是按程式號排序
         sort t:’–k3 -nr /etc/passwd
                   引數說明:
  • t 分隔符:使用分隔符隔開不同區塊,預設是tab
  • start  -end:由第start區塊排序到end區塊
  • n:使用純數字排序(預設是以字母方式排序)
  • r:反向排序
  • u:相同出現的一行,只列出一次
  • -k:按那個欄位來進行排序

touch命令
建立新檔案、修改檔案時間
touch newfile1
touch a t 200012301111 newfile1
 修改檔案訪問時間為2000.12.301111
  • 引數選項:
    • -a:僅修改檔案訪問時間access tiem
    • -m:僅修改檔案修改時間mtime
    • -c:僅修改時間,而不建立檔案
    • -d:後面可以接日期,也可以使用 date=“日期或時間”
    • -t:後面可以接時間,格式為【YYMMDDhhmm

mv  [選項 原始檔或目錄  目標檔案或目錄
  • -f  若目標檔案或目錄名已存在則直接覆蓋(預設引數複製檔案時也是覆蓋)
  • -i  覆蓋前先行詢問使用者。
  • -u  在移動或更改檔名時,若目標檔案已存在,且其檔案日期比原始檔新,則不覆蓋目標檔案。
  • -v  執行時顯示詳細的資訊。
  • -b  若需覆蓋檔案,則覆蓋前先backup
    • -S<附加字尾>,與-b引數一併使用,可指定備份檔案的所要附加的字尾。
-V=<方法 與-b引數一併使用,可指定備份的方法。 

cp  [選項 原始檔  目標檔案
  • - a 常在拷貝目錄時使用。保留連結、檔案屬性,並遞迴地拷貝目錄,作用等於dpr選項的組合。
    • - d 拷貝時保留連結。
    • - p 把修改時間和訪問許可權等屬性也複製到新檔案
    • - r 此時目標檔案必須為一個目錄名。將遞迴複製該目錄下所有的子目錄和檔案。(-R,一般與-r等價,但遞迴複製特殊檔案如FIFO檔案或/dev/zero的時候,用-R
  • - f 目標檔案已存在的直接覆蓋而不提示。
  • - i 覆蓋目標檔案之前給出提示需求使用者確認。
- l 不作拷貝,給原始檔建硬連結檔案。

rm [–引數] 檔案或目錄
預設刪檔案或目錄時不詢問確定,
  • -i  刪除前先詢問使用者。
  • -f  強制刪除。
  • -r  遞迴處理,將指定目錄下的所有檔案及子目錄一併處理(-R)
  • -v  顯示指令執行過程

tar -主選項 [輔選項] 包名 [檔案或者源/目的目錄]
  • 主選項:必須要有
    • -c   建立新的備份檔案
    • -x   從檔案檔案中釋放檔案
    • -t   列出備份檔案的內容
    • -r   追加新檔案到已存在的備份檔案
    • -u   用新檔案更新包裡的檔案,如果檔案沒有,則追加到包的最後
  • 輔選項:
    • -f 使用檔案檔案或裝置,這個選項通常是必選的,且寫在選項的最後。
    • -v 詳細報告tar處理的檔案資訊。
    • -C 釋放包時指定釋放的位置
    • -z gnzip壓縮處理備份檔案
    • -j bzip2壓縮,壓縮率大於 -z
3.Shell執行的命令分為:
  • 內建命令
例:whereis cd        沒有結果,可見cd是內建命令
  • 外部命令(對應一個程式檔案,執行該命令時,由shell根據路徑環境變數查詢到命令對應的檔案,觸發其執行)
例:whereis ls          可看到它是在/bin目錄下
3vi的使用
1vi的三種工作模式以及之間的切換
Vi有三種基本的工作模式:指令行模式、文字輸入模式、行末模式。他們的相互關係如所示。
指令模式(Command Mode 下輸入  aio進入文字輸入模式(Input Mode)
文字輸入模式(Input Mode) 下按ESC進入指令模式(Command Mode
指令模式(Command Mode)下輸入:進入末行模式(Last line Mode
末行模式(Last line Mode)下指令錯誤則返回指令模式(Command Mode
2常用的儲存、刪除、複製等常見指令
         1.複製剪下貼上撤銷
複製:
複製一行則:yy
複製三行則:3yy,即從當前游標+下兩行。
複製當前游標所在的位置到行尾:y$
複製當前游標所在的位置到行首:y^
剪下:
剪下一行:dd
前切三行:3dd,即從當前行+下兩行被剪下了。
剪下當前行游標所在的位置到行尾:d$
剪下當前行游標所在的位置到行首:d^
貼上:
v選中文字之後可以按y進行復制,如果按d就表示剪下,之後按p進行貼上。
撤銷與恢復:
'u' : 撤銷上一個編輯操作
'ctrl + r' : 恢復,即回退前一個命令
'U' : 行撤銷,撤銷所有在前一個編輯行上的操作
3.移動游標指令
移動游標普遍使用的是方向鍵,考慮相容問題,vi定義太多的方向指令,下面只是一小小部分(常用的幾個):
space: 游標右移一個字元
Backspace: 游標左移一個字元
Enter: 游標下移一行
nG: 游標移至第n行首
n+: 游標下移n
n-: 游標上移n
n:游標移至第n行尾0:游標移至當前行首
: 游標移至當前行尾
4.插入刪除指令
常用插入、刪除指令如下:
i:在當前游標前插入,游標後文字向後移
a:從當前游標後插入,游標後文字後移
I:在游標所在行首插入(第一個非空白字元前)
A:從游標所在行末插入
o: 在游標所在行下面新增一行(並進入輸入模式)
O: 在游標所在行上方新增一行(並進入輸入模式)
x: 刪除游標所在字元,等同於[Delete]功能鍵
X: 刪除游標前字元,相當與[Backspace]
dd: 刪除游標所在的行
r: 修改游標所在字元
R: 替換當前字元及其後的字元,直到按 [ESC]
s: 從當前游標位置處開始,以輸入的文字替代指定數目的字元
S: 刪除指定數目的行,並以所輸入文字代替之
do: 刪至行首
d$: 刪至行尾
3vi常見的3、末行模式(Last line Mode
末行模式主要進行一些文字編輯輔助功能,比如字串搜尋、替代、儲存檔案等操作。主要命令如下
q -----結束Vi程式,如果檔案有過修改,先儲存檔案
q -----強制退出Vi程式
wq  -----儲存修改並退出程式
set nu -----設定行號查詢、替換等
/word 向游標之下搜尋word
?word 向游標之上搜尋word
4使用者和組的管理
1/etc/passwd /etc/shadow  /etc/group  /etc/gshadow四個檔案,理解使用者、組的概念,各個欄位的含義等。
         使用者檔案:/etc/passwd
使用者密碼檔案:/etc/shadow
使用者組檔案:/etc/group
使用者組加密資訊檔案:/etc/gshadow
  • 查詢系統中所有使用者
    • alias alluser=cut d: -f1 /etc/passwd
  • 檢視普通使用者
    • alias user=cut d: -f1,6 /etc/passwd |grep /home’或‘grep /home /etc/passwd |cut d: -f1,6
2如何建立刪除使用者(組)、設定密碼等,掌握常見引數的使用
         2.1使用者管理
         passwd [引數] [使用者名稱]   (修改使用者密碼)
  • -d    刪除指定使用者的密碼
  • -l      鎖定指定的使用者
  • -u    解除指定使用者的鎖定
  • -wn 設定n為密碼過期警告的天數
新增刪除使用者
只有超級使用者才能新建\刪除使用者
adduserdeluseruseradduserdel更方便些
互動性好
useradd 【選項】 使用者名稱
  • c   全名:指定使用者的全稱
  • 主目錄:指定使用者的主目錄
userdel 【-r】使用者名稱
  • r選項,系統不僅將刪除此使用者帳號,並且還將使用者的主目錄也一併刪除
修改使用者屬性——usermod
sudo usermod g sudo許可權的組 user
  • 主要選項說明:
全名:指定使用者的全稱
主目錄:指定使用者的主目錄
有效期限:指定使用者帳號的有效期限
f   緩衝天數:指定口令過期後多久將關閉此帳號
組群ID|組群名:指定使用者所屬的主要組群
組群ID|組群名:指定使用者所屬的附加組群
  • usermod -G 附屬組1,附屬組2...,附屬組X  使用者名稱
  • 為防止覆蓋原來為“附屬組名”,可新增-a引數:
    usermod -a -G 附屬組名 使用者名稱
登入Shell:指定使用者登入後啟動的Shell型別
使用者ID:指定使用者的UID
使用者名稱:指定使用者的新名稱
2.1組管理命令
新增組賬號:
  • 格式:groupadd  [-g GID]  組帳號名
組成員管理:
  • 格式:groupmod [選項]...  組帳號名
刪除組帳號:
  • 格式:groupdel  組帳號名
3檔案目錄的許可權和歸屬   數子法、字元法等
chmod [-引數][選項] 檔案和目錄列表
  • 文字設定法
$chmod o+w my.txt
$chmod ug+w,o-w my.txt
$chmod +w my.txt
$chmod R +w myfoder-R子目錄遞迴處理)
    • u:所有者;g:同組使用者;o:其他使用者;a:所有使用者(預設)
    • rwx(其他屬性s t u g o
  • 數字設定法
用八進位制數對應順序rwx
777111 111 111 rwxrwxrwx
664110 110 100  rw-rw-r
許可權掩碼命令:umask
  • 檢視下新建的檔案或目錄一般是什麼許可權?
    • 檔案 664
    • 目錄 775
  • 檢視系統預設設定的許可權掩碼umask,發現普通使用者和root不同,為了安全,root掩掉的許可權位多
  • 將當前目錄下的所有的C語言程式檔案拷貝至 Finished 子目錄中
    • cp *.c Finished
  • 刪除所有自建的測試檔案(命名風格要統一才方便批量處理)
    • rm test*
    • rm r dir*
4修改檔案的許可權、歸屬
5)特殊許可權不考
5shell程式設計
1shell指令碼的執行和基本組成
         一般以.sh為檔案字尾。
常見的兩種執行方式
檔案全路徑名
         要求檔案必須有執行許可權,如chmod 755 run.sh
./run.sh    執行當前目錄下的run.sh檔案
sh檔案全路徑名
         sh 目錄/run.sh
檔案開頭可指定一個或多個解釋指令碼程式的shell,如      #!/bin/bash,注意/bin不要漏了“/
2shell指令碼中特殊符號的含義
         註釋符#  
除了#!/bin/bash裡的#特殊
美元符$
使其後的普通字元作為變數。
         如:$a表示變數a的值。變數字元長度超過1個字元用{}括起來。
單引號’
強制取消轉義符號作用,被引起的字元全部做普通字元,即全部原樣。
         echo ‘my $SHELL’
雙引號”
引號內的內容,除$、轉義符\、倒引號`這三個保留特殊功能,其他字元均強制做普通符。
倒引號`
引號內的字串當做shell命令列解釋執行,得到的結果取代整個倒引號括起來的部分。
轉義字元
反斜線是轉義字元,它能把特殊字元變成普通字元。在某個字元前面利用反斜槓(\)能夠阻止shell把後面的字元解釋為特殊字元。
例:
$ echo  “Filename  is  N0\$\*”
Filename  is  N0$*
         萬用字元
         1.  * 代表0或者多個特殊字元
例子 yum.* 代表的可以使yum.也可以是yum.ayum.abyum.abc 當然小數點後面可以有多個字母
2.  “?”代表任意一個字元
例子 yum.
                   可以是yum.a yum.b yum.c
                   小數點後面必須有任意一個字元
         3.中括號[]
代表的是中括號中的任意一個,如[abcdef] 可以是a b c d e f 中的任意一個字母
  • [-]代表的是一個範圍
    •  [a-z]    表示可以是字母az之間的字母
                   ls  [1-5]*   
  • [^]      ^是反向選擇符號從字面意思可以知道也就是非的意思
    • [^abc]  表示只要不是a b c 這三個字元中的任意一個就選擇
4.花括號{}
  • 通過括號擴充套件可以生成需要的字串,括號中可以包含連續的序列或使用逗號分隔的多個專案,連續的序列包括一個起點和一個終點
  • #echo {a,b,c}
  •   a b c
3shell指令碼中的位置引數  shell變數
         常用於SHELL引數檢測的有
  • $# 命令列引數個數
  • $* “引數1 引數2…”形式儲存的所有引數
  • $@        “引數1”“引數2”…形式儲存的所有引數
  • $n n個引數
  • $? 前一個命令或函式的返回碼
  • $0 當前程式名
  • $$ 本程式的PID
  • $! 上一個命令的PID
         
export用於定義或修改環境變數。
普通變數可以不用宣告就可使用。
$ export TEST=Test...       #定義一個新環境變數。
$ export TEST=$TEST:add1#向環境變數TEST中加入新值。
$ unset TEST                       #刪除變數
$ readonly TEST                          #將環境變數TEST設為只讀,只讀的變數不能被刪除。
env命令顯示所有已定義的環境變數
 【修改環境變數】
兩種方式:
在命令列用export命令修改,只在本次登入的shell內有效。設定好的環境變數可以在當前使用者執行的所有程式中使用。
在配置檔案中修改環境變數的預設值,新登陸仍可有效。
命令列修改環境變數
以下在使用者user主目錄下操作:
  1. mkdir shdir && cd shdir
  2. vi hello
  3. chmod 755 hello
  4. cd
  5. export PATH=$PATH:$HOME/shdir
  6. 在任何目錄下,輸入hello即可執行該檔案。
配置檔案中修改環境變數
以下在使用者user主目錄下操作:
vi .profile
在檔案末尾新增一行
export PATH=$PATH:$HOME/shdir
esc返回命令模式,:wq儲存退出。
source命令使配置檔案立即有效
source .profile
現在,在任何目錄下即可執行shdir目錄下的所有可執行檔案了。
  1. 直接賦值
a=78
  1. 將一個命令執行的輸出賦給指定的變數
a=`date`
  1. 從標準輸入裝置讀入使用者輸入的值
read a
4能夠理解簡單指令碼的含義,分析shell指令碼程式
         條件測試命令test
         test -引數 n1             #一元判斷
         test n1 -引數 n2       #二元比較
注意引數與判斷的變數間要空格;
條件測試式
         [ -引數 n1 ]                #一元判斷
         [ n1 -引數 n2 ]           #二元比較
中括號與引數間要有空格
真返回0,假返回1
①整數比較
test 1 lt 4        #判斷1<4
echo $?                #結果為0
整數判斷相關引數:
-eq   等於
-ne   不等於
-lt     less than
-le     小於等於
-gt    greater than
-ge   大於等於
②字串
注意加雙引號
[ “$a”=“hello” ]
[ z $a ] 字串長度是否為0(是否空字串)
           =     等於
  !=   不等於
  >     按字元編碼表排序,前面的是否在後面字元的前面
  -z    字串長=0,空字串
  -n    字串長>0,非空字串
判斷字串為空的三種方法:
if [ $str =  “” ]
if [ x$str = x ]
if [ -z $str ] -n 為非空)
注意:都要帶雙引號,否則有些命令會報錯,養成好習慣
③邏輯操作
[ “$a”=“hello” –o –z “$a” ]
echo $?    顯示上一步結果
-a      邏輯與
-o      邏輯或
     邏輯非
邏輯判斷舉例
條件1 && 條件2
條件1 || 條件2
例子:
         #!/bin/bash
         x=5
         y=10
         if [ “$x” -eq 5 ] && [ “$y” -eq 10 ]
  then
                   echo “Both conditions are true.”
         else
                   echo “The conditions are not true.”
         Fi
          判斷檔案
[ -d mydoc ]
判斷mydoc是否是目錄
-f       存在且是普通檔案
-d      存在且是目錄
1)分支結構
if
if [ $# -eq 0 ]
then
         echo “輸入了0個引數”
elif [ $# -lt 1 ]
then echo “輸入了多個引數”
else echo “輸入了1個引數”
fi
case
case $# in
         0) echo “輸入了0個引數”;;
         1) echo “輸入了1個引數”
                     echo “引數是$1;;
         *) echo “輸入了多個引數”;;               
Esac
2)迴圈結構
for
例子——輸出10010的倍數
         for i in `seq 1  9`
         do
                   echo `expr $i \* 10`
         done
改為輸出ab序列數各數的10倍數:
         read a b
         for i in `seq $a $b`
5能夠編寫簡單的shell指令碼
6、檔案系統與磁碟管理
1)磁碟以及各個分割槽的表示含義
硬碟和分割槽的結構:
主分割槽,一個硬碟允許4個主分割槽
擴充套件分割槽:一個主分割槽可做擴充套件分割槽,只用於容納邏輯分割槽,並不建立檔案系統
邏輯分割槽:在擴充套件分割槽上建立, 使用5-63的識別號
2) 檔案連結
  •    硬連結(Hard Link)預設情況下,ln產生硬連結。原檔案和連線檔案的FCB記錄了相同的inode地址。
    • 建立硬連結時,連結檔案和被連結檔案必須位於同一個檔案系統中,並且不能建立指向目錄的硬連結
    • ln newfile oldfile
  • 符號連結(Symbolic Link)。win下的快捷方式差不多。包含所連結檔案的路徑。可連結任意檔案或目錄,可連結不同檔案系統的檔案,甚至可以連結不存在的檔案,網路檔案。
    • ln -s newfile oldfile
一個目錄至少有2個硬連結:目錄本身的相對目錄“.”,以及作為其子目錄的父目錄“..”都指向它。所以,如果目錄下新建一個子目錄,硬連結數為3
2)常見檔案系統
檔案系統是作業系統用於明確磁碟或分割槽上的檔案的方法和資料結構;即在磁碟上組織檔案的方法。
Windows系統有fat32ntfs
Linux中預設使用的檔案系統型別
EXT4 4代擴充套件(Extended)檔案系統
SWAP,交換檔案系統
Linux支援的其它檔案系統型別
FAT16FAT32NTFS
XFSRHEL7)、JFS
3)理解檔案分割槽、格式化、磁碟掛載
         裝置檔案:
所有的裝置都在/dev下有對應的裝置檔案,U盤作為磁碟裝置,linux把它識別為一個裝置檔案。fdisk l,可檢視全部裝置號。
掛載:
Linux中使用裝置都需要將裝置掛載到一個空目錄,通過對目錄的操作訪問裝置裡的內容。mount 命令可將裝置掛載到目錄。
         mount命令
用途:掛載檔案系統、ISO映象到指定資料夾
格式:mount  [ -t 型別 ]  儲存裝置  掛載點目錄
                   mount  -t vfat /dev/sda1  /mnt/win
         umount命令
用途:解除安裝已掛載的檔案系統
格式:umount  儲存裝置位置
        umount  掛載點目錄
  • 檔案系統開機自動掛載  (永久掛載)
    • /etc/fstab配置檔案
    • 包含了需要開機後自動掛載的檔案系統記錄
  1. 分割槽工具fdisk
    1. fdisk -l 列出硬碟分割槽資訊
    2. fdisk /dev/sda 互動模式操作sda裝置
  • m顯示所有可用命令
  • p顯示硬碟分割槽資訊
  • nep建立新、擴充套件、主分割槽
  • t更改分割槽檔案系統
  • d刪除硬碟分割槽
  • wq儲存、不儲存退出
  1. 格式化檔案系統mkfs
    1. mkfs 引數 t 檔案系統型別 裝置名
                            mkfst ext3 /dev/sda5
                   
1)掛載光碟 
光碟驅動器的裝置名為cdrom掛載到/mnt/cdrom
mkdir /mnt/cdrom
mount    /dev/cdrom /mnt/cdrom
2)掛載硬碟 
Windows裝在sda1分割槽,要把它掛載到/mnt/win
mkdir  /mnt/win
mount  -t vfat /dev/sda1  /mnt/win
若將裝在sda7上的Linux磁碟分割槽掛載到/mnt/linux1
mkdir /mnt/linux1
mount  -t ext4   /dev/sda7  /mnt/linux1
3)掛載移動裝置
USB介面的行動硬碟當作SCSI裝置對待,先通過fdisk l檢視系統的硬碟和分割槽情況,再掛載到一個準備的空目錄中
mkdir /mnt/usb
mount /dev/sdb1 /mnt/usb
4)理解一次性掛載和永久性掛載
5)瞭解邏輯卷,知道邏輯卷的建立和刪除順序
         物理儲存介質(Physical  Media
指系統的儲存裝置,硬碟或者分割槽
/dev/sda5,/dev/hdb1等,是儲存系統最底層的儲存單元
PVPhysical Volume,物理卷)
 整個硬碟,或使用fdisk等工具建立的普通分割槽
 包括許多預設4MB大小的PEPhysical Extent,基本單元)
LVM的基本儲存單元
VGVolume Group,卷組)
 一個或多個物理卷組合而成的整體
LVLogical Volume,邏輯卷)
 從卷組中分割出的一塊空間,用於建立檔案系統
1)新建空分割槽
使用分割槽工具fdisk建立LVM分割槽,方法和建立其他一般分割槽的方式是一樣的,需要注意通過t命令將LVM的分割槽型別改為8e
2)初始化分割槽(建立PV
pvcreate將空分割槽/dev/sdb5建立為物理卷
pvcreate /dev/sda5
3vgcreate建立卷組
vgcreate    –s 塊大小 卷組名 物理卷裝置名
vgcreate –s 8m vg0 /dev/sdb5
卷組名唯一 不能與/dev中的檔名衝突
4)建立邏輯卷
lvcreate  -n 【邏輯卷名】  –L  【邏輯卷大小】 【已存在卷組名】
lvcreate –L 200MB –n lv0 vg0
解除安裝物理卷 pvremove PVDEVICE
解除安裝卷組   vgremove VGNAME
解除安裝邏輯卷 lvremove LVDEVICE
解除安裝卷時,需要注意兩個事項
1)解除安裝邏輯卷前,先umount邏輯卷的目錄掛載點
2)解除安裝卷組前,必須先解除安裝所有使用到該卷組的邏輯卷
7、軟體管理和程式管理
1)理解紅帽使用的軟體包為rpm
2yum  install   軟體包   yum  remove  軟體包
3rpm  -ivh  *.rpm
4)理解Linux的程式的概念,理解跟程式的區別
         程式
靜態儲存的程式碼和資料
儲存在硬碟、光碟等介質中
程式
CPU及記憶體中動態執行的程式碼
父、子程式:每個程式可以建立一個或多個程式
5)理解Linux程式的狀態
         程式狀態
         R表示進行狀態;S表示休眠狀態;T表示暫停或終止狀態機;Z表示僵死狀態。
1)執行態 執行或準備執行
2)等待態
可中斷(TASK_ITERRUPTIBLE)
不可中斷(TASK_UNITERRUPTIBLE)
3)停止態(TASK_STOPPED)
4)僵死態(TASK_ZOMBIE)
6)前臺程式、後臺程式的啟動、切換
CTRL+Z 掛起當前的前臺作業
  • jobs命令可檢視後臺作業清單
    • 作業號 狀態 命令名
  • fg 作業號:將任務放回前臺執行
  • bg 作業號:將任務放到後臺執行
  • find / -name f*
7)程式的常見命令ps  top  kill 等的使用
         程式檢視
ps aux
a:顯示當前終端下的所有程式資訊
u:使用以使用者為主的格式輸出程式資訊
x:顯示當前使用者在所有終端下的程式資訊
         top
ps命令的基本作用是相同的,顯示系統當前的程式及其狀態,但是top是一個動態顯示過程
顯示結果排序的操作
預設按照cpu使用情況排序
m鍵:按照記憶體排序
t鍵:執行時間進行排序
u鍵,鍵入使用者名稱,檢視某一使用者的CPU使用情況
k鍵,輸入PID,可終止某一程式
q鍵,退出top
kill
Kill命令
通過向程式傳送訊號控制程式,可用於結束後臺程式。
–訊號 -s 訊號        :傳送訊號到指定的程式
-l 訊號           :將訊號數值翻譯成訊號名稱
常用:kill -9 PID           無條件撤銷程式
kill -KILL PID
              執行kill時一定觀察好PID號,以免誤刪系統程式。 kill執行是否成功,可用ps檢查被結束程式號是否還存在即可。
8)瞭解簡單的計劃任務
  •    at命令
    • 在指定的日期、時間點自動執行預先設定的一些命令操作,屬於一次性計劃任務
    • 服務指令碼名稱:/etc/init.d/atd
    • 設定格式:at  [HH:MM]  [yyyy-mm-dd]
  • 管理cron計劃任務
    • 編輯計劃任務:crontab  -e  [-u  使用者名稱]
    • 檢視計劃任務:crontab  -l  [-u  使用者名稱]
    • 刪除計劃任務:crontab  -r  [-u  使用者名稱]
8、簡單的網路介面的命令  nmcli  ip  addr   ifconfig  ping  等的基本使用
【配置網路介面】——ifconfig
ifconfig [引數] [介面] [操作]
ifconfig eth0 192.168.1.10 netmask 255.255.255.0
ifconfig eth0 192.168.1.10/24
Ifconfig eth0 up
引數說明:
-a      顯示所有可用的介面資訊,包括未連線的介面
-s      顯示短列表
-v      在發生錯誤的情況下顯示更多的錯誤資訊
  1.    檢視網路卡資訊
ip addr (可簡寫為 ip a )
ip addr show eno0
  1. 給網路卡手動新增一個地址
ip addr add IP地址 裝置名稱
  1. 刪除一個地址
ip addr del IP地址 裝置名稱
  •    看閘道器
netstat –rn  route -n
traceroute www.某某
ip route
  • DNS
                   cat /etc/resolv.conf
                   nslookup 127.0.0.1
                   dig
         配置網路介面】——nmcli
  •    nmcli強大之處在於
  1. 使用一條命令實現ifconfigrouteip 等其他的功能
  2. ②做的修改可以自動同步到配置檔案之中長期有效,不需手工修改配置檔案,
  • 輸入nmcli ,按Tab,系統會提示該命令後面作用於的物件名
【網路連通測試】——ping
ping [引數] 目標地址
通過傳送ICMPECHO_REQUEST報文,探測網路連通狀態。預設情況將無限次的重複傳送。
  • 引數說明:
    • -b    目標地址允許是廣播地址
    • -c N 設定傳送的次數
    • -i 間隔     設定傳送報文間的間隔,預設值為1
    • -n    僅適用數字輸出
    • -q    不輸出每次傳送報文的結構,僅顯示綜合資訊
    • -v     輸出更多的資訊
9Linux下的C程式設計
1gcc的使用,編譯過程
  1.    編譯執行
         gcc hello.c                  編譯生成可執行檔案,結果為a.out
         gcc –o hey hello.c    編譯生成可執行檔案,指定結果檔名為hey
         引數

-o
指定輸出的檔名
-g
產生符號除錯工具(GNUGDB)所必要的符號資訊,要想對原始碼進行除錯,
必須加入這個選項。

  •    gccc語言程式編譯器。一個C語言程式編譯過程如下:
  1. 編輯:寫原始碼
  2. 預處理:系統載入標頭檔案和展開巨集,僅對文字資訊處理,是編譯前的準備、整理。
  3. 編譯:將C語言轉換為對應的計算機機器碼,生成二進位制檔案。但若有多個模組,此時的檔案還不能執行,因為各模組還相對獨立,相互使用的地方還是標記。
  4. 連結:將模組合成一個可執行的整體。
gcc通過分別呼叫預處理、編譯、連結工具,自動完成C程式的編譯工作。
2)理解四個系統呼叫的使用
  • Fork()-父親克隆一個兒子。執行fork()之後,兵分兩路,兩個程式併發執行。
呼叫fork程式執行就發生分叉,變成兩個控制流程,這也是“fork”(分叉)名字的由來。
  • 子程式克隆父程式
    • 父子程式記憶體空間程式碼相同,除非兒子用exec另啟門戶做其他工作。
  • 一次呼叫,兩個返回值
    • fork呼叫後,系統會在子程式中設定fork返回值是0,而父程式記憶體空間中fork的返回值則是子程式的pid
    • Exec()-新程式脫胎換骨,離家獨立,開始了獨立工作的職業生涯。
    • Wait()-等待不僅僅是阻塞自己,還準備對僵死的子程式進行善後處理。
      • 阻塞自己,等待第一個僵死子程式,進行下面操作,否則一直阻塞下去。
      • 收集僵死子程式資訊
      • 釋放子程式pcb,返回
      • 呼叫成功,返回被收集子程式的PID;如果沒有子程式,返回-1
    • Exit()-終止程式,把程式的狀態置為僵死,並把其所有的子程式都託付給init程式,最後呼叫schedule()函式,選擇一個新的程式執行。
程式執行結束或呼叫exit後,程式生命就要終結,但程式不是馬上消失,而是變為僵死狀態——放棄了幾乎所有記憶體空間,不再被排程,但保留有pcb資訊供wait收集,包括:
  • 正常結束還是被退出
  • 佔用總系統cpu時間和總使用者cpu時間
  • 缺頁中斷次數,收到訊號數目等
  • 利用引數status傳遞程式結束時的狀態
3)能夠分析四個系統呼叫的執行結果
  •    關於併發順序
父子程式併發,linux優先排程執行子程式比較好。
分析:如果先調父程式
  1. 因為fork將父程式資源設為只讀,只要父程式進行修改,就要開始寫時複製,把父程式要改的頁面複製給子程式(寫子空間)。
  2. 繼續執行,一旦子程式被排程到,它往往要用exec載入另一個可執行檔案的內容到自己的空間(又寫子空間),可見上步的寫入就多餘了。
所以,fork後優先排程子程式可從父程式克隆到子程式後,儘量減少沒必要的複製。
  • 子程式呼叫exec使地址空間被填入可執行檔案的內容,子程式的PID不變,但程式功能開始有別於父程式。
  • 注意exec函式執行成功就會進入新程式執行不再返回。所以子程式程式碼中exec後的程式碼,只有exec呼叫失敗返回-1才有機會得到執行。
4)理解孤兒程式、殭屍程式等概念
  • 孤兒程式問題
                   父程式在子程式前退出,必須給子程式找個新父親,否則子程式結束時會永遠處於僵死狀態,耗費記憶體。
  • 在當前程式/執行緒組內找個新父親
  • 或者,讓init做父親
  • 殭屍程式只能通過父程式wait回收它們,他們是不能用kill命令清除掉的,因為kill命令只是用來終止程式的,而殭屍程式已經終止了。