Linux总结
快捷鍵:
- ctrl +shift +'+' : 放大字體
- ctrl + '-' 縮小字體
文件操作
- 查詢文件 ls
ls a* :列出當前目錄下以字母a開頭的文件
ls -l *.doc :列出當前目錄下以.doc 結尾的所有文件
pwd :查看當前所在的文件夾
- 切換路徑 cd
cd - 當前目錄和上一個目錄來回切換
cd / 回到根目錄
cd ~ 返回家目錄 - 查看文本內容:
查看文本內容
cat 只能查詢當前文件的最后一屏幕, more:展示第一頁,space下一頁,enter 下一行,按q鍵退出 less:展示第一頁,pagedown下一頁,pageup 上一頁,按q鍵退出 tail/head 查看多少行 -f 參數用于查看最新日志- 復制文件/文件夾: cp
cp -r -v :-r 拷貝文件夾,-v:顯示進度
-
移動/重命名:mv
同一路徑下,相當于重命名
-
創建
- 查詢文件
find 之后進一步操作
-print: find命令匹配的文件輸出到標準輸出
-exec 對匹配的文件執行該參數所給出的shell命令,命令格式’command’ {} ; {} 和\;之間存在空格以;結束并加\,{}內為匹配到的文件名,
grep
grep :在指定文件中查找指定內容 用法: grep 查找信息 文件名/文件路徑 -n 顯示行號
grep 進行多條件查詢
# grep 的AND,多條件的與查詢 grep 'pattern1' filename | grep 'pattern2' # OR操作 grep 'pattern1\|pattern' filename #用法2 grep -E 'pattern1|pattern2' filename # NOT grep -v 'pattern' filename重要指令
命令 > 目的文件:本來輸出到屏幕上的數據,重定向輸出到目的文件中
壓縮/解壓
tar zxvf : 可以解壓到當前目錄或指定路徑
:e % : h %:代表的是當前打開的文件相對與緩沖工作路徑的路徑+文件名
一個程序的輸出作為另一個程序的輸入
將會在終端中顯示的參數指定的文件,通常和重定向一起使用。
用于設置所使用shell的執行方式,可依照不同的需求來做設置,set -x :執行指令后,會先顯示該指令及所下的參數。
ln 軟連接: 為某一個文件在另外一個位置建立一個同步的鏈接
ll | grep basic_book_info.json 當前路徑下所有的文件/目錄信息,輸出作為內容作為grep的輸入,查詢 basic_book_info.json 的信息ln -s data/sys/basic_book_info.json /data/SanJunipero/rd/zhuhongtao/book訪問變量值:只需在變量名前加一個$
a=“hello world”
#打印變量的a的值
echo -e “A is : $a\n”
Shell中的 test 命令用于檢查某個條件是否成立,它可以進行數值、字符和文件三個方面的測試。
-eq 等于則為真
-ne 不等于則為真
-gt 大于則為真
-ge 大于等于則為真
-lt 小于則為真
-le 小于等于則為真
xargs 是給命令傳遞參數的一個過濾器,也是組合多個命令的一個工具。
xargs : 可以將管道或標準化輸入stdin數據轉化成命令行參數,也能夠從文件的輸出中讀取數據xargs: 也可以將單行或多行文本輸入轉換為其他格式,例如多行變單行,單行變多行find /sbin -perm+700 | ls -lfind /sbin -perm=700 | xargs ls -lfind . -name '*.py' | grep test 是將前面命令的標準輸出作為標準輸入傳給grep test,那么grep 是從這些標準輸入尋找test字符,最終選擇出文件名find . -name "*.py" | xargs grep test find 得到的文件名成為參數傳給grep,grep按照正常的使用方式各文件中搜索字符串。shell 指令
表示注釋指令
;連續指令
$ 變量替換
$? 回傳值:0成功 1失敗 : 用于檢查子進程的執行狀態
$1就是代表你輸入bai的第一個參數
$1 :表示為位置參數,表示傳入的第一個參數
$#: 添加到Shell的參數個數
test.sh -f test 輸入命令tesh.sh 填入的參數是 -f 和 test兩個 ${1} 表示第一個參數
shell語句if [ ! -e "filename" ] -e表示只要filename存在,bai則為真,不管dufilename是什么類型, -e filename 如果bai filename存在,則為真 -d filename 如果 filename為目錄,則為真 -f filename 如果 filename為常規文件,則為真 -L filename 如果 filename為符號鏈接,則為真 -r filename 如果 filename可讀,則為真 -w filename 如果 filename可寫,則為真 -x filename 如果 filename可執行,則為真 -s filename 如果文件長度不為0,則為真 -h filename 如果文件是軟鏈接,則為真 將history命令執行的結果保存到history.log文件中 [root@gxzs-solr1 ~]# history > history.log (history.log 文件 會自動生成) [root@gxzs-solr1 ~]# cat history.log 標準輸入(stdin) 0 < 或 << System.in /dev/stdin -> /proc/self/fd/0 -> /dev/pts/0 標準輸出(stdout) 1 >, >>, 1> 或 1>> System.out /dev/stdout -> /proc/self/fd/1 -> /dev/pts/0 標準錯誤輸出(stderr) 2 2> 或 2>> System.err /dev/stderr -> /proc/self/fd/2 -> /dev/pts/0` 指令:
執行結果能賦值給一個變量。它也被稱為后引號(backquotes)或是斜引號(backticks).
例子:
A=ls -l
把ls -l的結果賦給A ls -l 作為命令來執行。
awk:一種處理文本文件的語言,一種文本分析工具
逐行掃描文件,從第一行到最后一行,尋找匹配特定模式的行,并在這些行上進行操作 -F 指定分隔符
$0=NR表示給文件賦值行號
"\t" 標識行號和其他文件用\t分隔
結尾$0代表文件的其他內容
使用正則,字符串匹配
#輸出第二列包含"th",并打印第二列與第四列awk '$2 ~ /th/ {print $2 ,$4}' log.txt ~ 表示模式開始 , //中是模式忽略大小寫awk 'BEGIN{IGNORECASE=1} /this/' log.txt 模式取反 !awk '$2 !~ /th/ {print $2,$4}' log.txtawk 條件及循環語句
df :命令用于統計目前在linux系統上文件系統磁盤使用統計情況
sort
awk -F "|" "{print $6 $1 $4}" access.log | awk -F "time=" "{print $2}" | sort -k1nr | head -3uniq
如果需要統計哪些接口每天的請求量最多,只需要引入uniq命令 我們可以通過grep -v HEAD access.log | awk -F "|" "{print $4}" 來篩選所有的url ,uniq 命令可以刪除相鄰的相同的行,而-c 可以輸出每行出現的而次數所以我們先把 url 排序以讓相同的 url 放在一起,然后使用 uniq -c 來統計出現的次數: grep - v HEAD access.log | awk -F "|" '{print $ 4}' |sort |uniq -c接下來再 sort 即可:grep -v HEAD access.log | awk -F "|" "{print $4}" | sort |uniq -c |sort -k1nr | head -3應用實例
INPUT1=`${BIN_HADOOP} fs -ls ${USER_BEHAVIOR_PATH} | grep -E "/[0-9]{8}$" | tail -1 | awk -F ' ' '{print $NF}'` ++ /usr/bin/hadoop fs -ls /user/pub/LogServer ++ grep -E '/[0-9]{8}$' ++ awk -F ' ' '{print $NF}' ++ tail -1 + INPUT1=/user/pub/LogServer/20200816將執行情況保存日志
sh book_embedding.sh > log/book_embedding.log.2020090111 2>&1 &測試集文件生成
hadoop中mapper or reducer函數的測試:head -10 user_seq_graph.txt > input.txt python3 bin/sim_test.py < test/input.txt python3 bin/sim_test.py < test/input.txt > test/output.txt vi test/output.txt文件合并
cat file1.txt file2.txt > file.txt cat file1.txt >> file2.txt左右合并 paste統計某個目錄下的文件或目錄個數: find -type f/d | wc-l
正則表達式:
^ 只匹配行首$ 只匹配行尾 "^$"匹配空行 "^.$"匹配包含一個字符的行. 匹配任意單字符* 匹配0個或多個單字符日常工作:
-m :即使目前已在作業中的screen作業,仍強制建立新的screen作業
-r : 恢復離線的screen作業
-R:先試圖恢復離線的作業。若找不到離線的作業,即建立新的screen作業。
nohup java -jar app.jar >log 2>&1 & 最后一個&表示把條命令放到后臺執行 tail -f nohup.out監視日志
sp水平分屏 (當前文件的上下分屏),ctrl+ww 屏切換,退出全部分屏 qall ,vsp:垂直分屏
可以指定分割方式 -d 為自定義分割方式 cut -d " " -f 2 test.txt
快捷鍵
history :用戶歷史敲下的命令
ctrl +a 光標移動到行首
ctrl +e 光標移動到行尾
字符的刪除:
ctrl +h 刪除前面的字符
ctrl+b刪除光標覆蓋的字符
ctrl+u 刪除光標前面的字符
more/less enter 一行行繼續 space 一頁頁的顯示,按q鍵結束
創建硬鏈接: ln 不加參數 -s,只能對文件創建硬鏈接,無法對目錄創建硬鏈接
ln train.txt train.hard 硬鏈接不占磁盤空間
軟連接:是一個就快捷方式,文件、目錄均可以
光標的移動h j下 k 上 l
移動到行首 0
移動到行尾 $
移動到當前文件的頭部 gg
尾部G
移動到500 行 500+G
刪除
刪除字符 x
刪除前面字符X
刪除單詞 dw (注意:刪除的是光標后面的單詞)
刪除光標前面的內容 d0 后面的內容d$ (或D)
刪除當前行dd 刪除多行 ndd
撤銷 u 反撤銷ctrl +r
復制粘貼
刪除其實是剪切 然后 粘貼 p在下一行粘貼 P在當前行粘貼
復制: yy一行 nyy復制多行
替換單個當前字符 r
縮進向右>>
向左縮進<<
查看函數 ,跳轉 shift +k
編輯模式
a 在光標之后插入內容 A 在行尾部插入內容 i 在 前面 I 行首 o創建新的一行(下一行) O 上一行 s 刪除光標后面一個字符,編程插入模式 S 刪除一行變為插入操作替換
替換光標所在行, :/s替換把內容/新內容 :/s替換把內容/新內容/g 替換本行所有替換文本中所有行第一個匹配內容 :%s/舊內容/新內容替換所有 :%s/舊內容/新內容/g 替換幾行中的 :m,n/s/old_str/new_str/g工作 :check 產出結果,產出文件數量不足的,重新跑任務
for i in `hadoop fs -ls rd/tts/nlp/output| awk '$6>="2020-10-17" {print $8}'` | awk -F "/" 'print$5' do cnt=`hadoop fs -ls rd/tts/nlp/output/$i | wc -l`if [ $cnt -lt 18 ]then echo "重跑${$i}"hadoop fs -rm -r rd/tts/nlp/output/$ish ctl.sh "all"fi done從集群上下載list 中的所有資源
#方法一 mkdir books cat tmp.txt | \ while read line_bid dobid=${line_bid}hadoop fs -get rd/tts/txt/${bid}/${bid}.txt done#方法二:for 循環 curDIr=path bookDir="" for i in `cat ${curDir}/bookid_list.txt | awk '{print$1}'` dohadoop fs -get rd/tts/txt/${bookid}/${booklid}.txt ${bookDir} done運行不同的腳本生成系列文件,并將文件傳輸到集群中
curDir="data/rd/zhuhongtao/infer3" PYTHON_ENV="/data/rd/zhujun/python3.7.4/bin/python"mkdir -p ${curDir}/data function put2hadoop(){bookid="${1}"localDir="${cirDir}/data/${bookid}"hadoopDir="rd/tts/nlp/output/${bookid}"hadoop fs -mkdir ${hadoopDir}hadoop fs -rm ${hadoopDir}/*hadoop fs -put ${localDIr}/* ${hadoopDir}hadoop -rf ${localDir} }function parseInput(){if [ $1 == "bookid:*" ]then echo "${1}" | awk -F ":" '{print $NF}'elif [ $1 =="all" ]then ls ${curDir}/../books/fi }function nlpDataFlow(){parseInput $1 |\while read line_biddo bookid=`echo "${line_bid}" | awk -F "." '{print $1}' `ret=`echo "${bookid}" | awk 'if ($1~/^[0-9]+$/) {print "1"} else {print "0"}'`if [$ret ==1]thenecho "handle: ${bookid}"elseecho "warning ${bookid}"continuefirm -rf ${curDir}/data/${bookid}mkdir -p ${cuirDir}/data/${bookid}echo "\t [get parser]"${PYTHON_ENV} get_parser.py -b "${bookid}"echo "\t [get snrs]"${PYTHON_ENV} get_snrs.py -b "${bookid}"echo "\t [get genders]"python get_sex.py -b "${bookid}"echo "\t [get speakers]"python speakers.py -b "${bookid}" echo "\t put results to hadoop"put2haoop ${bookid} > ./hadoop.op.log 2>&1 done }if [ $# -lt 1} then echo -e "Usage:$0 <all| bookid:>"exit -1 elsenlpDataFlow ${1} fishell 編程中 0 代表True ,其他值代表false
比較兩個文件是否有差異:
cmp prog.o.bak prog.o 文件相同,則不顯示信息,文件不同,則顯示第一個不同的位置
diff 以逐行的方式,比較文本文件的異同處。
設想我們有一個程序,需要在不同的參數下執行很多次,我們希望能夠批量進行提交。我們希望這些任務是按照隊列排隊提交的,每次只執行3個。
#允許同時跑的任務數為THREAD_NUM THREAD_NUM=3 #todo: revise me args=""" 北京 20200101 上海 20200202 深圳 20200303 廣州 20200404 南京 20201001 天津 20200901 武漢 20201101 南昌 20200809 成都 20200901 """ #todo: revise me #指定分隔符 IFS='' array=(${args}) #定義描述符為9的FIFO管道 mkfifo tmp exec 9<>tmp # <> 讀寫方式, linux每一個打開文件都會關聯一個文件描述符,需要的時候我們可以使用exec命令指定一個大于3的數字作為文件 rm -f tmp ''' # echo "hello" > &4 向文件描述符中輸入內容只是用> 和>> exec 4 > /tmp/abc echo "123" >&4 echo "456" >&4 則每次執行完腳本后/tmp/abc文件內容都是123\n456 ''' #預先寫入指定數量的空格符,一個空格符代表一個進程 for ((i=0;i<$THREAD_NUM;i++)) doecho >&9 done for arg in ${array[@]} do #控制進程數:讀出一個空格字符,如果管道為空,此處將阻塞read -u9 # read 重定向時讀取一行數據{#打印參數#echo ${arg}#此行代碼指定任務提交方法python task.py ${arg} #todo : revise me!#每執行完一個程序,睡眠3ssleep 3#控制進程數:一個任務完成后,寫入一個空格字符到管道,新的任務將可以執行echo >&9}& done wait echo "全部任務執行結束"GPU的設置和占有量控制
1.在終端執行程序時指定GPU
CUDA_VISIBLE_DEVICES=0 python your_file.py # 指定GPU集群中第一塊GPU使用,其他的屏蔽掉2.在Python代碼中指定GPU
import os os.environ["CUDA_VISIBLE_DEVICES"] ="0" # 指定第一個GPU3.設置定量的GPU使用量
config = tf.ConfigProto() config.gpu_options.per_process_gpu_memory_fraction = 0.9 # 占用GPU90%的顯存 session = tf.Session(config=config)4.設置最小的GPU使用量
config = tf.ConfigProto() config.gpu_options.allow_growth = True session = tf.Session(config=config)python -u xxx.py -u: 會強制其標準輸出也同標準錯誤一樣不通過緩存直接打印到屏幕
linux命令大全
總結
- 上一篇: nload实时查看linux服务器网络流
- 下一篇: PHP图形图像的典型应用 --常用图像的