天天看點

(持續更新) linux 指令總結

目錄

###檢視系統資訊

###awk

### git

##雜項篇

###k8s

###kerberos

###字段截取操作

###shell免密碼執行某個指令

###Docker操作

###Crontab定時任務

###vi/vim操作(指令模式)

###路由篇

###頻率篇

###磁盤相關

###增加swap分區   

###CURL指令參數  

###格式化U盤篇

###小紅帽系列篇

###運維

###Ubuntu篇   

###Windows篇   

###重要的網站篇

###檢視系統資訊

cat /etc/issue 或者 lsb_release -a       ;;檢視linux os版本 
uname -a或-r                             ;;檢視核心版本
file /bin/ls                             ;;檢視系統位數
free -h或-m                              ;;檢視磁盤使用情況(G)
cat /proc/cpu                            ;;檢視CPU資訊
cat /proc/cputemp                        ;;檢視cpu的溫度
lscpu                                    ;;檢視cpu相關的簡短資訊
           

###awk

使用方法:awk -F '[pattern]' '{print $1 $(NF)}' fileName

其中,pattern是分割符,多個分割符連續寫,還可以指定字元串為分割符

$(NF)代表分割後最後一個字元,同理$(NF-1)為倒數第二個,單引号代表按行取part-r-00000每一行内容如下,現在要取出cost的值做個累加

{jobId:"application_1536569256098_146007",jobName:"ultraman_sparksql_11537_wap_search",queueName:"root.spark_sql_ultraman",user:"ultraman",hostIP:"10.141.160.97",status:"COMPLETED",timeConsuming:"7524378",startTime:"1536816562001",endTime:"1536824086379",memory:"3",vCores:"81",failedMaps:"0",failedReduces:"0",killedMaps:"0",killedReduces:"0",cost:"9.120949",level:"2",resourceWasted:"0.26708108",type:"spark"}

實作如下:

awk -F , '{print $(NF-3)}' part-r-00000 > cost1
awk -F '[:\"]' '{print $(NF-1)}' cost1 >cost2
awk '{sum += $1};END {print sum}' cost2
           

常用變量說明:

  • $0 完整的輸入記錄
  • $n 由分割符分割的第n個字段
  • $NF 分割符分割的最後一個字段
  • RS 指定分割符
  • FS 指定列分割符,設定為空時,每個字元相當于一列
  • ORS 輸出指定分割符

    eg:

    echo $(hadoop classpath 2>/dev/null | awk 'BEGIN{RS=":"}{printf("%s\n",$0)}' 将hadoop的環境變量中冒号換成\n

    cat 1.txt | awk 'BEGIN{ORS=":"}{print $NF}' 将 1.txt 中回車換成冒号

    awk '{for(i=6;i<=NF;i++)printf $i""FS;print ""}'  fileName  列印檔案的第6行及後所有行,分割符保持原樣

### git

git clone xxx.git                                   克隆項目
git config --global user.name "rose"                配置本地 git 使用者
git config --global user.email [email protected]     配置本地使用者的伊妹兒
git config --global http.sslVerify false            解決git克隆需要證書問題
git config --global color.ui true                   啟用顔色
git config --global core.whitespace cr-at-eol       忽視換行符差異,^M 

git branch / git branch -a  / git branch -d         列出本地分支/列出遠端分支/删除本地分支
git branch test                                     建立本地分支 test
git checkout xxx                                    切換到某個分支,復原檔案/目錄
git push orgin test:test                            push本地分支test在遠端分支test
git push origin test                                送出代碼
git status                                          顯示工作區狀态
git add .                                           添加修改或建立檔案
git commit                                          送出本到本地倉庫
git init                                            初始化
git diff --ignore-space-change                      顯示本次修改代碼,忽略空格和換行
git pull origin remote:local                        拉取遠端xxx覆寫本地xxx分支

git reset --hard HEAD^                              復原本地上一次commit,HEAD^可替換成commit号
git push origin xxx -f                              聯合reset使用撤銷遠端上一次送出,本地必須是xxx分支    
git remote prune origin                             解決遠端删除分支後,本地git branch -a 依然看到   

git rebase HEAD~2 --signoff                         會把本地還沒commit的内容清空(慎用) 
git push --force-with-lease origin master           讓已經送出到remote的commit帶簽名

#git  依賴子項目
git submodule init                                  初始化子項目
git submodule update                                拉取子項目

git reset HEAD .                                    撤銷所有的add操作
git reset HEAD filename/dir                         撤銷單個檔案/目錄
git config core.autocrlf false                      解決LF will be replaced by CRLF

git tag -l                                          顯示已打的tag
git tag hello.0f5986e -m "hello"  0f5986e           -m指定提示,最後跟commitId(7位就夠)
git tag -d hello.0f5986e                            删除tag
git push origin hello.0f5986e                       push 到遠端,不分分支
 
編寫 .gitignore 檔案,和 .git同級,用于忽略配置



           

##雜項篇

objdump -d firefox >/tmp/1                  将二進制執行檔案反彙編成彙編代碼
cat json檔案 | jq '.'                       友好顯示json檔案的内容,需先安裝jq軟體包
lsof  -i:6006                               檢測某個端口是否開啟
diff -ruNa director1 director2 >comp.patch  比較兩個檔案夾下的所有檔案的内容的不同
diff -urN 1.txt 2.txt > diff.patch          比較兩個檔案内容
mvn -X clean install                        安裝某個依賴到本地倉庫
strace xxx                                  顯示某個指令執行時的系統調用和所接收的信号
ldd xxx                                     判斷某個可執行的 binary 檔案含有什麼動态函式庫
tar cvf ./1.tar ./*                         将目前目錄下的所有檔案打包到目前目錄的1.tar
md5sum ./檔案                               檢視目前目錄下的某個檔案的md5值
gcc hello.c -o hello                        将hello.c檔案編譯生成hello可執行檔案
chown root:root qemu-2.7.0 -R               将檔案夾下所有檔案的使用者群組改為root
chmod 755 1.txt 或 chmod +x 1.txt           添加執行權限
vi /etc/sudoers                             定位root,之後加入一行,和root使用者類似的行,來支援sudo
man ascii                                   顯示ascii碼
mount /dev/sdb1 /media/                     将某個盤挂載到/media目錄下
umount /dev/sdb1                            彈出挂載
umount -l path                              解決fuse挂載殘留,cannot access mountp: Transport endpoint is not connected錯誤
:r !LANG=env  data                          在光标的下一行添加英文格式的日期
gstack  pid                                 檢視某個程序調用棧
grep "xxx" . -r                             遞歸擷取目前目錄下含有xxx的字段的檔案,若含有tab,使用CTRL+v按TAB加入即可
netstat -lnp | grep 2888                    檢視2888端口号是否被使用,kill -9 顯示結果最後一例的程序ID數字
ldconfig -p | grep libgo                    檢視動态連結庫,隔離libgo庫
ls -lR | grep "^-" | wc -l                  統計目前檔案夾下包括子檔案有多少個檔案,去掉R不包含子檔案夾
ls -lR | grep "^d" | wc -l                  統計目前目錄下有多少檔案夾,包含子檔案夾
rpm2cpio xxxx.rpm | cpio -div               檢視rpm包内容
ssh-keygen // ssh-copy-id followIP          産生公鑰和私鑰,用于ssh免密登陸 // 将本機的公鑰拷貝到指定hostIP機預設位置
dos2unix fileName                           解決執行腳本出現 "$'\r': command not found"錯誤,windos和linux對換行的編碼不同導緻
/bin/cp -rf xxx xxx                         覆寫copy

ln -s /path/to/tgt  test                    建立軟連接配接,test-> /path/to/tgt
ln -snf /path/to/tgt2 test                  更改軟連接配接,test->/path/to/tgt2

ls  | sort | xargs -i md5sum {}  &>/tmp/2   擷取目前目錄下所有檔案MD5值,xargs帶i表示按行給
gzip -d xx.gz                               解壓 .gz 檔案
svn co URL  --username xxx --password xxx   相當于git clone
hostnamectl set-hostname <newhostname>      更改hostname名,相當于修改/etc/hosts檔案
journalctl -xefu xxxx                       檢視systemd管理的服務日志


ps -aux                                     使用标準文法檢視系統上的每個程序
ps -ef                                      使用BSD文法檢視系統上的每個程序
ps -ajxf                                    列出程序樹
ps -elf | grep defunct                      列出僵屍程序

kill -15 pid                                安全殺掉程序
kill -9 pid                                 強制殺死程序
kill -9 -pid                                殺組程序

vimdiff 1 2                                 vim打開2個檔案,并顯示diff
alias ls="ls --color"                       環境變量中加入此,讓檔案和檔案夾有顔色,也适用docker内容器

sort filename | uniq -c| sort -nr           檔案中每一行為一個單詞。統計單詞出現的次數
timedatectl                                 檢視系統時區資訊
sort -n test.txt | uniq                     去掉重複的行
lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr   檢視程序打開的句柄數,并排序
mount -o size=20g  -o  remount  /xx/shm     調整容器共享目錄大小
#将目前目錄下的所有含有"github.com/v2"替換成"gitlab.xx.com/hdfs-v2"
grep "github.com/v2" -rl . | xargs sed -i "s/github.com\/v2/gitlab.xx.com\/hdfs-v2/g"
iotop                                       檢視 io top情況
iostat -kx 1                                io統計,-k 以kb為機關,x 表示顯示詳情, 1代表每秒
           

###k8s

kubectl get nodes                    # 顯示所有k8s的node
kubectl label node rsync.gpu003.turing.k8s.js.ted ORION_BIND_ADDR=orion-sogou  #為rsync.gpu003.turing.k8s.js.ted節點打個标簽
kubectl get node --show-labels       # 顯示所有節點的标簽
kubectl label node rsync.gpu003.turing.k8s.js.ted ORION_BIND_ADDR-  # 删除rsync.gpu003.turing.k8s.js.ted的ORION_BIND_ADDR标簽,隻需key加 - 号
kubectl replace -f xxx.yml           # 更新
kubectl apply/create -f xxx.yml      # 建立
kubectl get daemonset/service/pods   # 顯示所有的...
kubectl delete -f deploy-server.yaml # 删除某個資源  比如storageclass
kubectl delete pods <pod>            # 删除pod,強制删除 --grace-period=0 --force
kubectl get pvc --namespace csi-dev-demo   # 指定namespace空間下的pvc
kubectl logs csi-demo-driver-7896db98ff-tl95c --namespace csi-dev-demo -c csi-demo-driver   # 檢視失敗日志
kubectl describe pod csi-hdfsmount-controller-f8559596d-bgd7g --namespace csi-hdfsmount     # 檢視失敗日志
kubectl delete pv xxxx              # 可能删除不掉,pv狀态變成 terminal,此時執行下一條指令
kubectl patch pv xxx -p '{"metadata":{"finalizers":null}}'   # 删除狀态是terminal的pv
kubectl exec -it -n thanos csi-hdfsmount-controller-86d87bcfd5-jz6rz --container csi-driver-hdfsmount -- /bin/sh # 進入pod的某個容器,-n為namespace縮寫

# node節點 notReady 排查
journalctl -f -u kubelet
           

###kerberos

kinit [email protected]       生成臨時的keytab緩存,産生 /tmp/krb5_cc0檔案
klist -l                  顯示目前的keytab
kdestroy                  清除緩存
klist -e -k -t xx.keytab  檢視keytab及pricipal
           

###字段截取操作

awk -F '[,\" \t]' '{print $NF}'  fileName >1.txt   以,逗号,引号,空格,tab分割,打出最後一個字段重定向
sed -e '/items/d' a.txt >b.txt                     删除含有items字元串的行
cat b.txt  | grep -v items                         隔出掉含有items的行
           

###shell免密碼執行某個指令

expect -c "set timeout -1;
        spawn scp [email protected]$127.0.0.1:$path/xxx $output/
        expect {
                *(yes/no)* {send yes\r; exp_continue;}
                *password* {send \"12345678\r\"; exp_continue;}
                eof {exit 0;}
        }";
           

expect實作免密的指令,需安裝響應的包。spawn是expect内部指令,用來實作傳遞互動指令。send和手工敲相關的指令等效

###Docker操作

docker images                                  顯示本地的鏡像
docker push/pull xxxxxx:5000/xx/xx:version     上傳鏡像到遠端倉庫/從遠端倉庫拉取鏡像
docker ps                                      顯示運作的container,-a顯示運作過的container
docker run -i -t -d  xxx  /bin/bash -c 'sh /tmp/1.sh'   運作鏡像,-i互動,-t終端方式,-d背景運作。-c後使用sh執行某個腳本
docker exec -i -t xxx /bin/bash                在運作着的容器裡執行指令bash
docker kill contanerID                         殺掉某個運作的容器
docker start/restart/stop contanerID           啟動/重新開機/停掉某個容器
docker rm [-f] contanerID                      删除容器,多個用空格分割,-f 可删除一個正在運作的容器
docker rmi imageID                             删除鏡像
docker cp containerID:/path/to/file /path/target                将容器裡的某個檔案拷貝到主控端上
docker run -v /path/target:/path/source containerID /bin/bash   将主控端的目錄挂在在容器source目錄
docker inspect containerID                     查詢容器的資訊
docker version/--help                          顯示版本和查詢幫助
systemctl stop docker                          暫停docker服務
docker commit -a "送出者" -m "送出資訊"  containerId 名稱:版本    将修改後的container儲存成鏡像
docker commit --pause=false containerId xxx    不停服務commit容器
docker tag image resposity:version             給目前的image打個tag别名
docker run -it --pid host --net=host  --privileged -v /tmp:/tmp  imID  /bin/bash  将本機程序映射到docker,類似程序挂載
systemctl daemon-reload                        重新開機守護程序,docker配置更改後都需要執行加載
systemctl restart  docker                      重新開機docker服務
docker images|grep none|awk '{print $3}'|xargs docker rmi       删除tag和倉庫為none的鏡像(更新頻繁産生的none鏡像)
journalctl -f -u docker.service                列印docker daemon日志
docker system df                               檢視docker磁盤使用情況
docker system prune                            删除關閉的容器、無用的資料卷和網絡,以及無tag的鏡像(慎用)
docker system prune -a                         可以将沒有容器使用Docker鏡像都删掉(慎用)
docker run --entrypoint /bin/bash xxx          執行指定的指令,可解決 “/bin/bash: cannot execute binary file” 錯誤
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"  檢視容器的cpu和mem --no-stream采集一次,去掉每一秒重新整理一次
docker ps --filter"status=exited" | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm   删除weeks的docker容器
docker save -o test.tar docker.io/horovod/horovod:0.20.0-tf2.3.0-cuda10.1  鏡像儲存成 tar檔案
docker load < test.tar  導入save的鏡像tar檔案
           

###Crontab定時任務

(持續更新) linux 指令總結
25 * * * * sh -x /tmp/pa.sh >/xxx/log/`date -d yesterday +'\%Y-\%m-\%d-\%H'`.log 2>&1     按年月日打日記
50 23 * * * sh -x /tmp/mary.sh $(date +"\%Y\%m\%d") >/xxx/clu_sm.log 2>&1                    傳入時間參數
43 21 * * *                         21:43 執行
15 05 * * *                         05:15 執行
0 17 * * *                          17:00 執行
0 17 * * 1                          每周一的 17:00 執行
0,10 17 * * 0,2,3                   每周日,周二,周三的 17:00和 17:10 執行
0-10 17 1 * *                       毎月1日從 17:00到7:10 毎隔1分鐘 執行
0 0 1,15 * 1                        毎月1日和 15日和 一日的 0:00 執行
42 4 1 * *                          毎月1日的 4:42分 執行
0 21 * * 1-6                        周一到周六 21:00 執行
0,10,20,30,40,50 * * * *            每隔10分 執行
*/10 * * * *                        每隔10分 執行
* 1 * * *                           從1:0到1:59 每隔1分鐘 執行
0 1 * * *                           1:00 執行
0 */1 * * *                         毎時0分 每隔1小時 執行
0 * * * *                           毎時0分 每隔1小時 執行
2 8-20/3 * * *                      8:02,11:02,14:02,17:02,20:02 執行
30 5 1,15 * *                       1日 和 15日的 5:30 執行
           

###vi/vim操作(指令模式)

:1,$s/ee/hehe/g                          vim将文檔中出現的所有ee-->hehe,參數g相當于遞歸之意

:%s/test//gn                                   統計test字元串出現的次數,小寫s,而且gn前是兩個 //

:set nu     顯示行号

:set paste 設定成粘貼模式,不會改變 # 登出後面的内容

dd           删除光标所在行

gg           光标回到文首

shift + g  跳到檔案末尾行

9+G        跳到檔案第9行

:200,.d    删除200行到目前行的所有行,.代表目前,d代表删除

可視化操作: shift +v ,ctrl+v進入 可視化操作,前者一次向下移動一次能選中一行,後者隻能選中目前光标能到的最大列

按方向鍵選中内容,shift+i表示插入,輸入後按esc

按方向鍵選中内容,按d删除選中的列,删除行shift+d

p        複制使用dd删除的行

u        撤銷上一步操作

/xx     正向查找xx字元

?xx    反向查找xx字元

vi粘貼文本時,會自動縮進,如何格式化呢?

  •  按兩下小寫g,即gg,定位光标到第一行行首
  •  按住Shift+v,進入可視化編輯的模式
  •  Shift+g,選中整個代碼
  • 按下等号=,格式化所有代碼

###路由篇

route                              顯示網關等資訊
ifconfig                           顯示ip/掩碼
ip ro sh                           顯示路由資訊
ip ro del default                  ip router簡寫,删除路由
# 添加default到10.20.255.254(網關)的路由,經過enp2s0網卡,使用靜态協定,連接配接數為1024
ip ro add default via 10.20.255.254 dev enp2s0 proto static metric 1024  
ifconfig eth0 down/up              打開/關閉 網卡
/etc/init.d/network restart        重新開機網絡服務
/etc/resolv.conf                   域名伺服器配置檔案,如 114.114.114.114。解決内網連結不了外網
           

###頻率篇

cpufreq-set -g performance         設定cpu在頻率最高的模式
cpufreq-set -c 0 -g userspace -d 180000 -u 240000       設定cpu0的最小頻率和最高頻率
cpufreq-info                       顯示cpu模式以及支援的頻率
cpufreq-set -f 1500000             設定cpu頻率,該模式隻能在userspace模式
                                   Intel 筆記本有睿頻的貌似修改不了頻率,
                                   如果沒有userspace模式,可以使用下列方式啟用
vim  /etc/default/grub             将quiet splash ----> quiet splash intel_pstate=disable
sudo update-grub                   更新grub
sudo reboot                        重新開機生效
           

###磁盤相關

du -h --max-depth=1    列出目前一級目錄大小
df -h                  檢視磁盤使用情況,包括可用和已用等,常用檢測磁盤是否有空間
lsof | grep xxx        檢視含有xxx字段的程序,可得到程序pid
kill -9 pid            殺死程序及相關的程序
           

###增加swap分區   

sudo dd if=/dev/zero of=/mnt/512Mb.swap bs=512M count=1      從/分出1個512M大小的空間
sudo mkswap /mnt/512Mb.swap     對該鏡像檔案格式化
sudo swapon /mnt/512Mb.swap     挂載該鏡像檔案
sudo  vim /etc/fstab            讓其開機有效(可選)
#添加 /mnt/512Mb.swap  swap swap defaults 0 0至此,使用free -m 即可檢視到swap空間已經增加成功
swapoff /mnt/512Mb.swap         删除剛分的空間
           

###CURL指令參數  

curl:指令行下工作的檔案傳輸工具,後常接網站。預設使用get請求

    -o/O:重命名/使用源檔案名

    -L:允許網站自動中轉站點

    -C:斷點續傳

    --limit-rate 1000B:最大網絡使用限制

    -u usrn:passwd:提供登陸授權

    -T "{f1,f2}":指定本地檔案

    -x proxxy:port:指定代理

    -i/I:響應帶頭和源碼/隻帶頭

    -X POST:指定請求方式,POST可以是其他如PUT/DELETE

    -k insecure方式

    -v verbos 列印細節

    -E xx.pem:指定證書

curl -H "Content-Type:application/json" -X POST -d '{"user": "admin", "passwd":"12345678"}' http://127.0.0.1:8000/login
           

### 終端快捷指令

CTRL + w		;;删除光标前的一個參數,以空格為分隔
CTRL + r		;;查找曆史最近一次執行指令,指令需輸入,字首比對
CTRL + y		;;撤銷終端上一次快捷鍵操作
CTRL + ←/→		;;光标向左或向右跳一個單詞 
CTRL + u		;;删除光标前的所有
CTRL + k		;;删除光标後的所有
           

###格式化U盤篇

sudo fdisk -l                   找出u盤的盤符,假設是/dev/sdb1
sudo umount  /dev/sdb1          umount u盤,解決"contains a mounted filesystem"錯誤
sudo mkfs -t vfat /dev/sdb1     非啟動u盤,格式化為fat32格式,其他還支援ext2\ext3等
sudo mkfs.vfat -I /dev/sdb      啟動盤格式化,-I 解決"Device partition expected,
                                not making filesystem on entire device "
           

###小紅帽系列篇

rpm -ivh 軟體包名                  安裝軟體包
rpm -qa  軟體名                    查詢已經安裝的軟體
rpm -ql  軟體全稱                  查詢與軟體相關的目錄
rpm -q   軟體包名                  查詢指定軟體包是否已經安裝
rpm -Uvh 軟體包名                  更新一個軟體包
rpm -e   軟體包名                  删除指定軟體包
yum-builddep xxx.spec             安裝某個軟體的依賴環境
systemctl stop firewalld.service  fedora關閉防火牆
rpm -qf /lib64/libgo.so.7         檢視libgo.so.7安裝什麼包添加的
yumdownloader 軟體                下載下傳相應的軟體包
yum localinstall xxx.rpm          本地安裝軟體包,同時安裝依賴包
           

###運維

pssh指令,用于在中控機對其餘有信任的機器執行指令

建立一個 hosts檔案,存放需要執行指令的機器ip,内容類似

[email protected]
[email protected]
[email protected]
           

使用方式 pssh [OPTIONS] command [...],例如ls 每台機器的tmp目錄存放早pssh目錄下

pssh -h hosts.txt -i -o /tmp/pssh/ 'ls /tmp'
           

###Ubuntu篇   

sudo su -                                 切到root使用者
apt-get build-dep qemu
apt-cache search                          軟體名搜尋伺服器是否有此軟體包
dpkg -l 軟體名                             檢視安裝的某個包的全稱
dpkg -L 軟體名                             檢視某個軟體包安裝的目錄
sudo grub-mkconfig>/boot/grub/grub.cfg    雙系統windows啟動項丢失
           

###Windows篇   

net stop sharedaccess       windos關閉防火牆
ipconfig                    顯示ip
dir                         類似linux ls
win + r                     快速打開 運作 界面
           

###重要的網站篇

http://www.docjar.com/jar_detail/libfb303.jar.html      下載下傳jar包的網站
http://mvnrepository.com/                               maven中央倉庫
http://rpm.pbone.net/                                   rpm包搜尋
https://docs.docker.com/engine/admin/                   docker 配置deamon
http://www.geforce.cn/drivers                           nvidia 曆史驅動
           

繼續閱讀