Bash笔记

前言

虽然接触Linux很久了,但真正接触命令行操作,到了解命令行哲学,只有大约一年,且是用到什么就学什么,缺乏系统性,在此做一个复习整理,顺便学习一些提高效率的骚操作(其实基础都没学全),方便以后复习、速查,。Linux中的zsh、fish等shell有一些定制化的快捷功能,可以有效提高命令行操作效率,但为了确保拿到一台机器就能够上手,我只学习了bash操作。本篇整理不会全面,也不一定准确,目的是记录我在学习和使用中的关注点,对Linux轻度用户来说这些知识点基本满足日常需要。参考the-art-of-command-line进行学习、整理。explainshell.com可以把一行命令中各个参数提取、分析并给出相应解释,个人感觉很强大,在碰到大佬们让人看不懂的组合指令时可以求助于它。

快捷键

Tab

Tab补全大法。

Ctrl+R

搜索历史命令,enter执行,方向右键进入修改

Ctrl+W

删除输入的最后一个单词,可用来快速删除参数

Ctrl+U

删除光标之前的内容,可用来删除整行

Ctrl+K

删除光标之后的内容

Alt+B Alt+F

以单词为单位移动光标

Alt+F 在图形化界面的shell里可能对应其他快捷键

Ctrl+A

将光标移动到行首,可用来修改较长的命令,与Ctrl+K连用可用来删除整行,与#连用可以暂存当前指令(行首加#,回车,命令不执行,但保存在历史记录中,后面调用时Ctrl+A,delete,回车执行)

Ctrl+E

将光标移动到行尾,可用来增加参数,也可和Ctrl+U连用删除整行

Ctrl+L

清屏,相当于clear命令

Alt+Shift+’#’

将这行命令当做注释,相当于Ctrl+A,#,enter连用


命令

man

查询文档

man 指令名 进入阅读man手册

apropos

查询文档。默认进行正则匹配(apropos -r)

apropos 关键字1 关键字2 输出所有包含关键字1或关键字2的man手册页数

apropos -a 关键字1 关键字2 输出所有包含关键字1且包含关键字2的man手册页数

有了百度谷歌这些文档都用的不多

help

查询命令用法。只能用于shell内建命令,无法查询外部命令。

help 指令名 输出指令的用法

vim

编辑文本

vim 文件名 进入vim文本编辑器

nano

编辑文本

nano 文件名 进入nano文本编辑器

cat

打印文件

cat 文件名 将文件中的内容全部打印出来

和grep一起使用 cat 文件名 | grep 关键字 打印含有关键字的那一行

type

查询命令名或参数信息。

type ls 输出ls is aliased to 'ls --color=auto',表明ls是ls –color=auto的别名

type if 输出if is a shell keyword

type type输出cd is a shell builtin

type -p 外部命令名 输出执行路径

ls

列出文件

ls -l 列表输出

ls -R 递归遍历文件目录并输出

ls -a 输出所有文件(包括隐藏文件)

less

阅读文件。

less 文件名 在无桌面环境的终端中查看文本时可用PageUp等进行翻页、滚动操作

查看文件前一部分

head -n 数字 文件 显示前几行

head -c 数字 文件 显示前几个字节

tail

查看文件后一部分

tail -n 数字 文件 显示后几行

tail -f 文件 监视文件末尾的内容变化并输出,Ctrl+C退出监视。

ln

创建链接

ln 文件名1 文件名2 创建文件1的硬链接,

ln -s 文件名1 文件名2 创建文件1的软链接,相当于快捷方式

软链接以路径形式存在,可以链接不存在的文件,可以链接目录

目录无法创建硬链接,硬链接以副本形式存在(但不占用空间),硬链接必须存在于同一文件系统

chown

修改文件拥有者

chown 用户名 文件

chown 用户名:用户组名 文件

chown -R 用户名:用户组名 文件 子目录也一同修改

chmod

修改文件权限

chmod +x 文件名 增加运行权限,常用ls -l查看文件权限,后修改

chmod 777 文件名 权限给满

du

查看使用空间

du -hs 目录名 用方便阅读的单位显示总计量

df

查看空间使用情况(与du略有不同,不详述)

df -h

df -i 打印iNode(Linux靠iNode识别文件),与ls -i类似

mount

挂载设备

mount 设备名 挂载点 将设备挂载到目录(挂载点)

常用 fdisk -l列出设备,再用mount挂载,挂载点必须是存在的目录(mkdir创建目录)且未被占用,挂载点下原有文件将被隐藏

fdisk

磁盘分区命令

fdisk -l 显示当前分区情况

mkfs

lsblk

显示逻辑磁盘大小

ifconfig

查看网络连接

dig

DNS查询(和nslookup相似)

dig 域名

grep

过滤输出

grep 'pattern' 文件名1 文件名2 过滤出包含pattern的词

常与管道符连用命令 | grep ...

与正则表达式相关

history

历史记录

!序号 执行历史记录中对应命令

!$ 上一次的参数

!! 上一次的指令

xargs

pstree

以树形展示进程,较美观

netstat

查看连接状态
netstat -ntpl 查看进程的监听端口

w

w 查看系统运行时间

alias

创建别名

alias 'll'='ls -al' 输入ll命令将会执行ls -al
unalias 命令 取消别名

crontab

定时任务

crontab -e 编辑crontab文件

crontab -r 删除crontab文件(危险

(…)

子shell

(命令 && 命令) 创建一个子shell,并执行命令,常和cd连用,
cd 目录 && 命令不改变当前shell路径

{…}

括号拓展,拓展为所有可能的组合

cp file.{txt,pdf} 对应file.txt file.pdf

screen

管理多个会话

screen -S 会话名 创建一个会话

screen -ls 列出当前会话,包含会话号

screen -r 会话号 回到一个会话

Ctrl+A k 关闭当前会话(自动杀死进程)

Ctrl+A d 暂时断开会话,可用screen -r恢复

diff

比较文件或目录

diff 文件名1 文件名2 输出不同的位置和内容

tar

打包压缩

tar -cvf 文件名.tar 文件名 将文件压缩

tar -xvf 文件名.tar 解压

find

查找文件

find / | grep 文件名 习惯用这个进行全盘查找

cut

拼接

cut 文件名1 文件名2 > 文件名3 将文件1,2合并到文件3

wc

计数

wc -l 计数行数

wc -w 计数单词数

wc -c 计数字节数

tee

读取标准输入,同时输出到标准输出和文件里

cat 文件名1 | tee 文件名2 相较于 cat 文件名1 > 文件名2 可以将cat的内容打印出来

hexdump

查看二进制文件
hexdump 文件名

chattr

修改文件属性(比文件权限更加底层)

chattr +i 文件名 不允许任何修改,防止修改、删除文件,可用chattr -i 文件名解除

lsattr 文件名 显示文件属性

chattr +a 文件名 只能追加,不能删除,常用于日志

curl

http访问

curl 网址 打印html源码

curl 网址 > 文件名 保存到文件

wget

http下载文件

wget 网址

top/htop

查看CPU、硬盘资源状态

uname

uname -a 查看系统信息


常用重定向用法

>

写入到一个文件或设备

ls -al > output.txt 将命令执行结果写入output.txt,若无则创建一个,若有则直接写入(造成覆盖,用>!可强制覆盖)。
若目标文件在一个不存在的文件夹下则会报错。下同。

>>

追加写入到文件或设备

ls -al > output.txt将命令执行结果写入output.txt,若无则创建一个,若有则在文件末尾追加写入。

文件描述符

shell中0表示标准输入stdin,1表示标准输出stdout,2表示标准错误stderr,需要分别进行重定向。

文件描述符在重定向符号左侧时直接写即可,在右侧时前面加&,且文件描述符与重定向符号之间不能有空格。

1>和1>>

将正确输出写入文件或设备

2>和2>>

将报错写入文件或设备

1> 2>混用

操作 1>>right.txt 2>&1 把标准输出和错误追加写入right.txt。

操作 1>>right.txt 2>wrong.txt 将正确输出追加写入到right.txt,错误输出覆盖写入wrong.txt

操作 1>>right.txt 2>/dev/null 将正确输出追加写入到right.txt,错误输出丢弃(既不被打印,又不保存到文件)

<

程序 <文件名1 >文件名2 用文件1替换标准输入,将输出写入文件2


通配符

*

零到多个任意字符

?

一到多个任意字符

[…]

括号中的字符有一个或多个
[a-c].txt 匹配a.txt b.txt c.txt aa.txt bb.txt 等

[a][b].txt 匹配ab.txt aab.txt abb.txt等

[^a].txt 取反,匹配首字母不为a的txt文件

{“..”,”..”,…}

{"字符串1","字符串2"}匹配以字符串1或字符串2开头的文件


任务管理

&

操作 & 将操作转入后台运行,返回PID(线程ID),并将PID存储在$!中,echo $!查看PID

用户退出或关闭终端时进程终止

jobs

jobs 查看后台进程

nohup

nohup 命令 进程持续运行,终端关闭或账户退出后依然运行
nohup 命令 & 后台持续运行命令

disown

diswon 命令 进程后台运行,从jobs列表移除,但依然与shell保持连接(shell关闭后,如果进程产生stdin、stdout、stderr就会出错)

bg

bg PID 将进程号为PID的进程放入后台

fg

fg PID 将后台进程转入前台bash

Ctrl+C

发送SIGINT,终止正在运行的前台进程

Ctrl+Z

发送SIGTSTP,挂起正在运行的前台进程

Ctrl+D

输入一个EOF

kill

kill -l 列出kill选项

kill -9 PID 强制退出进程。 常用ps -ef | grep ...查找进程,再kill强制退出

TODO

以上是本人常用或对本人来说很有用的Bash知识点,只涵盖了Linux命令的很小一部分,命令参数也只挑了重点来写,用到的时候再查帮助文档。

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 前言
  • 快捷键
    1. 0.1. Tab
    2. 0.2. Ctrl+R
    3. 0.3. Ctrl+W
    4. 0.4. Ctrl+U
    5. 0.5. Ctrl+K
    6. 0.6. Alt+B Alt+F
    7. 0.7. Ctrl+A
    8. 0.8. Ctrl+E
    9. 0.9. Ctrl+L
    10. 0.10. Alt+Shift+’#’
  • 命令
    1. 0.1. man
    2. 0.2. apropos
    3. 0.3. help
    4. 0.4. vim
    5. 0.5. nano
    6. 0.6. cat
    7. 0.7. type
    8. 0.8. ls
    9. 0.9. less
    10. 0.10. head
    11. 0.11. tail
    12. 0.12. ln
    13. 0.13. chown
    14. 0.14. chmod
    15. 0.15. du
    16. 0.16. df
    17. 0.17. mount
    18. 0.18. fdisk
    19. 0.19. mkfs
    20. 0.20. lsblk
    21. 0.21. ifconfig
    22. 0.22. dig
    23. 0.23. grep
    24. 0.24. history
    25. 0.25. xargs
    26. 0.26. pstree
    27. 0.27. netstat
    28. 0.28. w
    29. 0.29. alias
    30. 0.30. crontab
    31. 0.31. (…)
    32. 0.32. {…}
    33. 0.33. screen
    34. 0.34. diff
    35. 0.35. tar
    36. 0.36. find
    37. 0.37. cut
    38. 0.38. wc
    39. 0.39. tee
    40. 0.40. hexdump
    41. 0.41. chattr
    42. 0.42. curl
    43. 0.43. wget
    44. 0.44. top/htop
    45. 0.45. uname
  • 常用重定向用法
    1. 0.1. >
    2. 0.2. >>
    3. 0.3. 文件描述符
    4. 0.4. 1>和1>>
    5. 0.5. 2>和2>>
    6. 0.6. 1> 2>混用
    7. 0.7. <
  • 通配符
    1. 0.1. *
    2. 0.2. ?
    3. 0.3. […]
    4. 0.4. {“..”,”..”,…}
  • 任务管理
    1. 0.1. &
    2. 0.2. jobs
    3. 0.3. nohup
    4. 0.4. disown
    5. 0.5. bg
    6. 0.6. fg
    7. 0.7. Ctrl+C
    8. 0.8. Ctrl+Z
    9. 0.9. Ctrl+D
    10. 0.10. kill
  • 1. TODO
  • ,