1. 程式人生 > >Linux常用技巧備忘錄之老司機版

Linux常用技巧備忘錄之老司機版

作者:fbysss

QQ:溜酒酒吧酒吧吾散

blog:blog.csdn.net/fbysss

宣告:本文由fbysss原創,轉載請註明出處

前言: linux基本命令就不在這裡列出。本文記錄的主要是 1.容易忘記的知識點 2.常用的、需求強烈的技巧 3.疑難雜症 旨在備忘、提高工作效率。希望我的總結對你有所幫助 一、vi技巧: vi的時候,如果內容裡面有註釋,在某些終端裡面,貼進去就是格式錯亂的。 解決:vi中輸入:set paste回車,然後貼上就可以了。 vi大檔案,半天打不開,而且如果是線上的伺服器,幾個G的大檔案可能直接撐爆伺服器,影響服務。 解決:用less替代。v進入編輯模式。 有時候使用普通使用者身份編輯了一個需要root許可權讀寫的檔案
,無法儲存。使用 :w !sudo tee %可儲存——儲存後,然後q!退出。
vi中複製:(n)yy複製n行,p貼上,d$刪除當前游標到行尾y$複製到行尾
特殊字元處理:遇到一個奇怪的問題。在sublime中,或者apple的文字編輯中,製作純文字,也同樣會有問題,後來用vi發現文字中包含了一大堆怪異的字元,顯示為<200b>
查詢200是查不到的。這是一個字元。原來是unicode字元。使用
/\%u200b可以查到。
清除::%s/\%u200b//g
二、壓縮相關: tar zxvf 解壓 gz檔案 tar xvf解壓tar檔案 tar cvf 加壓 tar tvf 不解壓檢視檔案列表 unzip解壓 zip檔案   unzip -l 不解壓檢視檔案列表 解壓單獨的檔案,並覆蓋現有檔案。unzip -j -o  test.zip “WEB-INF/classes/validator.xml”  unzip -j  test.zip "WEB-INF/classes/validator.xml" 加壓並排除某些檔案,用-x  cd test && zip -o ../../test.zip -r ./* -x ./WEB-INF/lib/*.* 注意:曾經出現過,感覺排除總是無效,原因是原來的zip沒有刪除,結果寫進去只是更新,原來的東西不會被刪掉。 注意這個 -o  引數,並不是覆蓋的意思,而是:-o   make zipfile as old as latest entry,將壓縮檔案內的所有檔案的最新變動時間設為壓縮時候的時間
三、程序及埠相關 查詢某個程序引數並殺死。假設程序引數中包含 -a schedule ,kill:kill -9 $(pgrep  -f " -a schedule") 其中,-f 是從程序的引數中找關鍵字。因為往往我們需要的是精確的匹配,比如如果不加-f,就是隻查詢程序名稱。java可能有多個。 那就相當於killall ======================= 附windows下常用命令 ======================= netstat -ano |findstr "埠號"  檢視埠號佔用程序資訊 tasklist |findstr "任務編號"  檢視任務名稱 tskill 程式名 殺掉程序 ntsd -c p -q pid 殺掉程序 =======================
netstat -tlnp |grep 8080 檢視程序號
netstat -tlnpa |grep 22|grep 公網IP 檢視哪些外網機器連線了本伺服器,用於診斷木馬
netstat -A inet -p |grep 8080 可以用host顯示ip地址。sudo 

netstat -ano lsof -i:8080檢視埠號所在程序 top按記憶體消耗排序:按大寫M
有時候一個埠,希望多個ip都能繫結它。則麼辦呢,比如內網和外網都想繫結。 解決:直接使用0.0.0.0地址。
當然,真正在生產環境的時候,要注意安全性,反而要縮小其綁定範圍。
四、查詢相關 grep 有時候需要打印出前後幾行,怎麼辦?使用-C引數即可。 grep Exception -C 10 logs/catalina.out grep -v 不包括某個keyword 非常實用。 如果有很多的結果,只想看前n個,用grep Exception -C 10 logs/catalina.out|head -n 統計的話,自然是加上 |wc -l 查詢,並逐條進行處理的例子
find ./ -name "*.c" | awk -F "." '{print $2}' | xargs -i -t mv ./{}.c  ./{}.h
find / -iname "*.log" |xargs grep "keyword"    如果是要查詢某個目錄下的所有檔案,用*.*是不行的。用空格" "即可,但這樣的問題還會查出來子目錄,並總提示xxx is a directory,很煩人。
解決:指定檔案型別為普通檔案而不是子目錄。find . -type f |xargs grep hello 查詢子目錄的名字,則find . -type d -iname dirname
查詢時排除某些目錄
find . -type f -name "*config*" ! -path "./tmp/*" ! -path "./scripts/*" ! -path "./node_modules/*" 
Explanation:
find . - Start find from current working directory (recursively by default) 
-type f - Specify to find that you only want files in the results 
-name "*_peaks.bed" - Look for files with the name ending in _peaks.bed 
! -path "./tmp/*" - Exclude all results whose path starts with ./tmp/ 
! -path "./scripts/*" - Also exclude all results whose path starts with ./scripts/
查詢檔案,並將gbk轉換為utf 8,批量處理 find . -iname "*.txt" |xargs -i{} iconv -f gbk -t utf8 -o {}.utf8 {} 注意*.txt一定要引號引起來。 sudo find /home -mtime -1 ! -path "/home/xxx/*" 查詢裡面排除某些資料夾。可以連續使用多個! -path,注意排除路徑最後一定要加*。 在gz檔案中查詢,用zgrep,不用解壓 五、curl相關 curl 有時候獲取不到資料。用—verbose檢視詳細資訊。 curl 預設引數獲取網頁,如果有跳轉,會返回302,得不到內容。此時應該加-L引數,就OK了。牛! curl -x ip:port http://xxxxx.html -x是加代理伺服器。 六、統計相關 df -k -h 檢視分割槽大小。注意-h要在後面 du -h update --max-depth=1 檢視資料夾update大小。  命令較長不好記。其實打一遍之後,以後!du就可以。 du -hs 目錄  檢視某個目錄的size。
sort -k列號 -r反序 ls -Sr -h能夠按大小順序排序顯示 ls -Sr -h |awk {'print $5'}只打印大小列 檢視某一列加和:檔案大小加和 ll *.jpg |awk '{sum+=$5} END {print "total = ", sum/1024/1024}'
刪除最後一行 awk  '{$NF="";print}' test.txt >test.txt  檢視剩餘記憶體    free -m |grep "Mem" | awk "{print $2}"   檢視程序,按記憶體從大到小    
ps -e -o "%C : %p : %z : %a"|sort -k5 -nr    

檢視程序,按CPU利用率從大到小排序    
ps -e -o "%C : %p : %z : %a"|sort -nr
檢視最近一週修改過的檔案 find /usr/bin/ -ctime -7  
查重複請求 需要看18日0點的資料,在日誌檔案中,有多少重複的請求--同一url不同時間。 grep "18\/Jan\/2017:00" access.log |awk '{print $7}' |sudo tee xxx.log  然後需要使用sort uniq sort xxx.log |uniq|wc -l就能得到排重後的條數。
查詢nginx中,除了最後一列,其他都相通的行,並列印重複次數,按次數大小排列 cat access.log | cut -d" " -f 1-13 | sort | uniq -c | sort -rn | head -100 求符合條件的行數有多少 cat access.log-20170515 | cut -d" " -f 1-13 | sort | uniq -c | sort -rn | awk '{if($1>=2){print $0}}' |wc -l 對第一列求和 cat access.log-20170514 |grep pull| cut -d" " -f 1-13 | sort | uniq -c | sort -rn | awk '{if($1>=2){print $0}}' |awk '{a+=$1}END{print a}' ./access.log-20170522:1.180.214.23 - - [21/May/2017:06:36:12 +0800] "POST /user/reg?os=1&v=1.0.0.052003.222&net=1&appname=xxx&dcid=1000&tempid=temp-939de0c4f578427 HTTP/1.1" 200 67 uid=temp-939de0c4f578427&did=864184030957283&lang=1&pmodel=M5Note&osversion=6.0&vendor=%E4%B8%AD%E5%9B%BD%E8%81%94%E9%80%9A "-" "okhttp/3.4.1" "-" 10.25.161.131:8080 "200" "0.016 查出所有的pmodel cat  reg.log |sed -E 's/.*pmodel=([[:alnum:]]*).*/\1/' nl filename | sort -nr | cut -f2 倒序行輸出 17:38:00 - 17:42:59 這5分鐘的介面訪問統計 sed -n '746137,754459p' /var/log/nginx/access.log | awk '{ print $7 }' | cut -d? -f1 | sort | uniq -c | sort -rn
七、重新命名 批量修改副檔名:希望把所有mp4副檔名修改為data rename mp4 data *.mp4 八、定位 which 命令 檢視檔案所在路徑 whereis cd - 回到上一個目錄(通過cd切換過來的上一個位置) 獲取正在執行的指令碼的絕對路徑 basepath=$(cd `dirname $0`; pwd) echo $basepath 九、重定向相關 > xxx.log清空某個log ,在sudo使用者下,前面的命令不能用。需要使用echo ""|sudo tee xxx.log
tee 命令的 “-a” 選項的作用等同於 “>>” 命令,如果去除該選項,那麼 tee 命令的作用就等同於 “>” 命令。
只輸出錯誤資訊到日誌檔案
nohup ./program >/dev/null 2>log &
什麼資訊也不要
nohup ./program >/dev/null 2>&1 &
十、服務相關 /etc/init.d下,可以放置指令碼,用chkconfig --add servername安裝成linux服務,用service servicename start的形式啟動 十一、alias 在root使用者環境下:vi ~/.bashrc 會看到: alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' 當然,使用alias檢視,還有其他的別名 linux下cp被alias為cp -i,如何才能拷貝的時候忽略提示? 命令前面加一個斜槓,就是原生命令了。 \cp xxxxx yyy -rf
十二、sudo相關
sudo source /etc/rc.local出現錯誤。 sudo: source: command not found 解決: sudo bash或者sudo -s 切換到root使用者登入。然後執行。 原因是source這個命令, 是一個shell builtin command

十三、引號 單引號如何巢狀? 比如本意是echo 'select * from user where birthday=\'19800101\'' ,但實際不好使。 解決:分段輸出。 echo 'select * from user where birthday='\'19800101\' 或者 echo 'select * from user where birthday='\''19800101'\' 另外:變數在單引號中是無效的。雙引號中OK。 比如current=`date "+%Y-%m-%d %H:%M:%S"` echo '$current' 結果是$current echo "$current" 結果是2016-05-08 23:34:34 十四、常用服務相關 Nginx: 當修改了hosts檔案之後,如果nginx.conf中涉及到解析hosts檔案,需要nginx -s reload一下才生效。 alias 和root的重要區別: 如果是location / 必須使用root 。否則會報錯:403
iterm2 iterm2塊操作: Command + Option + Left Mouse iterm快速連線:相信其他終端也有類似的功能。
iterm如何快捷安全的使用的ssh?這樣設定就沒必要每次輸入密碼: vi ~/.ssh/config ControlMaster auto ControlPath ~/.ssh/master-%[email protected]%h:%p ControlPersist yes Host de         HostName xxx.com         User design         IdentityFile ~/.ssh/id_rsa         ServerAliveInterval 80 Host gd         HostName www.xxx.com         User fbysss         IdentityFile ~/.ssh/id_rsa         ServerAliveInterval 80 如果網路斷開之後出現連線不上,可嘗試pkill master然後再試 ssh 問題:主機ping的速度很快,但是ssh連線非常慢。 sudo vi /etc/ssh/ssh_config #GSSAPIAuthentication yes 設定為no 再連線會變得更快。 如果這臺機器報錯: Unsupported option GSSAPIAuthentication 則直接註釋該行。 這裡提到,實際上是要修改客戶端的這個設定。所以嘛改了伺服器之後,在伺服器上ssh提示有問題。 不過,為啥改了就感覺快很多呢?待探究
十五、前後臺相關 通常,一個普通的耗時命令或者服務程式,前面加nohup ,後面加&,確保在後臺執行 bg命令和fg命令可以讓shell命令在前臺後臺切換。比如rsync一個大檔案,不能直接用&來弄,因為要輸入使用者密碼,否則就一點都傳不了。 正確的做法是,先輸入命令,回車 輸入使用者名稱密碼。 然後CTRL+Z,就切換到後臺並掛起(暫停)。bg則讓後臺程式繼續執行。——以前還以為ctrlz直接換後臺執行呢 然後執行bg可以看到在後臺執行的命令列 fg可切換回來。 我們看例項:rsync -avzP xxx0413.sql.tar.gz [email protected]:/home/fbysss/xxx0413.sql.tar.gz這個命令列,回車之後,輸入使用者名稱密碼 然後按CTRL+Z,顯示 [1]+  已停止               rsync -avzP xxx0413.sql.tar.gz [email protected]:/home/fbysss/xxx0413.sql.tar.gz 實際上,就是告訴我們,編號為1的程序已經掛起,到目標主機上看這個檔案,的確不再變化大小,說明確實掛起了。 然後,執行bg 1或者bg,因為只有一個,所以bg==bg1 就又開始了。 在目標主機上,要使用ls -a才能看到,是隱藏的檔案。

十六、常用指令碼 經常需要年月日時分秒這樣的檔名
日期:獲取下一天,前一天
date -d 'next day'  date -d '1 day ago'
currentTime.sh: today=`date +%Y%m%d` current=`date "+%Y-%m-%d %H:%M:%S"`     #獲取當前時間,例:2015-03-11 12:33:41 timeStamp=`date -d "$current" +%s`      #將current轉換為時間戳,精確到秒 currentTimeStamp=$((timeStamp*1000+`date "+%N"`/1000000)) #將current轉換為時間戳,精確到毫秒 echo $today-$currentTimeStamp 有時候會報錯:  數值計算提示數值太大不可為算數進位制的基 解決: 注:$是將括號中的內容變成一個表示式。 改進版: today=`date +%Y%m%d` current=`date "+%Y-%m-%d %H:%M:%S"`     #獲取當前時間,例:2015-03-11 12:33:41 timeStamp=`date -d "$current" +%s`      #將current轉換為時間戳,精確到秒 ntime=$(echo `date "+%N"`|sed -r 's/^0+//') #echo "ntime:"$ntime currentTimeStamp=$((timeStamp*1000+$ntime/1000000)) #將current轉換為時間戳,精確到毫秒 echo $today-$currentTimeStamp startbak.sh basepath=$(cd `dirname $0`; pwd) #得到當前shelljiao'b所在的目錄 timestamp=`$basepath/currentTime.sh` mysqldump -uxxxx -pxxxx xxxdbname >$basepath/commonsec$timestamp.sql 監控tomcat併發送報警郵件的指令碼: monitor_tomcat.sh #!/bin/sh basepath=$(cd `dirname $0`; pwd) PATH=/usr/sbin:/usr/bin:$PATH export PATH  #注意,在crontab中執行,path是不生效的,需要重新定義一下。 n=`ps -ef|grep java|grep -c apache-tomcat-7.0.65` if [ $n -eq 0 ];then     #   cd  /opt/tomcat/bin     #跳轉到tomcat的bin目錄     #   ./startup.sh  &                    #啟動         echo `date`":api server has down." >> $basepath/error.log         echo "===================catalina error log================" >> $basepath/error.log         echo `tail -1000 $CATALINA_HOME/logs/catalina.out` >> $basepath/error.log         echo `tail -1000 $CATALINA_HOME/logs/catalina.out` > $basepath/error_now.log         echo `date`":api server has down."|mail -s appserverdown -a $basepath/error_now.log [email protected]         service tomcat start        exit else    #echo $n    exit fi bash 的if語句,要注意中括號裡面左右都要有空格,if和中括號之間要有空格。 字串和字串比較用等號,數字使用-eq integer expression expected 定期在凌晨刪除n天以前的檔案 remove_bak.sh
find /datadisk1/dbbackup -name 'xxdb*' -mtime +n -exec rm -rf {} \;
定時器 sudo crontab -e 01 01 * * * /home/fbysss/autobackup/start.sh && echo `date`:" auto backup database script." >>/home/fbysss/autobackup/backup.log */5 * * * * /home/fbysss/autobackup/monitor_tomcat.sh #5分鐘檢測一次 01 07 * * * /datadisk2/autobackup/remove_bak.sh

從url中獲取purefilename: 方法1: fbname=$(basename "$fullfile" | cut -d. -f1) 方法2: s=/the/path/foo.txt echo ${s##*/} foo.txt s=${s##*/} echo ${s%.txt} foo echo ${s%.*} foo 
其他 ssh-keygen產生key檔案,私鑰公鑰檔案分別在~/.ssh/id_rsa,id_rsa.pub中 cat /etc/passwd 可以看某個使用者的宿主目錄——未必都是home rpm -rvh 安裝 rpm -ql rpmname檢視是否安裝 rpm -e 解除安裝  yum安裝
ll --full-time檢視完整檔案時間 hostname 域名,nslookup域名,可以用來查詢DNS 兩個變數相加:total=$(($a+$b))
md5sum命令可以生成MD5碼。    格式: md5sum filepath md5sum xxx.apk|cut -d ' ' -f1 macbook中:直接使用md5命令 防火牆開放
vi /etc/sysconfig/iptables
新增


-A INPUT -m state --state NEW -m tcp -p -dport 21 -j ACCEPT
然後,sudo service iptables restart
如果要限制某個IP才能訪問,可以用-s引數+ip地址 diff命令,是一個很好的東西。我們在伺服器上更新檔案,有時候需要比較一下變動了哪些。直接使用diff兩個檔案就可以了。 安裝pip: sudo yum -y install epel-release
sudo yum -y install python-pip
 netstat -A inet  通過systemctl來啟動的服務,放置在 /etc/systemd/system/tomcat.service 或者 /usr/lib/systemd/system 下 有時候在編輯/etc/profile的時候,不小心可能寫成這樣export PATH=PATH:/usr/java/bin,實際上應該為export PATH=$PATH:/usr/java/bin。這時候,執行任何命令可能都出現類似   /usr/bin/env: sh: 沒有那個檔案或目錄 這樣的提示。 解決:export PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin,然後再vi /etc/profile修正,然後source /etc/profile就好了。

相關推薦

Linux常用技巧備忘錄司機

作者:fbysss QQ:溜酒酒吧酒吧吾散 blog:blog.csdn.net/fbysss 宣告:本文由fbysss原創,轉載請註明出處 前言: linux基本命令就不在這裡列出。本文記錄的主要是 1.容易忘記的知識點 2.常用的、需求強烈的技巧 3.疑難雜症

Linux常用操作命令cat

常用操作命令 文本內容電視cat:顯示文本文件 使用cat命令可以顯示文本文件的內容,也可以把幾個文件的內容追加到另一個文件中。如果沒有指定文件,或者文件為“-”,那麽就從標準輸入讀取。命令語法: cat [選項] [文件]選項: -n :對輸出的所有行編號 -b :

linux常用基本命令使用者、許可權管理(一)

簡介 ⽤戶是Unix/Linux系統⼯作中重要的⼀環,⽤戶管理包括⽤戶與組賬號的管理。在Unix/Linux系統中,不論是由本機或是遠端登入系統,每個系統都必須擁有⼀個賬號,並且對於不同的系統資源擁有不同的使⽤許可權。Unix/Linux系統中的root賬號通常

Linux常用終端命令cat、grep、echo

cat命令是linux下的一個文字輸出命令,通常是用於觀看某個檔案的內容的; cat主要有三大功能: 1.一次顯示整個檔案。 $ cat   filename 2.從鍵盤建立一個檔案。 $ cat  >  filename 只能建立新檔案,不能編輯已有檔案. 3.將幾個檔案合併為一個檔案。 $cat

linux常用技巧

和sed一樣,awk也是逐行掃描檔案的,從第一行到最後一行,尋找匹配特定模板的行,並在這些行上執行“選擇”動作。如果一個模板沒有指

司機淺談linux系統學習技巧

windowsLinux起源於20世紀70年代,是一種優秀的操作系統系統。初次接觸到linux這個系統是在大學期間,這樣才發現除了windows外的另外一個有趣系統。開始抱著好奇的心態去了解,隨著深入學習,筆者被它獨有的魅力所吸引。即使它的可視化窗口操作模式並不如Windows操作系統那樣完美,可是它的可維護

司機常用的幾個JavaScript除錯技巧

1. debugger 除了console.log, debugger是我們最喜歡、快速且骯髒的除錯工具。執行程式碼後,Chrom

[Linux]-Linux常用命令文件解壓

壓縮 com nbsp linux常用命令 inux 不同 gunzip gzip all 不壓縮方式壓縮的文件需要不同的命令來解壓縮,下面是Linux的各種文件解壓命令。 對於.tar結尾的文件: tar -xf 對於.gz結尾的文件 : gzip -d all.

JavaScript常用技巧數組操作

filter style == indexof bsp pop 元素 過濾 ice 1、獲取最後數組中最後一個元素 . arr.slice(-1).pop() . arr[arr.length - 1] 2、過濾重復元素 arr.filter(fu

JavaScript常用技巧進制轉換

string 十進制轉二進制 進制 rip javascrip clas 二進制轉十進制 pre div 一、十進制轉二進制 (8).toString(2) 二、二進制轉十進制 parseInt("1000",2) JavaScript常用技

linux下的常用技巧

$1 常用技巧 log hot XML chan -m linux 行合並 xargs linux下的多行合並~ [root@]# yum list installed|grep php|awk -F ‘ ‘ ‘{print $1}‘ php-channel-nrk.n

linux 常用查日誌技巧

發送 字節 如果 彈出框 技巧 創建 格式化 grep 書寫 一、基礎 命令 功能 語法 說明 cat 1.一次顯示整個文件。 2.從鍵盤創建一個文件。 3.將幾個文件合並為一個文件。 1、cat 文件名 2、cat > filename 3、ca

linux常用文件I/O操作文件共享的實現方式

文件共享dup和dup2函數fcntl函數 1、文件共享的三種實現方式 1、什麽是文件共享: (1)文件共享就是同一個文件(同一個文件指的是同一個inode,同一個pathname)被多個獨立的讀寫體(幾乎可以理解為多個文件描述符)去同時(一個打開尚未關閉的同時另一個去操作)操作。

python爬取煎蛋妹子圖(司機養成路)

chrom all with file windows import apple 妹子 lib 源碼: 1 import urllib.request 2 from bs4 import BeautifulSoup 3 import os 4 import io

MyBatisMapper詳解及常用技巧

mybatis mapperselect先看一個簡單的案例:<select id="selectPerson" parameterType="int" resultType="hashmap"> SELECT * FROM PERSON WHERE ID = #{id} </selec

Linux系列教程(九)——Linux常用命令網絡和關機重啟命令

route 註意 端口號 post rac pos 名稱 window ebo   前一篇博客我們講解了Linux壓縮和解壓縮命令,使用的最多的是tar命令,因為現在很多源碼包都是.tar.gz的格式,通過 tar -zcvf 能完成解壓。然後對於.zip格式的文件,使用g

linux零基礎學習Linux sed 命令常用操作詳解

延伸 進行 數據 12px -i 空白 字符串 options 信息 sed是Linux系統中一個很好的文件處理工具,可以對數據進行替換、刪除、新增以及選取等操作,使用起來也十分方面,以下是全面的sed操作介紹。sed命令行格式:sed [options] 'com

Linux學習筆記四————Linux常用命令 ( 待補充)

-h http “.” 現實 人性化 快捷 我們 包括 無法 一、Linux命令——文件、磁盤管理 1.文件管理 <1>查看文件信息:ls ls是英文單詞list的簡寫,其功能為列出目錄的內容,是用戶最常用的命令之一,它類似於DOS下的dir命令。 Linu

Linux學習筆記十————Linux常用服務器構建ftp服務器

download pytho ftp服務 nsf png tp服務器 圖片 拷貝文件 span 一、ftp服務器介紹 FTP 是File Transfer Protocol(文件傳輸協議)的英文簡稱,而中文簡稱為“文傳協議”。 用於Internet上的控制文件的雙向傳輸。

轉:linux常用命令wget命令的使用

ping inux 斷點續傳 div htm pac 地址 .cn 密碼 一、介紹 Linux系統下載文件工具,用來從指定的URL下載文件 二、使用方法 1 2 3 4 5 6 7 8 語法:wget [參數] [URL地址] 選項: -c接著下載沒