Summary
1. 命令
1.1. ls
ls # 列出当前目录下文件夹和文件
ls -a # 列出当前目录下所有文件夹和文件, 包括隐藏文件
ls -A # 列出除 ., .. 外的
ls -lh # 列出详细信息
ls -lSh # 列出详细信息, 并按照文件大 => 小排序
ls -d */ # 只列出当前目录下文件夹
ls -lt # 按创建时间排序(由新 => 旧)
ls -ltr # 按创建时间排序(由旧 => 新)
1.2. xargs
$ xargs [option] command # 将输入数据(通常是多行文本)转换为命令行参数
-I 定义参数占位符
-n 指定每个命令执行时传递的数量, 每次只传递 n 个参数给后面的命令
-n# 创建文件 file.txt $ echo -e "apple\nbanana\ncherry" > file.txt # 逐行打印内容 $ cat file.txt | xargs -n 1 echo "Fruit:" # Fruit: apple # Fruit: banana # Fruit: cherry-I# 查找当前目录下所有的 bat 文件, 复制到 test/ 目录下 mkdir -p test find . -maxdepth 1 -name "*.bat" | xargs -I {} sh -c 'cp -f {} test/'
1.3. grep
$ grep [option] pattern [file...] # 匹配指定模式的行
-i 忽略大小写
-n 显示匹配行的行号
-r 递归搜索
-v 反转匹配, 显示不匹配的行
-i,-n$ echo -e "A1\na2\na3\nA4" | grep "a" # a2 # a3 $ echo -e "A1\na2\na3\nA4" | grep -n "a" # 2:a2 # 3:a3 $ echo -e "A1\na2\na3\nA4" | grep -i "a" # A1 # a2 # a3 # A4 $ echo -e "A1\na2\na3\nA4" | grep -in "a" # 1:A1 # 2:a2 # 3:a3 # 4:A4-r# 创建测试数据 $ mkdir -p test $ echo -e "hello world\n hello today" > ./test/1.txt $ echo "hello boy" > ./test/2.txt # 搜索文件内容包含 hello 的文件 $ grep -rn "hello" ./test # ./test/1.txt:1:hello world # ./test/1.txt:2: hello today # ./test/2.txt:1:hello boy $ grep -rn --include='*.md' '-' . $ grep -rn --include='*.md' --include='*.txt' 'pattern' .-v$ echo -e "A1\na2\na3\nA4" | grep -v "a" # A1 # A4
1.4. sed
// hack
流编辑器, 用于文本的替换, 删除, 插入等
sed [option] 'command' [file...]
- option
-i原地修改文件-n不输出匹配行
e.g.
sed 's/pattern/replace/g' file.txtsed '/pattern/d' file.txt`sed '1i\
Inserted text' file.txt`
sed '1s/.*/New Line1/' file.txtsed -e 's/pattern/replace/g' -e '/pattern/d' file.txtsed -e ':a' -e 'N' -e '$!ba' -e 's/Line 2\nLine 3\nLine 4/New Line/g' example.txt`sed '3,5c\
New Line 1\
New Line 2' file.txt`
1.5. find
# 列出当前目录下文件
# Tip: -maxdepth 是全局选项, 需放在开头
$ find . -maxdepth 1 -type f
# 列出当前目录下文件夹
$ find . -maxdepth 1 -mindepth 1 -type d
# 列出当前目录下文件夹名, 不含路径
$ find . -maxdepth 1 -mindepth 1 -type d -exec basename {} \;
# 列出当前目录及其子目录下的 .md 和 .html 文件
$ find . -type f \( -name "*.md" -o -name "*.html" \)
1.6. tee
// todo
1.7. fg, bg
Ctrl+Z # 挂起当前程序
fg # 最近挂起的程序
jobs # 所有挂起的程序
fg %2 # 进入第二个挂起的程序
bg # 最近挂起的程序放到后台运行
bg %2 # 将第二个挂起程序放到后台运行
kill %1 # 关闭第一个程序
kill -9 %1 # 强制关闭第一个程序
1.8. history
history # 查看历史命令
history 10 # 查看最近的 10 条命令
history -c # 清空当前会话的历史命令
1.9. sort
sort -n # 按数字排序
sort -r # 逆序排序
sort -V # 按版本号排序
1.10. scp
# scp user@url:origin_path local_path
$ scp -r gendloop@gendloop.top:~/Others ./Tmp
1.11. chage
sudo chage -d 0 user
1.12. du
du -sh folder # 查看文件夹大小
du -h --max-depth=1 | sort -hr | head -n 3
du -h --max-depth=1 --exclude="./2025-02-17"
1.13. wc
wc -l file.txt # 统计行数
wc -w file.txt # 统计单词数
wc -c file.txt # 统计字节数
wc -m file.txt # 统计字符数
2. 示例
2.1. 添加管理员权限用户
$ sudo vim /etc/sudoers
# User privilege specification
root ALL=(ALL:ALL) ALL
gendloop ALL=(ALL:ALL) ALL
gendloop-test ALL=(ALL) NOPASSWD:ALL
2.2. 执行上一次命令
!!
2.3. 查看系统版本
lsb_release -a
cat /etc/lsb-release
cat /etc/os-release
uname -a
2.4. 反向搜索历史记录命令
Ctrl + R
2.5. 查看和修改默认SHELL
# 查看当前使用的shell
$ echo $SHELL
# 查看系统可用的shell
$ cat /etc/shells
# 修改默认shell
$ chsh -s $(which zsh)
2.6. 初始化账户
# 1. 设置初始密码
$ sudo passwd username
# 2. 强制首次登录改密码
$ sudo chage -d 0 username
2.7. 修改ssh登陆方式(公钥|密码)
$ sudo vim /etc/ssh/sshd_config
# sshd_config
PasswordAuthentication no # 禁用密码登录
PubkeyAuthentication yes # 启用公钥认证
$ sudo systemctl restart sshd
2.8. ssh传统PEM(RSA)密钥生成
# RSA密钥生成, 4096位, PEM格式
ssh-keygen -t rsa -b 4096 -m PEM -C "gendloop@163.com"
# 从OPENSSH格式的私钥转换为PEM格式
ssh-keygen -p -m PEM -f ~/.ssh/id_rsa -N ""
# -p: 修改私钥密码
# -m PEM: 输出PEM格式
# -f: 指定私钥文件
# -N "": 设置新密码为空(即不设置密码)
2.9. ssh自动连接服务器配置
$ vim ~/.ssh/config
# config
Host gendloop.top
HostName gendloop.top
User gendloop
IdentityFile ~/.ssh/gendloop.pem
Port 2222 # 如果SSH端口非默认22
2.10. 从子目录中提取指定类型文件到当前目录下
$ find . -mindepth 2 -type f \( -name "*.png" -o -name "*.jpg" -o -name "*.jpeg" \) \
-exec cp {} . \;
2.11. 查看当前日期时间
date
date '+%Y-%m-%d'
date '+%H:%M:%S'
date '+%Y-%m-%d %H:%M:%S'
2.12. 查找包含某内容的文件
# 显示具体匹配内容
find . -type f -name '*.ini' -exec grep -nH '\.png' {} \;
# 只显示包含匹配模式的文件名
find . -type f -name '*.ini' -exec grep -l '\.png' {} \;
2.13. 替换文件内容
find . -type f -name '*.ini' -exec sed -i 's/\.png/\.bmp/g' {} \;
2.14. 批量修改文件名
# 方式1
find . -name "*.md" -exec sh -c 'mv "$1" "${1%.md}.txt"' _ {} \;
# 方式2
for file in *.svg+xml; do
mv "$file" "${file%.svg+xml}.svg"
done
3. 快捷键
3.1. 光标移动
| 快捷键 | 功能 |
|---|---|
| Ctrl+A | 移动到行首 |
| Ctrl+E | 移动到行尾 |
| Ctrl+B | 向前移动一个字符 |
| Ctrl+F | 向后移动一个字符 |
| Alt+B | 向前移动一个单词 |
| Alt+F | 向后移动一个单词 |
3.2. 编辑
| 快捷键 | 功能 |
|---|---|
| Ctrl+W | 删除前一个单词 |
| Ctrl+U | 删除到行首 |
| Ctrl+K | 删除到行尾 |
| Ctrl+Y | 粘贴刚才删除的内容 |
| Ctrl+H | 删除前一个字符 |
| Ctrl+T | 交换当前字符和前一个字符 |
| Alt+T | 交换当前单词和前一个单词 |
| Ctrl+Shift+- | 撤销上一次操作 |
| Ctrl+Shift+C | 复制鼠标选择的内容 |