linux命令

0. {基礎知識}[tap] 自動補全功能,當文件名第一個字符爲.時,表示該文件爲隱藏文件;
    windows系統不識別linux系統文件原因在於windows核心不識別linux文件系統
    dos文件回車爲\n\r,linux爲\n,:%s/\r//g轉換.也可以用dos2linux -k filename轉換

1.    man     關鍵字 查詢在線幫組
2.    sync     數據同步寫入磁盤
3.    shutdown -h now     關掉服務後立即關機
4.    chgrp root filename     更改文件所屬組
5.    chown     更改文件所屬用戶
6.    chmod     更改文件屬性:d(表示是目錄文件還是一般文件)rwxrwxrwx分別爲4+2+1=7,7+7+7; 第一個屬性表示該文件類型,d=directory,l=link,b=block,c=character(bc爲設備文件devce).    ..
7.    mkdir    [-mp] filename      是建立目錄用的命令,make directory的縮寫,-m:設置文件權限,直接設置,不要管默認權限.-p:幫組直接建立所需要的目錄遞歸.
     例:mkdir -p test1/test2/test3/test4     加了-p參數後,可以建立多層目錄.    
       mkdir -m 711 test2     加了-m參數後可直接設置權限
8.    touch [-acdemt] filename 修改文件時間與創建新文件.
       status time(ctime,-c),access time(atime,-a)指文件狀態
       -a:公修改access time
       -c:公修改時間,而不建立文件
       -d:後面可以接日期,也可以使用 --date="日期或時間"
       -m:公修改mtime
       -t:後面可以接時間,格式爲[YYMMDDhhmm]
9.    su     用來"變換身份"
10.  cat     將文件內容讀出來
11.  ls -al     可簡單通過文件第一屬性來了解這個文件的類型.查看當前目錄所有文件,及其屬性.
12.  cd [path]     Change Directory的縮寫,用來切換工作目錄的命令
13.  pwd [-p]     Print Working Directory,顯示當前所在的目錄,-p:顯示出實際中徑,而非使用link路徑
14.  rmdir [-p] filename     刪除"空"目錄,只能刪除空目錄,加上-p參數後能將一個路徑目錄一次刪除,但必須爲空目
15.  rm [-fir] 文件或目錄     -f:(force)強制刪除, -i:刪除前詢問, -r:遞歸刪除,常用在目錄的刪除

   rm -rf test 將目錄下的東西全都刪除
16.  ll =ls -l     簡略寫法
17.  cp [-adfilprsu] source destination
18.  mv [-fiv] source destination 移動文件與目錄,或重命名 -u(update)若文件已存在,且源文件比較新,纔會更新.
     mv [options] s1 s2 s3.    .. directory
     mv filename1 filename2 這樣就將filename1重命名了.    
19.  basename path 獲取最後的文件名
       dirname path  獲取目錄名
20.  cat:由第一行開始顯示文件內容
       tac:從最後一行開始顯示,可以看出tac與cat字母相反
       nl:顯示的時候輸出行號
       more:一頁一頁地顯示文件內容
       less:與more類似,但它可以向前翻頁
       tail:只看最後幾行
       od:以二進制方式讀取文件內容
21.  head [-n number] filename,-n:表示顯示幾行的意思,顯示前幾行
22.  tail [-n number] filename,-n:表示顯示幾行的意思,顯示後幾行
23.  od [-t TYPE] 可以查看執行類文件,-t:後面可以接各種"類型"的輸出
        a:使用默認的字符來輸出
        c:使用ASCII字符來輸出
        d[size]:使用十制進來輸出
        o[size]:使用浮點數值來輸出
        x[size]:使用十六進制輸出
        這個命令對普通用戶來說作用不大,但對工程師來說非常有用,他們能讀懂二進制內容
24. umask [-S],-S:加上S參數以字符形式顯示默認權限,指定的是"該默認值需要減掉的權限",r w x分別是4 ,2, 1,也就是說,當要去掉寫權限時,就輸入2,要去掉讀權限時,就輸入4,要去掉讀與寫的權限時,就輸入6,要去掉讀與執行的權限就輸入5,如:umask 022
25.  chattr [+-=] [ASacdistu] filename 設置文件隱藏屬性
        +:增加某個特殊參數,其它原本存在的參數不動
         -:刪除某個特殊參數,其他原本存在的參數不動
        =:設置一定,且公有後面接的參數
    A:當設置了A屬性時,這個文件或目錄的訪問時間aime將不能被修改,例如可避免手提電腦有磁盤I/O錯誤的情況
    發生
    S:這個功能有類似sync,就是將數據同步寫入磁盤中
    a:設置a之後,這個文件將只能增加數據,而不能刪除,只有root才能設置這個屬性.
    c:這個屬性設置後,將會自動將此文件"壓縮",在讀取的時候將會自動解壓縮
    d:當執行dump(備份)程序的時候,設置d屬性將可使該文件或目錄具有轉儲功能
    i:i的作用很大,它可以讓一個文件"不能被刪除.改名,設置連接,也無法寫入或新增數據"對於系統安全有很大幫組
    j:當使用ext3文件系統格式時,設置j屬性會使文件在寫入時先記錄在journal中,但是,當文件系統設置參數爲
    data=journalled時,由於已經設置了日誌,所以這個屬性無效
    s:當文件設置了s參數時,它將會從這個硬盤空間完全刪除
    u:與s相反,當使用u來設置文件時,數據內容其實還存在磁盤中,可以用來還原刪除
26.chmod xyz filename, 設置文件或目錄的SUID SGID Stichy Bit屬性.1爲Sticky Bit,2爲SGID,4爲SUID. 例:chmod 1777 filename.前面1表示設置Sticky Bit屬性
27.file filename: 如果想知道某個文件的基本信息,例如屬於ASCII,數據文件還是二進制文件且其中是否使用動態函數庫等信息.
28.    which [-a] command 尋找執行文件.-a:將所有可找到命令均列出而不僅僅列出第一個找到的命令名稱.
29.    whereis [-hmsu] filename/directory 尋找特定文件
    -b:只找二進制文件
    -m:只找在幫組文件manual路徑下的文件
    -s:只找源文件
    -u:沒有幫組文件的文件
30.    locate filename: locate,whereis都是通過數據庫來搜索的,所以速度比較快,但有一個缺點就是默認數據庫
    是每天更新一次的.也可以手動更新.
31.    find [PATH] [option] [action]: 功能強大的搜索功能.PS:要指定在哪個目錄下搜索,否則默認當前目錄.
    -atime n:在n天之前的"一天之內"訪問過的文件
    -ctime n:在n天之前的"一天之內"修改過狀態的文件
    -mtime n:在n天之前的"一天之內"修改過的文件
    -newer file:file爲一個存在的文件,意思是"只要文件比file要新就列出來"
    例:    find / -perm +7000 -exec ls -l {} \
        -exec後面的ls -l是額外的命令,{}表示"由find找到的內容","\;"表示-exec命令到此爲止.
    不知道全名的時候,可能過通配符*,如:find -name '*fly*': 則會查找名字含有'fly'的文件
32.    df [-ahikHTm] [directory/filename]    查看當前磁盤最大允許容量,已用的容量,當前所在目錄的已用容量.
    du :同上
33.    ln [-sf] 源文件 目標文件 :建立連接文件,不加-s建立硬連接,加-s建立符號連接.
34.    fdisk [-l] 磁盤分區
    fdisk /dev/hdb 分驅/dev/hdb,這裏進入fdisk畫面中.
35.    mke2fs [-bioLj] 設備名稱
36.    fsck [-Atcary] 設備名稱
37.    badblocks [-svw] 設備名稱,和fsck一樣,都是用來檢查硬盤錯誤的命令
38.    mount 磁盤的載入與卸載  mount -o loop .iso directory:可以將鏡像文件掛載
39.    mknod 修改磁盤參數
40.    gzip [-cdt#] filename : 壓縮與解壓縮
    -c:將壓縮的數據輸出到屏幕上,可通赤婁據流重導來處理
    -d:解壓縮的參數
    -t:可以用來檢驗一個壓縮文件的一致性,看文件有無錯誤
    -#:壓縮等級,-1最快,但壓縮比最差,-9最慢.
    zcat filename :查看一個壓縮文件內容
41.    bzip2,bzcat:同上,compress擴展名爲.Z,gzip爲.gz,bzip2爲.bz2.
42.    tar [-cxtzjvfpPN] filename\directory
    -c:建立壓縮文件的參數命令(create的意思)
    -x:解壓縮文件的參數命令
    -t:查看tarfile裏的文件,前三個參數只能有一個存在,不能同時存在.
    -z:是否需要用gzip壓縮
    -j:是否同時具有bzip2的屬性,是否要用bzip2壓縮.
    -v:壓縮的過程中顯示文件
    -f:使用文件名,在f後要立即接文件名,不要再加參數
    -p:使用原文件的原來屬性,很重要
    -N:
    tar -cvf /tmp/etc.tar /etc 僅打包,不壓縮.
    tar -zcvf /tmp/etc.tar.gz /etc 打包後,以gzip壓縮
    tar -ztvf /tmp/etc.tar.gz 查看壓縮文件內容,加上前面對應的方式z或j很重要
43.    dd if="input_file" of="outptu_file" bs="block_size" count="number"
    if:是輸入文件,也可以是設備
    of:輸出
    bs:規劃的一個塊的大小,如果沒有設置時,默認是512字節
    count:多少個bs的意思
    例:    dd if=/etc/passwd of=/tmp/passwd.back
    一般用來備份文件.
44.    dos2unix -k -n hosts.dos hosts.linux將範例一已經變成DOS格工的hosts轉換
    linux格式到hosts.linux
    unix2dos 相反
    在不同系統中共用文件時必須經過這兩個轉換. 不同系統中的換行符不同,windows的DOS是CRLF,linux是LF,windows佔用空間大.
45.    alias lm='ls -al' 命令別名設置功能
46.    type [-tpa] name 不加任何參數時,type會顯示出name是外部命令還是bash內置命令.
    加入-t參數時,type會將name通過下面這些文字顯示出它的意義
    file:    表示爲外部命令
    alias:    表示該命令爲命令別名所設置的名稱.
    builtin:表示該命令爲bash內置的命令功能.
    -p:如果後面接的name爲命令,會顯示完整文件名或顯示爲內置命令
    -a:在PATH變量定義的路徑中,列出所有含有name的命令,包含alias
47.    變量的使用:
    顯示變量值, echo $variable 只需在變量名前加上$就能顯示變量的值
    例:    myname=Kenfly && echo $myname 會顯示Kenfly
    當一個變量名稱尚未設置時,默認的內容是"空"的,變量設置是要符合某些規定,否則會失效:
    1.變量與變量內容以等號"="來連接
    2.等號兩邊不能直接接空格符
    3.變量名稱只能是英文字毌與數字,但數字不能是開頭字符
    4.若有空格符,可以使用雙引號""或單引號將變量內容結合起來,但要特別注意,雙引號內的特殊字符可以保持變量特性,但單引號內的特殊字符則僅爲一般字符
    5.必要時需要以轉義符"\"將特殊符號(如Enter,$,\,空格符,等)變成一般符號
    6.在一串命令中,還需要通過其他命令提供的信息,可以使用這樣的方式`command`(特別注意,`是鍵盤上方的數字鍵1左邊的那個鍵,非單引號)
    7.若變量爲擴展變量內容,需要以雙引號及$變量名稱如"$PATH":/home繼續類加內容
    8.若該變量需要在其他子程序中執行,則需要用export使變量變成環境變量,如"export PATH"
    9.通常大寫字毌爲系統默認變量,自行設置變量可以使用小寫字毌,便於判斷
    10.取消變量的方法:"unset 變量名稱"
48.    在這串命令中,`之內的命令將先執行,而其執行出來的結果將作爲外部輸入信息
    如:    ls -l `locate crontab`,它的含義是,先用locate將文件名數據都列出來,再用ls命令來處理
49.    環境變量的使用:
    env:列出所有變量的信息:
    HOME:代表用戶的家目錄,我們使用的cd ~到用戶的家目錄就是用這個功能
    SHELL:告訴我們,當前的這個環境使用的shell是哪個程序
    HISTSIZE:與"歷史命令"有關,即我們曾經執行過的命令可以被記錄下來的數目
    ENV:這個是用戶所遙的個性化環境設置文件的讀取文件
    MAIL:當使用mail命令收信時,系統會去讀取的郵件信箱文件
    PATH:就是執行文件搜索的路徑,目錄之間以冒號:分隔,文件的搜索是按順序由PATH的變量內的目錄來查詢
    LANG:這個很重要,就是語系文件
    RANDOM:這是隨機數變量,能產生介於0~32767這間的數,要使用0~9之間的數值時,可以用declare聲明數值類型:
    declare -i number=$RANDOM*10/32767 ; echo $number
    PS1:提示符的設置
    \d:代表日期
    \H \h:代表主機名稱
    \t \T \A:顯示時間
    \u:當前用戶的賬號名稱
    \v:bash的版本信息
    \w \W:利用basename取得工作目錄名稱
    \#:執行的第幾個命令
    \$:提示符,如果是root時,提示符爲#,否則就是$.
    如:    PS1='[\u@\h \w \A #\#]\$'
    $:    這個表示"當前這個Shell的進程號",即爲PID
    ?:    表示上一個執行命公的回傳碼,成功一般返回0,否則返回非0值


50.    read [-pt] variable(變量) 
    -p:後面可以接提示符
    -t:後面可以接等待的"秒數",這個比較有意思,不會一直等待用戶.
    read var :    讓用戶通過鍵盤輸入內容,將內容變成var變量值
60.    declare [-aixr] variable
    -a:將後面的variable定義爲數組(array)
    -i:將後面的variable定義爲整數數字(integer)
    -x:用法與export一樣,就是將後面的variable變成環境變量
    -r:將一個variable的變量設置成只讀,該變量不可更改內容,也不能取消設置(unset)
    範例:讓變量sum對100+300+50求和
    # sum=100+300+50 && echo $sum :這命令將顯示100+300+50,而不是我們想要的結果,這是因爲sum是文字變量
    正確做法是應先聲明sum爲整型
    :    declare -i sum=100+300+50 && echo $sum
61.    var=${str-newvar}    :若str這個變量內容存在,剛var設置爲str,否則設置爲"newvar"
62.    alias rm='rm -i' :命令別名
    unalias rm     :取消命令別名
63.    history:列出當前內存的所有歷史記憶
    history 3:列出當前最近的3個命令
    history -w:在默認的情況下,會將歷史記錄寫入~/.bash_history中
    !number: 執行第幾條命令的意思.
    !command: 由最近的命令向前搜索"命令串開頭爲command"的命令,並執行.
64.    如果想讓用戶登錄後獲取一些消息,可以將消息加入/etc/motd中 例:
    vi /etc/motd
    hello
    用戶登錄後會顯示"hello"消息
65.    /etc/profile :這個文件設置了幾個重要的變量,例如"PATH,USER,MAIL,HOSTNAME,HISTSIZE,umask"
    /etc/inputrc :這個文件設置了鍵盤熱鍵設置的數據內容.
    /etc/bashrc :這個文件確定umask的功能,同時也確定了提示符的內容(就是那個PS1)
    ~/.bash_profile,~/.bash_login,~/.profile 這3個文件通常只要一個即可
    ~/.bashrc : 一般將自己的需要輸入到這個文件,個性化設置等,命令別名,路徑,每次執行shell腳本時都會重新讀取這個文件,而~/.bash_profile則只有在登錄時纔讀取一次
    ~/.bash_logout這個文件記錄"當我註銷bash後,系統再幫我做完什麼操作後才離開"

66.    source file:讓設置文件立即生效.也可以以小數點.代替source
67.    stty [-a]:(setting tty終端的意思) stty也可以幫組設置終端的輸入按鍵代表的意義
    例: stty erase ^h :從此之後,刪除字符就得要使用[Ctrl]+H鍵 執行stty erase ^?就可恢復[backspace] 
68.    通配符的使用:
    cp *[A-Z]* /tmp :只要文件名裏含有至少一個大寫字母就可以將文件複製出來.
    [],僅表示一個字符,而這個字符的定義可以是範圍
    ls -lda /etc/*[0-9]* :找出/etc下所有含有數字的文件
    ls -lda /etc/*[35]* : 只想找出含有3及5的文件名的文件
    ls -lda /etc/[!a-z]* :不想要有小寫字母開頭的文件
    ` `(非' '),的功能也可以利用$()來替換:
        例:cd /lib/modules/$(uname -r)/kernel 在$()裏的命令會先執行
69.    [數據流重導向]
    "1>","1>>" ("1"可省)標準輸出,stdin 前者是重建輸出,後者是在原文件添加輸出,都有創建文件功能.
    "2>","2>>" 錯誤輸出,stderr.
    例:
    find / -neme sbin 1>./Desktop/right.txt 2> ./Desktop/wrong.txt
    PS: /dev/null 它的功能有點像"黑洞"的垃圾桶功能,當輸入的任何東西導向到這個虛擬的垃圾桶設備時,"它就會憑空消失不見了".
    輸入同一文件的正確寫法: find /home -name testing >list 2>&1
        "<":解釋是"將原本需要由鍵盤輸入的數據通過文件來讀入"
    如: cat > catfile :通過鍵盤輸入數據保存在catfile上,按下C+D結束輸入.
    可以:    cat > catfile < somefile :將文件somefile內容輸入到catfile
    "<<":表示"結束輸入字符" 如: cat > catfile << eof : 當鍵盤輸入eof時結束輸入,不需要按下C+D.很方便.PS:eof不會寫入文件中
70.    [管道命令]: 每個管道的前後都是"命令",後一個命令的輸入是前一個命令的輸出.
    "|"  : ls -al /etc | less :
    cut:    [-d] 後面接分隔符,與-f一起使用
        [-f]根據-d的分隔符將一段消息分爲數段,用-f取出第幾段的意思. 
        [-c] 以字符爲單位取出固定的字符範圍.  
    例:    echo $PATH | cut -d ':' -f 5
        echo $PATH | cut -c  4- 將第4個字符後的全部輸出 還可以 4-5 -4...
        last | cut -d ' ' -f 1: 用last將這個月登錄的信息中,僅留下用戶名稱.
    grep:
        grep [-acinv] '搜索字符串' filename
        -a: 將二進制文件以文本文件的方式搜索數據
        -c: 計算找到'搜索字符串' 的次數
        -i: 忽略大小寫的不同,所以大小寫視爲相同.
        -n: 順便輸出行號.
        -v: 反向選擇,即顯示出沒有'搜索字符串'內容的那一行
        例: last | grep 'root' : 將last中出現root的一行取出來.
    sort: [重要]
        sort [-fbMnrtuk] [file or stdin]
        -f: 忽略大小寫的差異.
        -b: 忽略最前面的空格符部分.
        -M: 以月份的名字來排序,
        -n: 使用"純數字"進行排序(默認是以文字類型來排序的).
        -r: 反向排序.
        -u: 就是uniq,相同的數據中,僅出現一行表示.
        -t: 分隔符,默認是tab鍵.
        -k: 按那個字段(field)來進行排序.
        例: cat /etc/passwd | sort -t ':' -k 3   :以':'來分隔,以第三欄來排序.
    uniq:
        -i: 忽略大小寫
        -c: 進行計數
        例:     last | cut -d ' ' -f 1 | sort | uniq -c 使用last顯示賬號,僅取出賬號欄,進行排序後令取出一位.
    wc:
        wc [-lwm]  可以知道文件有多少字,多少行,多少字符
        -l: 僅顯示多少行.
        -w: 僅顯示多少字(英文單詞)
        -m: 多少字符.
        cat /etc/man.config | wc  輸出的三個數字分別表示"行數,字數,字符數"
    [雙向重導向]: tee [-a] file   :當想將一段數據流保存進文件裏又想馬上顯示在stdout上.
        -a: 以累加(append)的方式將數據加入file中.
        例: last | tee last.list | cut -d " " -f1 :將last的輸出存一份到last.list文件中.
    tr:
        tr [-ds] SET1 ...
        -d: 刪除消息中的SET1字符串.
        -s: 替換重複的字符.
        例: last | tr '[a-z]' 'A-z' :將last輸出的消息中,所有小寫變成大寫字母
            cat /home/test/dostxt | tr -d '\r' > dostxt-noM: 將DOS文件的換行符^M符號刪除.
    col:
        -x: 將tab鍵轉換成對等的空格鍵.
        例: cat -A /etc/man.config  此時會看到很多^I的符號,那就是tab.
            cat /etc/man.config | col -x | cat -A | more 如此一來,[tab]就會被替換成爲空格鍵,輸出美觀多了.

    join, paste,expand 未看.


    [拆分命令][重要]
    split [-bl] file PREFIX : 可以將一個大文件,根據文件大小或行數來拆分,將大文件拆分爲小文件,快速又有效.
        -b: 後接要拆分的文件大小,可加單位,如b,k,m等.
        -l: 按行數進行拆分.
        例: cd /tmp; split -b 300k /etc/termcap termcap(文件前綴名,將會生成XXXa,XXXb...).
        要將上面生成的3個小文件合成一個文件,文件名爲termcapback.可以:
        cat termcap* >> termcapback
    例: ls -al / | split -l 10 - lsroot  :使用ls輸出的作息中,每10行記錄成一個文件.重點在"-", 一般來說如果需要stdout/stdin時,
                        但偏偏又沒有文件,有的只是-,那麼-就會被當成stdin或stdout.
71.    grep [-acinv] '搜索字符串' filename
    -a: 在二進制文件中,以文本文件的方式搜索數據
    -c: 計算找到'搜索字符串' 的次數
    -i: 忽略大小寫的不同,所以大小寫視爲相同
    -n: 輸出行號
    -v: 反向選擇,即顯示出沒有'搜索字符串'內容的那一行
    例:  grep 'root' /var/log/secure
         last | grep root :用last顯示最近登錄信息,只顯示行裏有root的那些行
72.     臨時修改語系: LANG=en; export LANG
73.    [正則表達式]:
    [1].    利用"[]"來搜過集合字符."[]"中不論有幾個字符,都只代表"一個"字符.當要搜索test 或taste這兩個單詞時: [grep -n 't[ae]st' regular_express.txt]
    [2]    如果想搜索到有"oo"字符,則:[grep -n 'oo' regular_express.txt].
    [3]    如果不想前面有"g"的話,可以利用集合字符的反向選擇"[^]"來實現: [grep -n '[^g]oo' regular_express.txt].    
    [4]    如果不想前面有小寫字母可以 :[grep -n '[^a-z]oo' regular_express.txt].
    [5]    [a-z],[A-Z],[0-9],[a-zA-Z0-9].
    [6]行首與行尾字符^$.
        ^:查詢一行字符串裏有the,如果只想讓the在行首列出:[grep -n '^the' regular_express.txt]
        ("^"在[]內和在[]外是不同的,在內表示反選,在外表示字位在行首)
        $:如果想查出行尾結束爲小數點(.)的一行,處理方法爲:[grep -n '\.$' regular_express.txt],注意小數點有特別含義,所以必須使用轉義符.
        找出哪一行是空白行: [grep -n '^$' regular_express.txt].
        [GOOD]: 假設已經知道在一個shell腳本或設置文件中,空白行與開頭爲#的那一行是註釋,如果將數據提供給別人參考時,可以將這些數據略掉,
            以節省紙張: [grep -v '^$' ~kenfly/.vimrc | grep -v '^#'] (-v表示反向選擇輸出)
    [7]任意一個字符(.)與重複字符(*):  (要與通配符區別開來)
        (.):表示"絕對有一個任意字符"
            假設要找出g??d字符串: [grep -n 'g..d' regular_express.txt]
        (*)表示"重複0個或多個前面的RE字符"
            如果:[grep -n 'o*' file]將會把所有數據顯示出來
            如果要顯示到少兩個o以上的字符串時: [grep -n 'ooo*' file].
            如果要找出"任意數字"的行: [grep -n '[0-9][0-9]*' file].
        ".*" 表示"零個或多個任意字符"
            如要顯示兩邊爲g的字符即 "g......g" : [grep -n 'g.*g' file]
    [8]限定連續重複字符範圍{}

74.    sudo apt-get remove --purge XX: 連配置文件一起清除
75.    終止一個進程可以使用[ services 服務名 stop ] 或[ kill 進程標識符 ]\
    查看進程可以用ps,pstree,top等.

發佈了22 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章