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