qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          我的經(jīng)常使用linux小命令

            這里并非系統(tǒng)具體介紹每個Linux命令,不過記錄本人在平時工作中經(jīng)經(jīng)常使用到的一些比較基礎(chǔ)的命令及相關(guān)的參數(shù),同一時候用了一些簡單的樣例來說明這些命令的用途,以及怎樣用多種命令來實現(xiàn)同一種功能。
            1、ls命令
            要顯示當(dāng)前文件夾下的文件列表時,我常常就使用ls命令的下面三個參數(shù)。
            -l 使用長列表格式
            -h 文件大小以人可讀的方式打印
            -t 以最后改動時間排序,最新的放在最前
            使用樣例,怎樣顯示當(dāng)前文件夾下的文件夾?
            方法1: ls -l | grep '^d'
            方法2: ls -l | awk '/^d/'
            2、grep命令
            當(dāng)須要找出匹配指定模式的文件時,常常會用到grep命令的下面幾個參數(shù)。
            -w 全然匹配整個單詞,而不是字符串的一部分,若要匹配abc,則不會匹配abcd
            -i 忽略大寫和小寫
            -n 顯示指定模式在匹配文件里的行號
            -v 反向匹配,即匹配不符合的行
            -f 從文件里獲取待匹配的模式
            使用樣例:
            grep ^$ file 匹配文件file中的全部空行
            grep -v '^$' file 匹配文件file中的全部非空行
            grep '[^^$]' file 匹配文件file中的全部非空行
            grep -vf t2 t1 獲取t1中跟t2數(shù)據(jù)不匹配的數(shù)據(jù),即獲取在t1,但不在t2的數(shù)據(jù)
            正則表達式[^$]表示匹配空行,前面加上^即表示不匹配空行
            3、排序去重命令 sort vs uniq
            sort 命令用來對數(shù)據(jù)進行排序。
            -t 用于指定域的分隔符
            -n 以數(shù)字方式進行比較,而不是字符比較
            -r 反向排序
            -u 去除反復(fù)的行
            -k 以指定的域開始進行排序,域從1開始
            +表示以第幾域排序,-表示不以第幾域排序,如 sort +0 -2 +3則表示以第0域開始排序,略過第2域,然后再使用第3域排序
            uniq 用于刪除文本文件里的連續(xù)反復(fù)的行,一般使用sort之后再調(diào)用uniq。
            -d 僅顯示反復(fù)一次的行
            -c 打印每一反復(fù)行出現(xiàn)的次數(shù)
            sort -u 和uniq的差別在于,uniq僅去除連續(xù)反復(fù)的行,而sort -u會去除整個文本中全部反復(fù)的行,比如,
            #源文件file1中的內(nèi)容
            hello world
            Good morning
            Good morning
            hello world
            #使用sort -u < file1的結(jié)果例如以下:
            hello world
            Good morning
            使用uniq < file1的結(jié)果例如以下:
            hello world
            Good morning
            hello world
            4、tr命令
            當(dāng)須要進行一些簡單的字符串替換和刪除時,tr命令就會顯得很實用。
            比如,以下的tr操作都是沒有直接改動源文件,改動則須要文件重定向
            tr 'A-Z' 'a-z' < file 將字符串的大寫字母都轉(zhuǎn)為小寫字母:
            tr -s ' ' ' ' < file 把多個連續(xù)空格替換成單個空格,-s選項可將多個連續(xù)字符替換為一個指定字符
            tr -s '\n' < file 刪除空行
            tr -d '[0-9]' < file 刪除全部數(shù)字,-d選項能夠刪除指定的字符
           5、tail命令
            tail命令用于顯示文件末尾指定區(qū)域的內(nèi)容,如tail -10 file, 表示顯示文件file最后10行內(nèi)容,tail命令有非常多參數(shù),當(dāng)中有一個常常使用并且非常好用的參數(shù) "-f":
            tail -f 動態(tài)顯示文件新增的內(nèi)容
            該參數(shù)作用是不返回文件結(jié)束符,并動態(tài)顯示文件新增的內(nèi)容,須要結(jié)束時,須要用戶手動進行中斷。這個命令在顯示日志的時候作用就很明顯,對于一個執(zhí)行中的server,可能會不斷將server當(dāng)前執(zhí)行狀態(tài)和錯誤狀態(tài)寫入日志文件,使用tail -f,將會以一定的時間實時追蹤該文件的全部更新。
            6、find命令
            在查找文件文件的時候,首先會想到是使用find命令。
            -name 依照文件名稱查找文件
            比如,查找當(dāng)前文件夾下名字以cpp結(jié)尾的文件
            find . -name "*cpp" | xargs grep "abc"
            有些系統(tǒng)對參數(shù)的長度有限制,xargs命令的作用是將參數(shù)列表轉(zhuǎn)換成小塊分段傳遞給其它命令,以避免參數(shù)列表過長的問題。上面的find中,當(dāng)前文件夾下可能包括非常多名字以cpp結(jié)尾的文件,因此為了避免“參數(shù)列太長”或“參數(shù)列溢出“的錯誤,使用xargs來接收find命令的輸出。
            7、alias命令
            alias命令用于設(shè)置命令的別名。利用alias能夠把非常長的命令變成隨意簡短的命令。
            若要加入自己的alias,格式例如以下
            alias ll="ls -lht"
            上述加入alias的操作,在用戶退出后就變?yōu)闊o效了,若要永久生效,能夠改動配置文件~/.bashrc文件(僅改動用戶自己),在文件最后面加上你自定義的alias,如:
            alias la="ls -al --color=auto"
            本次改動,要在下次登錄的時候才干生效。若要立即生效,能夠輸入:
            source ~/.bashrc
            8、進程相關(guān)命令
            ps命令用于查看當(dāng)前執(zhí)行的進程。
            ps -ef 顯示系統(tǒng)執(zhí)行的進程
            top 用于查看當(dāng)前進程執(zhí)行情況,包含內(nèi)存使用、cpu使用量、交換區(qū)使用量等。
            shift + m 能夠按內(nèi)存占用量來排序進程,查找進程內(nèi)存使用量就最實用了
            q 退出
            9、經(jīng)常使用快捷鍵
            Ctrl + z 將當(dāng)前程序放到后臺并掛起
            Ctrl + d 輸入文件結(jié)束符,在命令行中直接輸入Ctrl + D,即退出shell
            Ctrl + a 跳到命令行的頭部位置
            Ctrl + e 跳到命令行的尾部位置
            Ctrl + w 刪除一個單字(word)
            Ctrl + u 刪除光標(biāo)到行首的字符
            Ctrl + k 刪除光標(biāo)到行末的字符
            Ctrl + c 中斷當(dāng)前程序
            10、任務(wù)命令
            命令運行順序
            && 第一個命令成功才運行第二個命令
            || 第一個命令失敗才運行第二個命令
            jobs 查看掛起的當(dāng)前的任務(wù)列表
            fg + N  將第N個任務(wù)放到前端,喚醒Ctrl + z掛起的任務(wù)
            11、vim命令
            !%xxd 以十六進制的方式查看文件內(nèi)容
            ! 后面加上shell命令就而已運行對應(yīng)的shell命令
            * 將光標(biāo)移至下一個匹配的單詞
            # 將光標(biāo)移至上一個匹配的單詞
            [[ 光標(biāo)跳到函數(shù)的開頭
            ]] 光標(biāo)調(diào)到函數(shù)的結(jié)尾說
            [{ 光標(biāo)跳到上一個作用域的開頭
            ]} 光標(biāo)跳到下一個作用域的開頭
            ggvG或者ggVG 全選并高亮
            gg=G 對整個文件內(nèi)容進行格式化縮進
            u 撤銷上一個動作
            Ctrl + r 取消上一個撤銷動作
            set scb 同步兩個屏幕的文件,當(dāng)中一個文件移動,則令一個文件跟著移動,對照兩個文件時經(jīng)常常使用到,解開分屏set scb!
            兩個非常好用的插件ctag和Tlist:
            ctags
            功能是掃描指定的源文件,找出當(dāng)中所包括的語法元素,并將找到的相關(guān)內(nèi)容記錄下來。記錄的內(nèi)容包括:宏定義、枚舉型、變量的值、函數(shù)的定義、原型和聲明、namespace、typedefs變量 、類、結(jié)構(gòu)、枚舉類型和聯(lián)合 類、結(jié)構(gòu)和聯(lián)合中成員變量或函數(shù)等。通過ctags我們能夠非常easy的找到某個變量或者函數(shù)等在哪個文件定義。
            Tlist
            在當(dāng)前vim中,新開一個區(qū)域,顯示了當(dāng)前文件的函數(shù)、類、全局變量等定義,輸入回車就可以跳轉(zhuǎn)到對應(yīng)內(nèi)容的起始位置。平時在查找某個函數(shù)時,就能夠用到了。
            12、shell中凝視一塊代碼
            行凝視
            shell中默認提供的凝視方法是#,作用是凝視一行,比如
            #這里是一行凝視
            if [ "1" = "2" ]; then
            DoSomething
            fi
            塊凝視
            shell中并沒有提供塊凝視的方法,可是我們能夠使用還有一種方法來實現(xiàn)塊凝視,這樣的叫做here document。here document表示包括的這段內(nèi)容是一個總體數(shù)據(jù)。以下代碼中,兩個document之間的內(nèi)容是一個總體數(shù)據(jù)。
            <<document
            ....
            document
            here document,<<符號表示這是一個文本內(nèi)容,由其后的字符串包括的范圍就是文本的正文,:符號表示空命令,什么都不干,以下的意思就是將一個文本傳給空命令,即對文本不做不論什么處理,間接就等于凝視了
            :<<block
            code
            block
            避免反引號不能被凝視的做法是加上單引號
            :<<block'
            code
            'block
            一些小問題
            問題1: 怎樣刪除文件里的全部空行?
            1、sed '/^$/d' file 對匹配的空行運行刪除操作
            2、awk '/./ {print $0;}' file 匹配除空白換行字符外的全部字符,即匹配非空行
            3、awk '/[^^$]/{ print $0; } file
            問題2: 怎樣刪除文件名稱帶空格的文件,如"a b.html"s?
            1、對空格進行轉(zhuǎn)義,即空格前加上反斜杠,能夠用反斜杠\來屏蔽特殊字符
            2、使用雙引號括住文件名稱
            3、使用單引號括住文件名稱
            問題3:
            一個傻x錯誤,在運行一段代碼后,然后推斷$?是否為0,以決定前面的功能代碼是否運行成功,可是發(fā)現(xiàn)什么情況下都是返回成功,查了好久,原來是在推斷$?之前,使用了echo輸出 $?,所以永遠都是為真了

          posted on 2014-07-15 10:32 順其自然EVO 閱讀(286) 評論(0)  編輯  收藏 所屬分類: linux

          <2014年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 汕头市| 郓城县| 淮安市| 沽源县| 阿勒泰市| 南充市| 额尔古纳市| 新野县| 杭锦后旗| 全椒县| 宁乡县| 固原市| 正蓝旗| 丽水市| 仙居县| 衡东县| 天长市| 巴彦淖尔市| 武冈市| 治县。| 团风县| 唐河县| 宿松县| 大宁县| 新营市| 延津县| 淮安市| 三江| 隆安县| 东宁县| 定安县| 福清市| 乐山市| 体育| 兴安县| 陇西县| 武强县| 六安市| 高安市| 神农架林区| 杂多县|