linux常见终端命令和一些小问题的解决
此文章为linux常见终端命令汇总和一些小问题的解决方法,会不定期更新。
[常见指令]
1. 误按 Ctrl+s 锁住终端。
ubuntu16命令行误按 Ctrl + s 导致终端锁定,Ctrl + q可以解锁。 Ctrl + c 也可以解锁终端锁定。Ctrl + q还可以解锁 vim Ctrl + s 锁定的情况,Ctrl + c不可以。
2. 查看当前目录下所有文件总大小:
du -sh (-sh中的h为自动选择单位K/M/G,想要查看精确大小只需 -s)
3. 查看当前目录下文件数量:
ls |wc -w
4. 查看系统实时资源使用情况:
top
5. 查看CPU个数:
grep 'physical id' /proc/cpuinfo | sort -u
6. 查看CPU核心数:
grep 'core id' /proc/cpuinfo | sort -u | wc -l
7. 查看CPU线程数:
grep 'processor' /proc/cpuinfo | sort -u | wc -l
8. 查看当前登录用户名
whoami
可以用在shell脚本判断当前运行者的身份,以找到用户目录。root-/root; user-/home/username/
9. 树莓派查看系统版本
lsb_release -a
Codename对应的一项就是系统版本
10. zip 文件解压
unzip 压缩包.zip -d 解压路径
11. ubuntu终端粘贴复制
常用的Ctrl+c 和 Ctrl+v 命令在ubuntu终端无法使用,可以使用鼠标右键进行粘贴复制,也可以使用快捷键Ctrl+shift+c 复制,Ctrl+shift+v 粘贴。
12. 时间戳相关
转换指定日期为Unix时间戳:
date -d '2020-12-30 10:23' +%s (-> 1609294980)
Unix时间戳转换为日期时间:
date -d @1609294980 (->2020年 12月 30日 星期三 10:23:00 CST)
指定格式转换:
date -d @1609294980 +"%Y-%m-%d %H:%M:%S" (->2020-12-30 10:23:00)
来源:https://www.cnblogs.com/openstack-elk/p/6825888.html
补充:
date 以固定格式输出
date "+%Y-%m-%d %H:%M:%S" (->2022-04-14 09:49:51)
13. 快速清空一个文件
echo -n > 文件名
vim快速清空一个文件:gg(跳转到文件首)+dG(删除光标所在行以及其下所有行的内容,d删除+G文件尾)
14. 向文件中写内容
覆盖:
echo "内容" > 文件名
追加并换行:
echo "内容" >> 文件名
15. iptables
iptables管理规则时需要先使用 -t 选择表(table),如 -t nat;
再选择链(chain) 如-A POSTROUTING选择源地址转换;
最后选择如对象 -j SNAT
POSTROUTING:源地址转换(内网地址转公网地址->发往公网);(和SNAT搭配)
PREROUTING: 目的地址转换(公网地址转内网地址->来自公网);(和DNAT搭配)
policy规则: ACCEPT(接收), REJECT(拒绝), DROP(丢弃)
如果出现错误,可以通过命令dmesg查看具体信息。
详细介绍:iptables入门指南
16. 管道符 "|"
command1|command2
上一条命令的输出作为下一条命令的参数
17. "&"和"&&"
"&" 放在指令的后面,表示让指令后台运行;
"&&" 放在两条指令中间,如 command1 && command2, 实现逻辑与的功能,只有command1执行成功时,才会继续去执行command,类似于C语言或Java中 的逻辑与。
shell执行某个命令时,会返回一个返回值,保存在变量 $? 中,当 $? == 0 时,表示命令执行成功,$? 不为 0时,表示命令执行失败,这个就是上述command1
执行传递的参数,在shell脚本中也可以单独拿出来放在一个语句后面判断命令是否执行成功。
18. "||"
command1 || command2 || command3
逻辑或,只要有一个命令返回真,后面的命令就不再执行
[16, 17, 18来源: https://www.jb51.net/article/136261.htm]
19. 路由跟踪
traceroute www.baidu.com
[参考:https://blog.csdn.net/sinat_33442459/article/details/75126149]
(在windows 终端上,使用 tracert 指令)
20. 小火车
apt install sl
sl
运行sl, 可以在屏幕上跑过一列火车~
21. 环境变量
(1). 指定二进制文件依赖库的路径:
export $LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH
(这句话的意思是把当前路径下的lib文件夹添加到软件依赖库的最前面)
也可以新建一个文件,如ld.txt,内容写作:
export $LD_LIBRAYR_PATH=./lib:$LD_LIBRARY_PATH
运行时使用:source ld.txt
注意:(1)中设置为临时环境变量,仅对当前终端有效,退出终端时会清空此临时环境变量
(2). 查看当前环境变量(以LD_LIBRARY_PATH为例)
echo $LD_LIBRARY_PATH
(3). 重置当前环境变量(以LD_LIBRARY_PATH为例)
unset LD_LIBRARY_PATH
22. md5sum sha1sum
计算文件的md5值和sha1值
md5sum file
sha1sum file
23. base64
使用base64计算标准输入输出的加解密
base64对字符串 HelloWorld
base64加密
echo HelloWorld | base64
输出:SGVsbG9Xb3JsZAo=
base64解密
echo SGVsbG9Xb3JsZAo= | base64 -d
输出:HelloWorld
对于文件,如 test.txt,可以将字符串 HelloWorld直接写入 test.txt,然后执行 base64 test.txt,就可以获得 SGVsbG9Xb3JsZA==
将SGVsbG9Xb3JsZA==写入test.txt,执行 base64 -d test.txt 就可以获得 HelloWorld,即 base64直接对文件内容进行加解密操作
把一段byte类型数据base64加密:
echo "ab61caf1cc7cd1ef38d27dbbb89c5ce4a690dd89"|xxd -r -p|base64
输出:q2HK8cx80e840n27uJxc5KaQ3Yk=
base64解密后,将解密出的byte类型转换为string:
echo q2HK8cx80e840n27uJxc5KaQ3Yk=|base64 -d|xxd -p
输出:ab61caf1cc7cd1ef38d27dbbb89c5ce4a690dd89
[参考 Shell - 如何在Bash中将String转换为Byte数组,linux base64加密解密]
24. 命令行快速格式化json字符串
安装:
centos: yum install -y jq
ubuntu: sudo apt-get install jq
使用:
echo '{"a":"1","b":"2","c":{"aa":"1","bb":"2"}}' | jq
---
jq 解析json
echo '{"a":{"b":123, "c":"123"}}'|jq -r ".a" # { # "b": 123, # "c": "123" # } echo '{"a":{"b":123, "c":"123"}}'|jq -r ".a.b" # 123
25. wget
wget -c 下载文件的url -O 文件重命名
-c 断点续传
-O 重命名下载好的文件
26. watch
监听端口3306,每1秒刷新一次
watch -n 1 -d 'netstat -ant|grep 3306'
27. ulimit -n xxx
ulimit -n 65535 将每个进程可以打开最大文件数修改为 65535
参考:ulimit -n 修改
28. iftop
一个流量实时监控工具,安装:
sudo apt install iftop
简单使用:
# 简单显示
sudo iftop
# 指定单位为 bytes
sudo iftop -B
# 指定网卡
sudo iftop -i eth0
更多可以参考博客:iftop 使用
29. openssl
(1). aes-cbc-128加解密
# 加密: openssl enc -aes-128-cbc -salt -in test_aes.txt -out test_aes_enc.txt -k 1122334455667788 -pbkdf2 -iter 10 # 解密: openssl enc -d -aes-128-cbc -in test_aes_enc.txt -out test_aes_dec.txt -k 1122334455667788 -pbkdf2 -iter 10 # -pbkdf2 选项来指定使用 PBKDF2 密码派生算法 # -iter 迭代次数 # 迭代次数越高,派生密钥的计算成本越高,从而提高了安全性 # 以上结果由chatgpt生成,本人验证后放到此处
(2). 查看证书
# 签名证书 openssl x509 -text -noout -in cert.pem # 公钥证书 openssl rsa -pubin -text -noout -in public_key.pem # 私钥证书 openssl rsa -text -noout -in private_key.pem
30. journalctl 查看系统日志
# 查看所有日志 journalctl # 查看特定时间日志 journalctl --since "2024-07-09 00:00:00" --until "2023-07-09 24:00:00" # 查看某一服务特定时间日志 journalctl -u 服务名 --since "2023-10-01 00:00:00" --until "2023-10-02 00:00:00"
[centos]
1. 查看centos版本
cat /etc/redhat-release
[问题解决]
1.windows和linux文件格式不兼容。在windows上创建了文件,再在linux上打开,经常会提示如"aaa^M,未识别的符号"等问题。
解决:使用vi编辑器打开文件,输入":set ff=unix",之后保存退出":wq",就不会报错了。
2. vim实现字符串全局替换
输入":%s/原字符串/新字符串/g",之后保存退出":wq"。
3. 备用工具 atitude,自动解决依赖问题,可当作apt的备用版本
安装:sudo apt-get install atitude
使用:sudo atitude install 应用
sudo atitude remove 应用
4. ubuntu桌面卡死
ctrl+alt+F1(F2/F3..)切换tty终端
命令行输入:sudo pkill Xorg 或 sudo restart lightdm
解决方案来源:https://www.cnblogs.com/mrcharles/p/11879734.html
5. Ubuntu apt更换国内镜像
如果是有桌面版本的,完全可以在设置中修改镜像服务器到任意,如果想要手动设置,参考下方:
参考:https://www.cnblogs.com/lynn-z/p/12874504.html
就是修改/etc/apt/sources.list
(1). sudo -i
(2). cd /etc/apt/
(3). mv sources.list sources.list-org (备份原文件)
(4). 查看系统版本:lsb_release -c
返回:Codename: focal (focal就是当前版本的代号)
(5). 复制镜像源到新文件
touch sources.list
vi sources.list (我这个是桌面版本的ubuntu,有桌面的完全可以使用gedit编辑)
输入 -i 切换编辑器到编辑模式,然后把下面的镜像源(我只粘贴的阿里的,清华的可以看上面的参考文档)内容粘贴到sources.list中:
(如果版本号不是focal , 可以提前在notepad++中替换focal为你的版本号再粘贴过来,如果不想调用notepad++替换,也可以参考下文直接只用vi指令替换)
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
vi模式下替换版本号参考:按ESC退出编辑模式,shift+:,%s/原字符串/变更为的字符串/g,即%s/focal/你的版本/g,回车,shift+:, wq,回车
(6). sudo apt update
sudo apt upgrade
6. 安装gcc
sudo apt install gcc build-essential
7. 安装sqlite3(sqlite3管理工具)
sudo apt install sqlite3
打开文件:
sqlite3 test.db
更多详细信息: Ubuntu下使用sqlite3的基本指令
8. 安装ssh
主要是用于ssh远程登录
先 ps -ef|grep ssh|grep -v grep
如果没有记录,则说明系统没有安装ssh server
执行 sudo apt-get install openssh-server
安装完毕后,再执行 ps -ef|grep ssh|grep -v grep,发现 sshd 已经开启了
netstat -ant|grep 22, 发现负责sshd 的22端口已经开始监听了
9. 修改交换分区大小