《常用shell命令及测试判断语句总结》:grep、sed、awk、tr、find、seq、xarg的用法;及条件测试,与if、for语句。
Chrome
有些页面滚动非常慢:由于chrome的平滑滚动导致的,只要在chrome:flags
里将Smooth Scrolling改为disable即可。
Linux系统
- 文件夹 打开 shell:
Ctrl+Alt+T
- shell 打开 文件夹:
nautilus .
配置与设定
提示符PS1
PS1 是一个环境变量,用于定义命令行提示符的外观。PS1 代表 “Prompt String 1”,是最常用的提示符设置。
修改提示符:
# echo "PS1='\[\e[1;35m\][\u@\h \W]\\$\[\e[0m\] '" >> .bashrc
修改用户主目录下的: .bashrc,
完成后生效:source .bashrc
PS1 可以包含以下特殊字符来显示不同的信息:
- \u:当前用户名
- \h:主机名(不包括域名)
- \H:主机名(包括域名)
- \w:当前工作目录的完整路径
- \W:当前工作目录的最后一部分
- \d:当前日期,格式为 “周几 月份 日”
- \t:当前时间(24小时制),格式为 “HH:MM:SS”
- \T:当前时间(12小时制),格式为 “HH:MM:SS”(不显示秒)
- @:当前时间,格式为 “12:00 AM”
- $:如果是普通用户则显示 $,如果是根用户则显示 #
基本命令
查看进程运行路径:
ps -ef | grep [proc]
ll /proc/[ProcID]/exe
软连接
ln -s /existed/file /link/file
mount覆盖
mount --bind /source/dir /dest/dir
查看Linux版本
> uname -a # 查看Linux内核版本
> cat /proc/version # 查看Linux内核版本和gcc版本
> cat /etc/redhat-release # 查看centOS的版本
> cat /etc/os-release # 查看操作详细信息
> lsb_release #查看特定版本信息
通过脚本改变当前目录
默认情况下,脚本执行时会开启一个子进程;改变的目录不会影响父进程,因此执行完后,当前目录并没有改变;若要改变,则需要使用source
或点号.
(表示在当前shell中执行)来执行:
## chPath.sh
# cd /mnt/d/dest/dir
> . ./chPath.sh # 使用点号执行当前目录下脚本
> source ./chPath.sh
显示文件内容:
tail -100f <file>
:显示文件最后100行内容,并不断刷新(只要文件更新就显示最新的内容)。
磁盘管理命令
磁盘挂载查看《mount与nfs挂载简介》
df -hT [path]:列出各分区(或指定目录)大小、使用情况与挂载系统类型;
# 磁盘使用空间
du -h --max-depth=1 [path]:列出指定目录(默认是当前目录)下文件夹大小(已使用空间);
du -s -h /* | sort -nr:查询目录占用空间
# 磁盘管理
lsblk:查看磁盘(包括未挂载的)
fdisk -l:查看分区情况
# 分区
fdisk /dev/sdb:分区n创建,最后w写入
mkfs.xfs /dev/sdb1:格式,完成后即可挂载
mount /dev/sdb1 /data
grep
grep方便文本查找:
- -r :递归查找
- -n :显示行号
- -R :查找所有文件包含子目录(会递归进软连接中)
- -i :忽略大小写
# 通过-A可显示匹配行及后续指定行数,-B前面指定行数,-C同时显示前后指定行数
docker inspect {docker-id} | grep Binds -A 10 # 显示docker绑定目录
# 查找文件
# grep -n 字符串 文件名
# grep -rn 字符串 * # 查找当前目录及子目录下文件
grep -n docker run.sh # 搜索run脚本中docker,并显示对应函数
# 查看当前路径及子目录下html中包含vip.com的文件:
grep -R --include=*.html vip.com ./
ls显示目录
ls列出目录/文件的内容ls [选项] [目录或是文件]
,常用选项:
- a:显示所有子目录与文件,包括隐藏文件;
- A:显示所有子目录与文件,包括隐藏文件,但不列出
.
和..
; - F:目录名后面添加
/
标记(如tmp/ test.sh
); - l:以长格式来显示文件的详细信息;
- L:指定的名称为一个符号链接文件,则显示链接所指向的文件;
- R:递归显示各个子目录中的文件;
- t:显示时按修改时间(最近优先)而不是按名字排序;
- u:显示时按文件上次存取的时间(最近优先)而不是按名字排序;
dl <dir>
:显示目录自身的详情(若没有d,则显示其子目录与文件的详情);
(排除指定文件)删除/复制
除指定文件外,删除所有文件:
# 删除当前目录下,除modules外的所有文件/文件夹
find ./ -path ./modules -prune -o -maxdepth 1 -mindepth 1 -print | xargs rm -rf
# 为所有子目录添加权限
find ./ -type d -exec chmod a+rx {} \;
# 通过grep -v实现
ls -A | grep -v 'mount' | xargs rm -rf
除指定文件外,复制所有文件:
# grep中-w为精确匹配(否则会匹配所有包含mount的文件名);-v为排除(取反)
# 复制时,必须在原目录,且ls等命令通过反引号包含起来
cp `ls -A | grep -wv 'mount'` ../test/ -rf
复制隐藏文件
默认情况下,cp不会复制隐藏文件,可通过最后加点号复制所有文件:
# 不会复制隐藏文件(以点号开始的)
cp -r /aaa/* /bbb/
# 会把aaa下所有文件偶复制bbb目录下
cp -arf /aaa/. /bbb/
后台运行程序
要保证终端退出时,Linux脚本继续执行,需要在后台执行(守护进程,终端退出不影响):
> nohup ./cliTest > nohup.out & 2>&1
后台启动Python脚本
以在后台运行python脚本(需添加参数-u,禁用缓冲区)为例:
cd test
nohup python3 -u TestMain.py > test.log 2>&1 &
nohup
:保证程序不被挂起;python3
:确保执行python代码;-u
:表示不启用缓存,实时打印输出信息到日志文件(保证tail查看日志时能实时刷新);TestMain.py
:运行的程序;>
:将打印信息输出到日志文件;test.out
:输出的日志文件;2>&1
:将标准错误输出转变为标准输出,可以将错误信息也输出到日志文件中,0-> stdin, 1->stdout, 2->stderr;&
:最后一个&表示后台运行程序。
查找程序ID并kill
通过ps+grep+awk获取程序ID,然后kill掉:
ID=`ps -ef | grep TestMain.py | grep -v grep | awk '{print $2}'`
echo "IDs: "$ID
for id in $ID
do
kill $id
echo "kill $id"
sleep 5
done
Vim
范围符号使用[start]:[end]
标识:
.
: 当前行。$
: 最后一行。%
: 所有行,等价与1,$
。
# 删除所有行
:% d
#删除当前行到文件尾
:.,$ d
统计字符串查询次数
命令::%s/pattern//gn
如,在vim查找load次数::%s/load//gn
%
:指明操作区间,%表示全文本;可以使用1,$或者行区间代替s
:substitute,表示替换- `pattern - 要查找的字符串
//
:两斜杠间为替代,两个斜杠中间没有任何字符表示无替代文本g
:替换行中遇到的所有匹配字符串(否则,只替换一行中遇到的首个匹配字符串);n
:报告查找到匹配字符串数量,并不实际替换(这就是,为什么//之间可以添加任意字符的原因)。
示例:
:k,ms/pattern//gn
:统计k行到m行中pattern出现的次数;cat file|greg –i pattern |wc –l
:统计pattern在file中出现的次数(行数)
SSH
登录到指定目录(tts用户):
ssh -t tts@192.168.1.10 'cd /home/tts/test && exec bash -l'
登录并切换到root:
ssh -t tts@192.168.1.10 'cd /home/tts/test; sudo su; exec bash -l'
使用sshpass可在ssh命令行中携带口令(一般不推荐):
sshpass -p xxx ssh user@192.168.11.11
scp & rsync
rsync可本地与远程复制文件:
rsync -avrl --progress [src] [dest]
# apt-get install sshpass
nohup rsync -avrl --progress --rsh="/usr/bin/sshpass -p passwd ssh -o StrictHostKeyChecking=no -l username" ./upload user@192.168.1.10:/home/upload &
scp [option] file_source file_target
# 从本地复制到远程
scp local_file {user}@{hosts-ip}:remote_path
# 从远程复制到本地
scp {user}@{hosts-ip}:remote_file local_path
参数说明:
-p
:保留原文件的修改时间,访问时间和访问权限。-q
:不显示传输进度条。-r
:递归复制整个目录。-v
:详细方式显示输出。-P port
:注意是大写的P, port是指定数据传输用到的端口号。
SSH经常断开连接解决
在profile中添加export TMOUT=0
[root@Host ~]# vi /etc/profile
export TMOUT=0
[root@Host ~]# source /etc/profile
SSH免密登录
修改主机名:
hostnamectl set-hostname {host-name}
Linux之间
本地产生公私钥对,然后把公钥放到要远程的机器上:
ssh-keygen
:一路回车,产生密钥对;ssh-copy-id -i .ssh/id_rsa.pub {user}@{remote-ip}
:将公钥写到远程机器的~/ .ssh/authorized_keys
文件中;ssh {user}@{remote-ip}
:直接登录到远程机器;
windows登录Linux(vscode)
要通过私钥登录,需要先生成私钥(以Windows远程登录Linux为例):
- 生成私钥:
- 打开cmd,执行ssh-keygen;
- 全部回车;
- 会在‘用户’目录下的.ssh目录下生成id_rsa与id_rsa.pub文件
- 上传公钥:
- 复制id_rsa.pub到远端Linux机器的~/.ssh下;
- 把公钥加入authorized_keys中:
cat id_rsa.pub >> authorized_keys
shell命令
《常用shell命令及测试判断语句总结》:grep、sed、awk、tr、find、seq、xarg的用法;及条件测试,与if、for语句。
一行命令内执行复杂语句(检测文件是否存在,存在后执行):
bash -c "while true; do if [ -f \"./test.sh\" ]; then break; fi ; echo wait; sleep 10;done ; bash \"./test.sh\";"
设定变量与执行命令
设定、取消环境变量:
# 设定
export EXP_tmp=t1
# 显示
printenv EXP_tmp
echo $EXP_tmp
# 删除
unset EXP_tmp
执行命令前设定变量:
# 执行命令前设定,执行完成后变量有效(已成为环境变量)
export EXP_ONE=e1 EXP_TWO=e2 && bash test.sh
# 设定变量,只在当前命令中有效,执行完成后自动失效
EXP_ONE=e1 EXP_TWO=e2 bash test.sh
打包与解压
同时解压当前目录下多个文件:
ls *.tar.gz | xargs -n1 tar -xzvf
打包(压缩)文件:
tar zcvf FileName.tar.gz DirName
解压文件:
tar zxvf FileName.tar.gz
打包时,不包含路径(通过-C指定要打包文件所在路径,然后用.
则打包后就不在包含前面的路径了):
tar czvf test.tar.gz -C publish/test/ .
zip打包时,直接进入打包目录即可(tar时不可以,会把自身.tar.gz作为一个空文件打入包中)
cd publish/test
zip -r test.zip *
拆分文件
通过split可拆分文件为多个split [选项] {file} [前缀]
:
- -b:设置每个分割包的大小,单位可以是(K、M、G);
- -d:指定后缀为数字(默认是字母);
- -a:设定后缀序列的长度(默认值是2);
# 拆分为每个包1.5G,格式为(outfile.tar.gz.0, outfile.tar.gz.1 。。。)
split -b 1500M -d -a 1 test-file.tar.gz outfile.tar.gz.
# 或者打包拆分一起做
tar czvf test-file.tar.gz test-files | split -b 2600M -d -a 1 - outfile.tar.gz.
解压拆分的包:
cat outfile.tar.gz.* | tar xzvf -
# 单纯合并拆分的包
cat outfile.tar.gz.* > outfile.tar.gz
wc
wc统计文件里面有多少单词、多少行、多少字符:
wc [-lwm]选项与参数
-c
:统计字节数。-l
:统计行数。-m
:统计字符数。这个标志不能与 -c 标志一起使用。-w
:统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。-L
:打印最长行的长度。
选项组合使用时,输出列的顺序不受选项的顺序影响,总是按下述顺序显示:
行数、字数、字节数、文件名
例子:
ls -l | wc -l
#当前目录下的文件数ps -ef | grep procName | wc -l
# 进程数量wc -l $(find -name "*.sh")
# .sh文件的行数,及总行数wc -l /etc/passwd
#统计行数
sort
sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件]
,常用选项说明:
- -b:忽略每行前面开始的空格字符(空格数量不固定时,非常有用;"-n"选项隐含该选项);
- -c:检查文件是否已经按照顺序排序,如未排序,会提示从哪一行开始乱序;
- -C:类似于"-c",只不过未排序输出1;
- -d:只处理英文字母、数字及空格,忽略其他的字符;
- -f:将小写字母视为大写字母;
- -k:指定排序的列(从1开始计数);
- -n:依照数值的大小排序(默认是按字符);
- -o<输出文件>:将排序后的结果存入指定的文件
- -r:降序
- -u:忽略相同行
- -t<分隔字符>:指定分隔符(默认空白字符;若是转义字符,如tab,则使用
-t$'\t
);
# 显示队列最长的5个(队列以tab分割:第一列为队列名,第二列为数量)
./rabbitmqctl list_queues | sort -t$'\t' -n -r -k 2 | head -n 5
netstat
查看端口netstat
netstat -anp # 查看连接,并显示端口、进程信息
netstat -antp # 查看tcp连接,并显示端口、进程信息
- -t (tcp)仅显示tcp相关
- -u (udp)仅显示udp相关
- -l 仅显示侦听端口
- -n 显示数字IP地址(非域名等)
- -p 显示相关链接的程序名
lsof
lsof(list open files):列出当前打开文件
lsof -i:<port> #查看指定端口
lsof -i -n # 查看连接
lsof -i -p [pid] #查看某个进程的
修改命令提示符
vim ~/.bashrc # 修改PS1对应的内容
source ~/.bashrc
Windows
Windows使用:
查看端口netstat
netstat -ano | findstr [port]
进程操作task
tasklist | findstr <PID> # 查看指定PID的进程
taskkill /f /t /PID <PID> # 杀死指定进程(根据PID)
taskkill /f /t /IM <myprog.exe> # 杀死指定进程(根据程序名)
- /PID:processid,进程ID
- /IM:imagname,进程映像名称
- /T:终止指定进程和由他启动的子进程
- /F:强制终止
环境变量
环境变量的设置和修改只会在当前窗口下有效,设置和修改只是临时缓存,一旦关闭命令窗口,环境变量就会失效。
如果要设置真实的环境变量,还是要经过去我的电脑->属性->更改设置->高级->环境变量,添加环境变量。
Powershell中设定:
#查看所有环境变量
ls env:
#查看单个环境变量(使用‘$env’)
$env:NODE_ENV
#添加/更新环境变量
$env:NODE_ENV=development
#删除环境变量
del evn:NODE_ENV
cmd中设定:
#查看所有环境变量
set
#查看单个环境变量
set NODE_ENV
#添加/更新环境变量
set NODE_ENV=development
#删除环境变量
set NODE_ENV=
Powershell
修改PS的提示符
- 修改文件
%UserProfile%\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
(若不存在则创建),添加:Function Prompt { "$ $( ( get-item $pwd ).Name )\>" }
- 然后重启
- 若提示无权限,则在PS中执行
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
后台启动java程序
@echo To stop MyService
wmic process where "commandline like 'javaw -jar kpsoft.MyService-%%.jar' " terminate
@timeout /T 3
@echo To start MyService
start javaw -jar kpsoft.MyService-1.0-SNAPSHOT.jar
@echo MyService started
@timeout /T 2
windows注册表修改
右键菜单关联程序
以在右键菜单中添加notepad++为例:
- 在HKEY_CLASSES_ROOT*\shell目录点击右键。新建–>项,命名为 Notepad++
- 修改默认项的数据为"Edit With Notepad++", 即在右键中显示的名称
- 在Notepad++上右键新建字符串,名称为"Icon"值为notepad++.exe的路径地址,并在地址后添加",0",即(D:\Programme\notepad++7.9\notepad++.exe,0)
- 在Notepad++上新建 Command 子项,编辑右侧默认项的值为notepad++.exe的路径,并且后面添加" %1",即(D:\Programme\notepad++7.9\notepad++.exe %1)
软件
IDEA/Goland快捷键
快速搜索类: Ctrl+N
快速搜索文件: Ctrl+Shift+N
快速搜索函数: Ctrl+Alt+Shift+N
快速搜索字符串: Ctrl+Shift+F
自动定位到标红位置:F2、或Shift+F2
添加标签:F11
重写父类函数(override):Ctrl+O
增加try-catch:Ctrl+Alt+T
调试:
F8 单步调试,不进入函数内部
F7 单步调试,进入函数内部
Shift+F8 跳出函数
F9 继续执行,进入下一个断点或执行完程序
Alt+F9 运行到断点
Alt+F8 执行表达式查看结果
Ctrl+F8 设置/取消当前行断点
Ctrl+Shift+F8 查看断点
重命名: Shift+F6
重构函数: Ctrl+F6
格式化代码: Ctrl+Alt+L
弹出重构菜单: Ctrl+Alt+Shift+T
跳转到定义处: Ctrl+B/Ctrl+Click
跳转到方法实现处: Ctrl+Alt+B/Click
删除行: Ctrl+X,
复制行(复制当前行到下一行): Ctrl+D
导入包,自动修正: Ctrl+Enter
移除无用import: Ctrl+alt+O
查看文件、方法结构图、类继承机构图: Ctrl+F12
查看maven依赖,类图: Ctrl+shift+Alt+U
查看方法调用层次: Ctrl+Alt+H
VSCODE快捷键
Ctrl + `
打开或关闭终端;使用F1和Ctrl+Shift+P打开命令面板;
Ctrl+P快速打开,输入不同字符,进行不同操作:
?
:列出当前可执行的动作;!
:显示Errors或Warnings;直接快捷键Ctrl+Shift+M;:
:跳转到指定行;直接快捷键Ctrl+G;@
:根据分类跳转的Symbol;#
:根据名字查找Symbol;>
:命令面板
常用快捷键
- 格式化代码:Alt + Shift + F
- 单行注释: Ctrl + /
- 多行注释:Shift + Alt + A (
/* */
) - 跳到指定行: Ctrl + G,然后输入行号
- 查找文件: Ctrl + Shift + F
- Ctrl+[:向左(减少)缩进;
- Ctrl+]:向右(增加)缩进;
行操作:
- 剪切当前行: Ctrl + X
- 插入一行:Ctrl + Enter(无论光标在何位置,插入一行并设光标到新行行首)下方插入;Ctrl + Shift + Enter上方插入;
- 复制一行:Alt + Shift + ↓下方;Alt + Shift + ↑上方;
- 移动一行:Alt + ↓下方;Alt + ↑上方;
词操作:
- 选中一个词:Ctrl + D
搜索替换:
- 查找:Ctrl + F
- 替换:Ctrl + H
- 项目内查找:Ctrl + Shift + F
书签
要使用书签功能,需要先安装Bookmarks插件:
- 创建或取消:Ctrl + Alt + K
- 下一个书签:Ctrl + Alt + L
- 上一个书签:Ctrl + Alt + J
列出所有书签:Ctrl + Shift + P打开控制面板,然后输入bookmarks
,选择对应命令即可。
代码折叠
代码折叠都是通过组合键实现的:
- 折叠所有区域(整个文件)代码:先Ctrl + K,再Ctrl + 0(数字0);
- 展开所有区域(整个文件)折叠:先Ctrl + K,再Ctrl + J;
- 切换当前区域折叠状态:先Ctrl + K,再Ctrl + L;
- Ctrl+Shift+[:折叠当前区域(代码块);
- Ctrl+Shift+]:展开当前区域(代码块);
- Ctrl+K Ctrl+[:折叠当前区域(代码块)及子区域;
- Ctrl+K Ctrl+]:展开当前区域(代码块)及子区域;
Tab按键
tab按键无效(不产生缩进,而是跳到其他位置):按Ctrl+M
(Toggle Tab moves focus),会切回正常模式;
在markdown中,tab缩进混乱(有些4、有些8);统一转为空格即可:
- 按
ctrl+shift+p
- 在框中输入
convert Indentation to Spaces
,统一转换为空格