目录
###查看系统信息
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 rose@example.com 配置本地用户的伊妹儿
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 update-ref -d HEAD 回滚项目第一次commit,未push数据
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 到远程,不分分支
git commit --amend 修改最近一次commit的信息
编写 .gitignore 文件,和 .git同级,用于忽略配置
#将dev分支merge到master分支
#在dev分支commit新变更,push后,切到master分支
git merge dev
##杂项篇
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代表每秒
cat xxx | grep xx -C10 grep 关键字前后10行
rsync -a --delete --progress blank target 删除大文件夹,创建一个空目录
###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 XXX@realm.com 生成临时的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 guest@$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定时任务
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,内容类似
test@192.168.56.102
test@192.168.56.103
test@192.168.56.104
使用方式 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 历史驱动