日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux总结

發布時間:2023/12/10 linux 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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:顯示進度
cp afile afile.bak 把文件復制為新文件afile.bakcp afile /home/bible/ 把文件從當前目錄復制到/home/bible/目錄下cp * /tmp 把當前目錄下的所有未隱藏文件復制到/tmp目錄下拷貝目錄需要加參數:-r
  • 移動/重命名:mv

    同一路徑下,相當于重命名

  • 創建

mkdir -p: 創建文件夾,-p:遞歸創建 touch : 創建文件
  • 查詢文件
find . 列出當前目錄及子目錄下的所有文件find . -name "11.png" :找到當前目錄下名字為jpg的文件find . -name "*.png"find . -name "*.png" -o - name '*.jpg'fid . ! -name "*.png" 找出當前目錄不是以png 結尾的文件正則匹配 : find . -regex "\./*[0-9]+\.png " # * 表示匹配0次或多次任意字符 \ 轉義字符根據路徑查找: find . -path "*mapath*"find /var -mtime -5 查找在/car 下找更改時間在5天以內的文件find /var -mtime +3 更改時間在3天以前的文件find . -type f -size -200M 查找小于200M的文件 find . -type f - size +200Mtpye : 查用參數:d 目錄 p 管道文件 l 符號鏈接文件 f 普通文件參數 -atime :access time 顯示一個文件的內容或者運行一個腳本更新問價你的時間 -ctime : 文件最后一次狀態改變的時間

find 之后進一步操作

-print: find命令匹配的文件輸出到標準輸出
-exec 對匹配的文件執行該參數所給出的shell命令,命令格式’command’ {} ; {} 和\;之間存在空格以;結束并加\,{}內為匹配到的文件名,

find . -type f -mtime +14 -exec rm {} \; 刪除14日以前的文件

grep
grep :在指定文件中查找指定內容 用法: grep 查找信息 文件名/文件路徑 -n 顯示行號

grep -r(遞歸查找) "查找的內容" + 查找路徑

grep 進行多條件查詢

# grep 的AND,多條件的與查詢 grep 'pattern1' filename | grep 'pattern2' # OR操作 grep 'pattern1\|pattern' filename #用法2 grep -E 'pattern1|pattern2' filename # NOT grep -v 'pattern' filename

重要指令

  • 重定向 >,>>
    命令 > 目的文件:本來輸出到屏幕上的數據,重定向輸出到目的文件中
  • grep "match_pattern" file-1 file_2 file_3 輸出除match_pattern之外的多有行 -v grep -v "match_pattern" file_name 標記匹配顏色 --color =autogrep "match_pattern" filename --color=auto使用正則表達式 -E grep -E "[1-9]+"只輸出文件中匹配到的部分 -o 選項 echo this is a test line. | grep -o -E "[a-z]+\." 統計文件或文本中匹配字符串的行數 -cgrep -c "text" file_name輸出包含匹配字符串的行數 -ngrep "text" -n file_name cat file_name | grep "text" -ngrep 遞歸搜索文件 grep "text" . -r -n 遞歸搜索文件

    壓縮/解壓
    tar zxvf : 可以解壓到當前目錄或指定路徑
    :e % : h %:代表的是當前打開的文件相對與緩沖工作路徑的路徑+文件名

  • 管道 |
    一個程序的輸出作為另一個程序的輸入
  • echo:
    將會在終端中顯示的參數指定的文件,通常和重定向一起使用。
  • set命令:
  • 用于設置所使用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”
  • num=1 echo "this is the ${num}st" a=10 b=20 if [ $a == $b ] thenecho "a 等于 b" elif [ $a -gt $b ] thenecho "a 大于 b" elif [ $a -lt $b ] thenecho "a 小于 b" elseecho "沒有符合的條件" fi 字符串比較= 等于,如:if [ "$a" = "$b" ]== 等于,如:if [ "$a" == "$b" ],與=等價注意:==的功能在[[]]和[]中的行為是不同的,如下:1 [[ $a == z* ]] # 如果$a以"z"開頭(模式匹配)那么將為true2 [[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么結果為true34 [ $a == z* ] # File globbing 和word splitting將會發生5 [ "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么結果為true整數比較-eq 等于,如:if [ "$a" -eq "$b" ]-ne 不等于,如:if [ "$a" -ne "$b" ]-gt 大于,如:if [ "$a" -gt "$b" ]-ge 大于等于,如:if [ "$a" -ge "$b" ]-lt 小于,如:if [ "$a" -lt "$b" ]-le 小于等于,如:if [ "$a" -le "$b" ]大于(需要雙括號),如:(("$a" > "$b"))>= 大于等于(需要雙括號),如:(("$a" >= "$b"))

    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 指定分隔符

    awk 一次從文件中讀取一條記錄,并將記錄儲存在字段變量0中 'pattern {action}'awk '/^$/ {print "Blink line"}' text.txt /^$/ 通過正則表達式匹配空白行,動作為打印Blink lineawk -f awk.sh text 提前編輯一個awk 腳本,通過-f 調用cat awk.sh '/^$/ {print "blink line"}'echo hello the world | awk "{print $1,$2,$3 }"echo hello the world | awk "{print NF}" NF 改行字段的個數echo hello the world | awk "{print $NF}" 取最后一個字段每行按 tab分割,輸出文本的1,4 項awk '{print "%-8s %-10s\n",$1,$4}' log.txt過濾第一列等于2的行awk '$1==2 {print $1 ,$3}' log.txtawk '$1==2 && $2=="Are" {print $1,$2,$3}' log.txt awk '$0=NR"\t"$0' file_name

    $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.txt

    awk 條件及循環語句

  • if 條件判斷格式
  • if(表達式)action 1 elseaction 2或者 if(表達式)action 1; else action 2df | grep 'boot' | awk '{if ($4 <20000) print "Alart" ; else print "ok"}' 判斷boot分區可用容量小于20M時報警,否則顯示OK

    df :命令用于統計目前在linux系統上文件系統磁盤使用統計情況

  • 循環
  • while(條件)動作 x=1 while (i<10){print S i }awk 'i=1 {} BEGIN {while (i<10) {++i ; print i}}' text.txt # BEGIN END 等為執行模式

    sort

    awk -F "|" "{print $6 $1 $4}" access.log | awk -F "time=" "{print $2}" | sort -k1nr | head -3

    uniq

    如果需要統計哪些接口每天的請求量最多,只需要引入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個或多個單字符

    日常工作:

  • 查看python版本: which python
  • 切換python 版本: source ../python.xxx/bin/activate
  • screen :
    -m :即使目前已在作業中的screen作業,仍強制建立新的screen作業
    -r : 恢復離線的screen作業
    -R:先試圖恢復離線的作業。若找不到離線的作業,即建立新的screen作業。
  • 查看cpu的使用情況:free -mh
  • 查看gpu的使用情況:gpuinfo
  • 查看進程:ps -aux | gerp "xxx.sh"
  • 查看目錄下的文件大小:du -sh * | sort -nr |head 或du -sh folder
  • 查看磁盤的使用情況:df -Th
  • env 查看當前進程中的環境變量,top 查看進程,占據的cpu大小
  • scp -r -P
  • nohup 不掛斷執行命令:
    nohup java -jar app.jar >log 2>&1 & 最后一個&表示把條命令放到后臺執行 tail -f nohup.out監視日志
  • 分屏:
    sp水平分屏 (當前文件的上下分屏),ctrl+ww 屏切換,退出全部分屏 qall ,vsp:垂直分屏
  • cut 截取文件某些列
    可以指定分割方式 -d 為自定義分割方式 cut -d " " -f 2 test.txt
  • sed 文本編輯工具
  • #刪除文件中的第i行 sed -i '1d' xx.csv #截取文件的第50到100行 sed -n '50,100p' xxx.txt #將文件中的空格替換成 \t cat xx.txt | sed 's/ /\t/g'
  • cat books/* | grep “內容” 返回內容出自拿一本書
  • cat ../infer2/book.list | awk '{print "hadoop fs -get rd/tts/txt/*/"$1".txt ./"}' > d.sh
  • test 命令用于檢查某個條件是否成立,它可以進行數值、字符和文件三方面的測試
  • if test $[num1] -eq $[num2] if test -e ./file_path # -e 文件存在則為真, -d 如果文件存在且為目錄則為真

    快捷鍵

    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} fi

    shell 編程中 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" # 指定第一個GPU

    3.設置定量的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命令大全

    總結

    以上是生活随笔為你收集整理的Linux总结的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。