💧Shell-Command-速查表
一些常用终端命令
通用
指令 | 作用 |
---|---|
cd path / cd .. / cd / / cd ~ | 进入 指定 / 上层 / 根 / home 目录 |
Ctrl + L | 清屏 |
exit | 退出 |
ping | 测试网络通断状态 |
Ctrl + C | 停止当前任务 |
exit | 停止任务或终端 |
mkdir | 新建文件夹 |
cp(xcopy)/mv/rm | 文件(夹)复制、移动与删除 |
curl + URL | 访问 URL(可加参数,具体百度) |
pwd | 显示当前全路径 |
dir/ls | 列出当前目录(样式不同) |
cat | (按参数格式)输出文件所有内容 |
clear | 清屏 |
echo | 回显,常用作文本输出 |
shutdown -h now / reboot | 关机 / 重启 |
ls | grep abc | 过滤 ls 的输出,只显示含"abc"的内容 |
ls | tee [-a] t.log | 显示 ls 输出同时[追加]输出到 t.log 里 |
mktemp | 临时创建一个 temp 文件 |
zip "A.zip" "folder_A/**" "folder_B/**" | 压缩多个文件夹或文件到 zip 文件 |
md5sum/sha256sum xxx | 计算文件 hash |
scp -r -i ~/.ssh/liuwei_rsa 1.txt [email protected]:/home/project-1/ | 远程文件复制 |
date +%Y%m%d-%H%M%S.%N | 20221022-153014.813488400 |
tar -cf a.tar a.txt b.txt / tar -xf a.tar | 打包 / 解压 |
文件末尾追加命令
指令 | 作用 |
---|---|
echo 'add content'>/home/data/test.sh | 覆盖原文件内容 |
echo 'add content'>>/home/data/test.sh | 在末尾追加 |
date +"%Y-%m-%d %H:%M:%S.%N" >> keepchange.txt | 这种写法也可以,就是把前面当成字符串输入文件 |
输出重定向
指令 | 作用 |
---|---|
ls > ls.txt | 把 ls 输出内容输出到 ls.txt |
>/dev/null | 把标准输出重定向到黑洞,相当于(1>/dev/null) 标准输入 0,标准输出 1,标准错误 2 |
>/dev/null 2>&1 | 把标准错误重定向到标准输出,也就是这俩都进了黑洞 |
2>&1 >/dev/null | 把标准错误重定向到标准输出(屏幕),标准输出进黑洞 |
启动程序
同步(Synchronous)和异步(Asynchronous) 同步,就是调用某个东西时,调用方得等待这个调用返回结果才能继续往后执行。异步,和同步相反 调用方不会理解得到结果,而是在调用发出后调用者可用继续执行后续操作,被调用者通过状体来通知调用者,或者通过回掉函数来处理这个调用
- start 异步
- call 同步
清垃圾(?
写脚本时,如果遇到两种情况:
要删除某路径下所有东西
路径是变量
那就有可能就变成删库跑路了…
比如
set PATH=%1
rm -rf %PATH%/*PATH 靠调用脚本时传入的参数来定义,没传参数的话就 undefined,以至于下一行变成大名鼎鼎的
rm -rf /*
与或-管道运算符
command1 & command2 & command3: 不论成败都会执行
command1 && command2 && command3: 左边全都执行成功/返回 0 才会执行右边的命令
command1 || command2 || command2: 左边全都执行失败/返回 1 才会执行右边的命令
command1 | command2: 把左边的命令的输出结果作为右边的命令的输入,例如 ps | grep win
获取文件名
可以用 basename, 用法 [1]
name=`basename -s .c *.c`
比如想获取下面两个文件的名字 (排除后缀)
dair_v2x_i_infos_temporal_train.pkl
dair_v2x_i_infos_temporal_val.pklbasename -s .pkl *.pkl
结果:
dair_v2x_i_infos_temporal_train
dair_v2x_i_infos_temporal_val
Linux
指令 | 作用 |
---|---|
su root | 获取最高权限(需要输入 root 密码) |
ifconfig | 查看网络配置 |
dhclient | DHCP 重新配置 IP |
./xxx.sh start/restart/xxx | 启动/重启 shell 脚本 |
nohup xxx.sh & | 不挂起执行 xxx (退出终端不影响程序运行),需要 ps/kill 杀死进程 |
tail -n 20 README.md | 输出 READMD 最后 20 行内容(默认是 10 行) |
tail -f README.md | 输出 READMD 追加的更新内容 |
systemctl start/enable/status xxx.service | xxx 服务-开启/开机启动/状态 |
touch a.txt | 创建 a.txt 文件 |
TOPIC=1234 ./run | 带着环境变量 TOPIC 执行 run 程序 |
chmod u+x ./run | 给 run 赋予执行权限 |
/etc/init.d/bt default | 查看宝塔面板入口 |
ln -s A B | 创建 A 的符号链接,名为 B [3] |
rm/unlink xxx | 删除虚拟链接 [4] |
查杀进程
指令 | 作用 |
---|---|
ps -ef/aux | 显示进程(注意多个进程用’,'隔开而非空格) |
kill -9 pid | 杀死进程 |
lsof -i:8080 / -i@12:34:56:78 | Linux 中一切皆文件,此命令可以显示指定文件信息 |
设置代理
export http_proxy=http://192.168.131.1:7890 |
用户管理
切换用户
命令是 su xxx
[2]
- 切换到每个用户的密码不一定一样 (主要看设置的是否一样), 为了防止乱切乱改, 每个账户设置独立密码
- root 用户下无需密码切换到任何用户
- su 与 sudo 所需密码并不是同一个, su 要的是 root 密码, sudo 要的是当前用户密码, sudo 后默认 15 分钟内不需要再次输密码
设置与解锁用户密码
passwd xxx
设置 root 账户密码: sudo passwd root
, 之后 su root 就需要密码验证了
有个误区, 之前我误认为每个用户切到 root 账户的密码是独立的, 所以改了服务器的 root 密码… 差点出幺蛾子
解锁 xxx 用户密码: sudo passwd --unlock xxx
删除用户
userdel -r xxx |
supervisor
apt-get install supervisor |
在 supervisorctl status 有时会出现
error: <class ‘xmlrpclib.Fault’>, <Fault 6: ‘SHUTDOWN_STATE’>: file: /usr/lib/python2.7/xmlrpclib.py line: 800
可以执行
/etc/init.d/supervisor stop && /etc/init.d/supervisor start
[12]但需要注意, 在 supervisorctl reload 执行开始几秒内程序还没重启完确实会出现这种报错, 并非哪有异常
环境变量
PATH=$GOROOT/bin:$PATH
冒号起分隔路径作用, linux 中一个环境变量可对应多个目录, 如
export LD_LIBRARY_PATH=/mnt:/usr/local/3rdlib:$LD_LIBRARY_PATH
意思就是在已有的 LD_LIBRARY_PATH 这个变量基础上再加目录
条件分支判断
linux 下 shell 中 if 的“-e,-d,-f”是什么意思_高晓伟_Steven 的博客-CSDN 博客_linux -d
windows
指令 | 作用 |
---|---|
md | 创建目录,同 mkdir |
rd | 删除目录,同 rm |
del | 删除文件 |
cls | 清屏,同 clear |
ipconfig | 查看网络配置 |
start + exe | 打开应用程序 |
start/explore + URL/HTML文件 | 用默认浏览器打开 |
microsoft-edge:URL | 用 edge 打开 URL |
xxx /? | xxx 的帮助 |
mklink A B | 创建 B 的硬链接(仅限文件), 名为 A |
mklink /d A B | 创建 B 的符号链接, 名为 A(scoop-current) |
mklink /j A B | 创建 B 的符号链接, 名为 A(快捷方式) |
ren a.jpg b.png | 重命名 a -> b |
powershell
Cannot convert the “xxx” value of type “System.String” to type “System.Security.SecureString”.
需要强制转为 securestring [14]
# Set-OpenAIKey "xxx" |
cli-tools
FFmpeg
批量调整音频音量
网上找了下相关软件/web tools, 没有特别符合要求的, 然后突然想到可以用 AI:
我想通过 FFmpeg 批量降低一些音频文件的音量 (格式包括 mp3 和 wav), 请写一下 shell 程序
定义一个函数,接受一个音频文件名和一个音量调整参数(分贝值) |
!/bin/bash |
报错
用的第三方 FFmpeg, 换成官方的就好了
nb_samples (47) != frame_size (0)
Git
指令 | 作用 |
---|---|
git remote add origin 你的远程库地址 | 添加远程 |
git add . | 加入暂存区 |
git commit -m "提交消息,可添加emoji😝" | 提交 |
git push [origin(远程名字,默认是origin) master(分支名字)] | 推送 |
git checkout --orphan 新分支名 | 创建一个新分支 |
git submodule update --init --recursive && git pull --recurse-submodules | 拉取 submodules |
Docker
指令 | 作用 |
---|---|
docker ps [-a] | 列出[所有]容器 |
docker ps --filter "abcd / status=running | 筛选出含"abcd"/状态为 running 的容器 |
docker kill xxx | 关闭 xxx 容器 |
docker list| grep abc | 筛选 docker list 命令中含有 abc 字符串的结果集 |
Vim
指令 | 作用 |
---|---|
:q! | 如何获得一个随机字符串? >让新手退出 vim |
:wq | write & quit |
dd | 删除行 |
dG | delete Global |
fzf
与 grep 相似,不同点:
grep 是查找写死的东西,查找范围固定
fzf 可动态查找用户输入的内容,并且范围大
指令 | 作用 |
---|---|
fzf | 模糊查找 |
ls | fzf | 在 ls 的输出内容中查找 |
tldr
命令帮助文档,优化版的 man,有个类似的工具 cheat.sh
,一番角逐之下我还是用的 tldr
指令 |
---|
tldr cd |
tldr java |
pandoc
word2markdown
pandoc -f docx -t markdown --extract-media ./images -o 1.md 1.docx |
各种问题
换行符导致报错
syntax error near unexpected token `xxx
Linux 并不兼容 windows 下的换行符, 可以通过 vscode 右下角转为 LF [5]
不同终端差异
cmd 不支持/
作为路径, PowerShell 支持
安装 git-all + pwsh 可以使用绝大多数 linux 的命令
借物表
[1]: Linux 技巧:介绍从目录路径获取文件名和目录前缀的方法
[5]: syntax error near unexpected token `原因及解决办法 - 走看看
[8]: ps -ef 和 ps -aux 和 ps aux | Linux kill 命令 | Linux 命令神器:lsof
[9]: Windows vs linux-查看文件 MD5 值等_51CTO 博客_windows 查看文件 md5 值
[10]: Linux nohup 命令 | Linux tail 命令 | 基于 VSCode 和 CMake 进行 C/C++开发「第一讲」linux 系统介绍
[11]: 批处理定义子程序 | 批处理命令之 Start 的详细用法 | bat 与 shell 互转 Appendix L. Converting DOS Batch Files to Shell Scripts
[12]: Running supervisorctl restart <name>
causes xmlrpclib.Fault · Issue #48 · Supervisor/supervisor
[13]: Win10 mklink 命令怎么用,mklink 命令使用教程
[14]: Why can't powershell convert my password from system.string to system.security.securestring?
[15]: SCP Permission denied (publickey). on EC2 only when using -r flag on directories