linux指令
在控制台查看linux历史命令:history
可以使用git stash暂存 不需git add
等切回本分支后,git stash pop即可
看之前的提交记录:git log --author=jiboyu
git log --reverse 可以查询距离当前时间最远的提交,即倒序排,在命令行冒号后输入/xxx可查看特定人的提交commitId
可以看到历史的commit id, 然后 git checkout <commit id> 即可转到之前的提交记录。
d602380ca21ddd99249c17f501a30959f7999ff6
git checkout d602380ca21ddd99249c17f501a30959f7999ff6
然后git checkout master即可跳回master
撤回git add:git reset HEAD
撤回git commit :git reset --soft HEAD^
撤回git merge: git reset --hard HEAD
修改工程的远程仓库地址:
1、git remote //查看远程仓库名称:origin
2、git remote get-url origin //查看远程仓库地址
3、git remote set-url origin git@git.corp.kuaishou.com:user-growth/ug-activity-platform/activity-checkpoint-passthrough.git (可以填git的ssh或者https链接)
git branch -vv
可以看到本地分支是领先或落户于远端分支
根据远程分支创建新的本地分支
git checkout --track origin/jiaby_0530_draw
在机器上执行netstat命令可以看到连接了哪些机器
netstat -alnp | grep 9910 查看机器上和9910相关的端口 alnp分别的解释:http://lazybios.com/2015/03/netstat-notes/
$ netstat -alnp | grep 8005
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 135548/java
执行命令后会出现8005相关的进程,即135548,搜进程即可看到是哪个服务
在机器上查看进程:ps -ef
查看和短信相关的进程:ps -ef | grep smsAsyncSendConsumer
ctrl + a移动到最前
ctrl + e 移动到最后
vi文件:dd删除整行
ctrl + f 向下翻页
ctrl + b 向上翻页
在文件中查询某个字符串:less 文件 然后按/ 输入字符串 按下n即可查找下一个字符串
less查看文件 空格和b上下翻页,less有翻页功能
cat可以一次性查看文件所有内容
tail -n main.log 表示查看文件最后200行日志
ln -s A B 后的结果为 B -> A
nl main.log 打印日志显示行号
head -n 20 main.log | tail -n 10 表示获取文件11到20行数据
ls -lh 可以展示文件大小
rm *背面.jpg 表示模糊删除
删除文件里的内容 echo "" > filename
删除文件夹目录下的内容:进入到文件夹下 rm -rf *
统计文件夹里文件的数量 ll | wc -l
文件切片:4是一个文件的行数 test是新文件的前缀
split -l 4 testdata.txt test
压缩:进入到文件夹里面(最后一个参数是压缩包的名字)-P表示加密码
zip -q -r -P719526 3yue.zip *
下载身份证图片:登录机器:
sz -e result.zip
cut:切出某段信息,类似awk
-d 自定义分隔符,默认为制表符
-c 以字符为单位进行分割
grep "SmsAsyncSendConsumer" main.log | cut -d ',' -f 2
-d表示以,为分隔字符 -f表示取出第几段
grep "statusCode: 160062" main.log | awk -F ',' '{print $7}'| awk -F '=' '{print $2}'| cut -c 3-4
-c 表示取出第三个和第四个字符
grep命令:
grep -B 5 SmsAsyncSendConsumer main.log 显示SmsAsyncSendConsumer及前5行
grep -A 5 SmsAsyncSendConsumer main.log 显示SmsAsyncSendConsumer及后5行
grep -C 5 SmsAsyncSendConsumer main.log 显示SmsAsyncSendConsumer及前后5行
grep "grpc-new-mode-worker-\[sendCode\]" js.log | wc -l grep中加入特殊字符后要转义
grep -n "18811412612" main.log 显示字符串出现的行号
grep -v 表示不包含匹配文本的所有行
grep -c "SmsAsyncSendConsumer" main.log 表示出现的次数
grep -i 忽略大小写
grep "xxx" main.log | tail -n 表示 获取最后几次匹配
grep forest f.txt cpf.txt #多文件查找
sed命令:表示插入
sed -i '1i15120033960' testdata.txt 在第一行前插入
sed -i '1a15120033960' testdata.txt 在第一行后插入
sed -n '3,5p' testdata.txt 展示文件第3到5行数据
sed '2,5d' main.log 删除
sed '3,$d' testdata.txt 删除第三行到最后一行
sed 's/jia/boyu/g' testdata.txt 表示替换 把jia替换成boyu
sort命令:
-r 反向排序
-t 指定分隔符
-k 指定以哪个区间排序
-n 按照数值比较排序
grep "AccessLogUtils.java:42" main.log | awk -F "[][]" '{print $15}'| sort | uniq -c | sort -n
注意:想用uniq计数 必须先sort排序 ,最后sort -n表示按照数值比较排序
磁盘与目录的容量
进入到目录里面,du -h 看当前目录文件夹占空间大小,du -sh可以看到所有文件总大小
du -h | sort 查看各个文件夹占磁盘大小
du . -h -d 1 看当前目录文件夹占空间大小
du -h | sort 查看各个文件夹占磁盘大小
df -h 查看磁盘剩余空间
mv a.txt b.txt 表示重命名 新名称为b.txt
wget命令可以下载文件
wget http://bjfk-rs5034.yz02:9494/rest/infra/id/card/external/enterpriselicense?token=wRi52ZF%2BNW%2BHTfSkvyCuFe5lYZqANoB3iYcS%2FFKXGnqzuXjldzlSte6FAov7%2BD5C
如果rm -rf 提示参数列表过长,是文件过多导致的
可以使用:
find /data/logs/8096/20200821115509/ -name "*手持.jpg" | xargs rm -rf
find /data/logs/8096/20200822120148/ -name '*' | zip 6yue.zip -@
sudo命令改变username:
sudo -iu web_server
ansible命令:
-i:后面跟文件名称
all: 表示匹配主机列表中的所有主机
-a:后面跟命令
ansible -i api all -a 'grep abc /data/logs/8601/main.log'
nslookup 10.106.69.77 可以根据ip找到机器名称
如果遇到没有编辑权限的文件 可以q!退出
没编辑权限的 需要sudo vim xxx进去
vim的时候按v可以多选,按esc可以退出全选状态
xargs能够捕获一个命令的输出,然后传递给另外一个命令。也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs命令
假如你有一个文件包含了很多你希望下载的 URL,你能够使用 xargs下载所有链接:
cat url-list.txt | xargs wget -c
假如要kill某些进程:
ps -ef | grep 8601 | grep -v grep | awk '{print $2}' | xargs kill -9
jps是java提供的一个显示当前所有java进程pid的命令,适合在linux/unix平台上简单察看当前java进程的一些简单情况
nohup命令:全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行
&:让命令在后台执行,终端退出后命令仍旧执行。
cat /proc/cpuinfo 查看cpu信息
cat /proc/cpuinfo | grep processor 查看有几个处理器
linux查看各个应用占内存的情况:top (输入大写M,对内存排序,输入大写P,对cpu排序)
查看内存剩余量:free -h(-h后输出的结果会友好很多)
rpc服务进程id:
ps -ef | grep xxx-sms-rpc-service
top -Hp 1195 查看某个进程的线程数量
jstack 1195可以看到某进程的所有线程状态(名称,状态,线程id等)
awk:
awk的{} 括号内表示要进行的动作
$ cat "/proc/$(ps -ef|grep smsAsyncSendConsumerBr|grep -v grep | awk '{print $2}')/environ" | tr '\0' '\n' | grep KWS
KWS_SERVICE_NAME=smsAsyncSendConsumerBr
KWS_SERVICE_CATALOG=kwaigo-br.infra.sms
KWS_SERVICE_STAGE=PROD
cat "/proc/$(ps -ef|grep smsAsyncSendConsumerBr|grep -v grep | awk '{print $2}')/environ" | tr '\0' '\n' | grep KWS
cat "/proc/$(ps -ef|grep smsAsyncSendConsumerBr|grep -v grep | awk '{print $2}')/environ" | tr '\0' '\n' | grep KWS
grep "grpc-new-mode-worker" 73102.log | awk -F "[][]" '{print $2}' | sort | uniq -c
某个供应商最后100条
grep "2020-01-20 18:" main.log | grep "SEND_SMS_TEST" | grep "DAHANTC" | awk -F "[][]" '{print $2}' | awk -F "[\"-]" '{print $3}' | tail -n100
总发送条数:
grep "2020-01-20 18:" main.log | grep "SEND_SMS_TEST" | grep "DAHANTC" | awk -F "[][]" '{print $2}' | awk -F "[\"-]" '{print $3}' | wc -l
某个供应商中间100条
grep "2020-01-20 18:" main.log | grep "SEND_SMS_TEST" | grep "DAHANTC" | awk -F "[][]" '{print $2}' | awk -F "[\"-]" '{print $3}' | sed -n '18000,18100p'
grep "SmsProviderAdapter" main.log | awk -F "[][]" '{print $8=="DAHANTC"}' | wc -l
awk ' $3>0 {print $0}' netstat.txt
awk '$3==0 && $6=="LISTEN" ' netstat.txt
grep "SmsProviderAdapter" main.log | awk '{print $15 "lines: " NR "columns: " NF}'
NR表示处理的第几行
NF表示的一共有多少列
grep "SmsProviderAdapter" main.log | awk -F ',' '{print $15}'
grep "SmsProviderAdapter" main.log | awk -F '[][]' '{print $8}'
grep "SmsProviderAdapter" main.log | awk -F '[][]' '$8=="MENGWANG" {print $2}'
sh ./sms-rpc-grep.sh +91-9319 0 03-27 | grep verify | grep "biz type:\[190\]" | awk -F '[][]' '{print $20}' | sort | uniq -c
grep verify main.log | grep "biz type:\[190\]" | awk -F '[][]' '{print $20}' | sort | uniq -c
grep "SOCIAL_UNBAN_BY_VOICE_CODE" main.log | awk -F ',' '{print $10}' | sort | uniq -c
grep "send market message using" main.log | awk -F ',' '{print $2}' | sort | uniq -c
curl:
curl -X GET \
https://sf2023.staging.kuaishou.com/rest/inner/wd/cny2023/warmup/card/clearUserAllInfo?activityId=card_l12&userId=112351111
curl -X POST \
http:/127.0.0.1:8080/rest/wd/inner/card/activity/commercial/home \
-H 'Content-Type: application/json' \
-d '{"visitorId":2196586386, "activityId":"card_t107"}'
curl -v -X GET \
http:/127.0.0.1:8080/rest/wd/inner/card/activity/commercial/cardInfo?visitorId=2196586386&activityId=card_t1&subBizId=1210
抓取一个网址的内容:curl -v www.baidu.com
curl -v 默认的是get方法,-v可以看到请求的http状态码
curl -x表示在给定的端口上使用http代理,例如:
curl -O -x bjm7-squid1.jxq:11080 https://alibaba.github.io/arthas/arthas-boot.jar
curl -O 表示要下载,等于wget
curl -X表示指定什么指令,-X后可以用get或post
-d 即data 数据
--data-binary 以二进制的方式post传输数据
curl ipinfo.io 查机器的出口ip
用一台机器连另一台:curl 机器名:port 如果返回ok则是正常的
curl -v 123.125.99.240:501 可以直接curl ip和端口看接口能否正常连接
curl -v "http://bjfk-rs11148.yz02:9239" curl机器的时候要加入.yz02
telnet也可以看机器是否连通,telnet必须加端口号
telnet bjfk-staging-d17.yz02 15500
telnet 10.28.99.143 11080
看一台机器能否连通另一个机器:ping IP地址或者ping 机器名
ping可以看到连接速度
ping www.baidu.com 可以直接ping域名
查看文件占空间大小
du -h -d 1 看当前目录文件夹占空间大小
du -lh | sort 查看各个文件夹占磁盘大小
-h表示以人们易读的方式(KB,MB,GB)显示容量大小
-d表示depth -d 1表示深度为1
hostname -i可以看ip
hostname -d可以看域名
linux的shell包括bash和zsh等,可以用 cat /etc/shells 查看自己用的是哪个shell,一般默认的是bash,bash和zsh的切换:
切换bash: chsh -s /bin/bash
切换zsh: chsh -s /bin/zsh
在配置文件方面:
bash读取的配置文件:~.bash_profile
zsh读取的配置文件:~.zshrc
mac安装java和maven需要在bash_profile(使用bash) 或者zshrc文件(使用zsh) 中配置环境变量,具体内容如下(实际配置时需要替换下maven和java版本路径等)
export M2_HOME=/Users/xxx/Downloads/apache-maven-3.9.2
export PATH="$M2_HOME/bin:$PATH"
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home
配置完后需要source ~.bash_profile或者source ~.zshrc让配置文件生效。
如果linux切换到了zsh,但是java和maven的环境变量配置在了bash_profile中,需要修改~/.zshrc文件,在文件最后加入source ~/.bash_profile。就可以每次电脑重启后自动执行配置文件,如果不修改zshrc文件,则每次重启电脑后都需要执行source ~/.bash_profile才能让java和maven的环境变量生效
proxy下载:把机器上的内容下载到本地文件夹(在本地文件夹中执行下面命令)
proxychains4 rsync -arz web_server@zt-id-card-sc1.idcyz.hb1.com:/data/logs/8096/zhouwen_0618_pic.zip ~/Desktop
第一个参数是机器的地址注意要::,必须把文件传到files目录下才能下载, 后面是本地文件夹的地址
如果从线上机器下载大文件,需要先传到中控机上如web_server@td-dz-vm30,然后从中控机proxychains4下载,不能从线上机器直接sz -e(网速较慢)
上传:
proxychains4 rsync /Users/xxx/Desktop/frontImg.jpeg web_server@bjfk-ls325.yz02::files/yy
proxychains4 rsync /Users/xxx/Desktop/backImg.jpeg web_server@bjfk-ls325.yz02::files/yy
scp传送文件:
可以把本机器的文件传给web_server@webservice-xm-c233.idczw.hb1.kwaidc.com
scp /data/logs/zt-captcha-log-consumer/arthas-bin.zip web_server@webservice-xm-c233.idczw.hb1.kwaidc.com:/data/logs/
scp如果想从a -> b,需要在a机器上执行scp命令
scp一般利用ssh传输文件
ssh免密操作:假设本地机器为local,远程服务器为remote,用户均为user。
1、user在local机器上通过ssh-keygen生成一个非对称密钥对(假设公钥key.pub,私钥为key.pri)
2、user通过ssh命令登录user@remote(该阶段需要输入密码),并将key.pub拷贝到remote机器上的/home/user/.ssh/authorized_keys文件中(添加一行即可);该步也可通过ssh-copy-id命令直接操作
3、当user再次从local执行ssh remote的时候,不需要输入任何密码即可登录
从压缩文件中grep日志
zcat xxx.log.gz | grep "aaa"
文件复制到其他位置:
进到文件目录下,cp source文件 target目录
cp xxx.log.gz /home/worker/
代码下载到个人机器
执行cat ~/.ssh/id_rsa.pub 获取私钥。然后把在git中找到user settings的SSH KEYS选项,把私钥贴进去
查看指定端口的连接情况
lsof -i:xxx(填目标端口)
ssh命令参数:
-i: 指定身份验证文件,用于身份验证
ssh -i ~/.ssh/id_rsa_nopwdjumper jiaboyu02@jumper.sankuai.com
-L: 将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个socket侦听port端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和host的hostport端口建立连接. 可以在配置文件中指定端口的转发.
ssh -L 8082:10.44.88.132:8412 jiaboyu02@jumper.sankuai.com
意味着把10.44.88.132:8412端口的请求转发到本地8082端口
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix