目錄
###檢視系統資訊
###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定時任務
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TWE5UeRpXT3lFRNdXRUlVdG1mYopkMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL3MDN4AzMyYTMzAjMxgTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
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 曆史驅動