常用快捷键
按键 | 作用 |
---|---|
Ctrl+d |
键盘输入结束或退出终端 |
Ctrl+s |
暂停当前程序,暂停后按下任意键恢复运行 |
Ctrl+z |
将当前程序放到后台运行,恢复到前台为命令 fg |
Ctrl+a |
将光标移至输入行头,相当于Home 键 |
Ctrl+e |
将光标移至输入行末,相当于End 键 |
Ctrl+k |
删除从光标所在位置到行末 |
Alt+Backspace |
向前删除一个单词 |
Shift+PgUp |
将终端显示向上滚动 |
Shift+PgDn |
将终端显示向下滚动 |
shell 常用通配符
字符 | 含义 |
---|---|
* |
匹配 0 或多个字符 |
? |
匹配任意一个字符 |
[list] |
匹配 list 中的任意单一字符 |
[^list] |
匹配 除 list 中的任意单一字符以外的字符 |
[c1-c2] |
匹配 c1-c2 中的任意单一字符 如:[0-9][a-z] |
{string1,string2,...} |
匹配 string1 或 string2 (或更多)其一字符串 |
{c1..c2} |
匹配 c1-c2 中全部字符 如{1..10} |
一次创建多个文件,touch jiang_{1..10}.txt
, 创建 jiang_1.txt - jiang_10.txt
用户、文件权限管理
查看用户
who命令,常用参数
参数 | 说明 |
---|---|
-a |
打印能打印的全部 |
-d |
打印死掉的进程 |
-m |
同am i ,mom likes |
-q |
打印当前登录用户数及用户名 |
-u |
打印当前登录用户登录信息 |
-r |
打印运行等级 |
用户组
在 Linux 里面每个用户都有一个归属(用户组),用户组简单地理解就是一组用户的集合,它们共享一些资源和权限,同时拥有私有资源。
groups lilei
, 查看用户lilei 的用户组信息
sudo usermod -G sudo lilei
, 给用户添加 用户组
sudo deluser lilei --remove-home
, 删除用户, —remove-home 一并删除工作目录
文件访问权限
- 一个目录同时具有读权限和执行权限才可以打开并查看内部文件,而一个目录要有写权限才允许在其中创建其它文件,这是因为 目录文件实际保存着该目录里面的文件的列表等信息
变更文件所有者
sudo chown liuzhenjiang fileName
, 修改 fileName 文件的所有者为 liuzhenjiang
修改文件权限
方式一: 二进制数字表示
每个文件有三组固定的权限,分别对应 拥有者、所属用户组、其他用户。文件的读写执行 对应字母 rwx,以二进制 表示 111,十进制 表示 7。
rw-rw-rw-
,换成对应的十进制 为 666, 这表示 文件的 拥有者、所属用户组、其他用户 具有 读写权限,不具有执行权限chmod 600 fileName
, 修改 fileName 权限 为 600
方式二: 加减赋值操作
chmod go-rw fileName
g
,o
,u
, 表示 group(用户组),others(其他用户),user(用户)+
,-
, 增加、去掉相应权限
目录结构
FHS 文件系统规范: https://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.pdf
环境变量
添加自定义路径到”PATH”环境变量
PATH 里面路径以:
作为分隔符, 添加路径 一定要使用绝对路径
1 | PATH=$PATH:/home/shiyanlou/mybin |
在每个用户的 home 目录中有一个 shell 每次启动时默认执行的一个配置脚本,用来初始化环境,其中就包括添加用户自定义环境变量等。
shell 是 zsh,它的配置文件 是.zshrc
shell 是 bash, 它的配置文件是.bashrc
将添加环境变量的命令追加 (>>) 到.zshrc
中,
1 | echo "PATH=$PATH:/home/shiyanlou/mybin" >> .zshrc |
搜索文件
与搜索相关的命令 常用的 有 whereis,which,find,locate
whereis ,简单快速,直接从数据库中查询,而非从硬盘中依次查找
搜索 二进制文件,原码文件,man 帮助文件 所在的路径
1
2whereis find
/usr/bin/findlocate,通过查询
/var/lib/mlocate/mlocate.db
数据库来检索信息,不过这个数据库不是实时更新的,系统有定时任务每天自动执行updatedb
命令来更新数据库-c
参数,统计数目1
locate /usr/share/*.jpg // 查找/usr/share/ 下 所有jpg文件
which , shell 内建的命令,通常用于确定 是否安装了某个 指定的程序
1
2which man
/usr/bin/manfind ,功能强大,不但可以通过文件类型、文件名进行搜索,还可以根据文件的属性(文件时间戳、文件权限等)进行搜索。
基本的命令 格式
find [path][option] [action]
与时间相关的命令参数
参数 说明 -atime
最后访问时间 -ctime
最后修改文件内容的时间 -mtime
最后修改文件属性的时间 以
-mtime
c 参数举例-mtime n
, 在 n 天之前的”一天之内”修改过的文件 , n 为 0 ,表示当天 有改动的文件-newer file
, 列出比 file 文件还要新的文件名
文件打包与解压缩
文件后缀名 | 说明 |
---|---|
*.zip |
zip 程序打包压缩的文件 |
*.rar |
rar 程序压缩的文件 |
*.7z |
7zip 程序压缩的文件 |
*.tar |
tar 程序打包,未压缩的文件 |
*.gz |
gzip 程序(GNU zip)压缩的文件 |
*.xz |
xz 程序压缩的文件 |
*.bz2 |
bzip2 程序压缩的文件 |
*.tar.gz |
tar 打包,gzip 程序压缩的文件 |
*.tar.xz |
tar 打包,xz 程序压缩的文件 |
*tar.bz2 |
tar 打包,bzip2 程序压缩的文件 |
*.tar.7z |
tar 打包,7z 程序压缩的文件 |
文件系统操作 、磁盘管理
查看磁盘、目录的容量
- df 命令查看磁盘容量
df -h
- du 命令 查看 目录的容量
du -h
, 易读方式展示du -h -d 0
, 查看 1 级目录的信息-d
参数,指定目录的深度
简单磁盘管理
创建虚拟磁盘
使用
dd
命令,从/dev/zero
设备 创建一个容量 为 256M 的空文件virtual.img
1
dd if=/dev/zero of=virtual.img bs=1M count=256
使用
mkfs
命令格式化磁盘 成为 文件系统1
sudo mkfs.ext4 virtual.img
使用
mount
命令 挂载磁盘到目录树,mount
命令查看主机已经挂载的文件系统mount 命令的一般格式
1
2
3mount [options] [source] [directory]
mount [-o [操作选项]] [-t 文件系统类型] [-w|--rw|--ro] [文件系统源] [挂载点]
磁盘分区 , fdisk
管道
管道是一种通信机制,常用于进程间的通信,网络通信通常通过 scoket,它的表现形式就是将每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)。
- 匿名管道 ,命令行中的
|
符号ls -al | less
, - 具名管道,通常只会在源程序中用到
cut ,打印某一行的某个字段
1 | 以 :为分隔符的第1个字段和第6个字段 |
grep, 查找匹配字符串
grep 命令一般形式 grep [命令选项]... 用于匹配的表达式 [文件]...
1 | 查看环境变量中以 "yanlou" 结尾的字符串 |
wc, 简单计数工具
1 | 行数 |
sort 排序
sort 命令将输入按一定方式排序后再输出。支持的排序有按字典排序,数字排序,按月份排序,随机排序,反转排序等
1 | -t 参数 指定字段的分隔符,-k 字段号,指定对哪一个字段进行排序 |
文本处理
tr 命令, 用来删除一段文本信息中的某些文字,或将其进行转换
1
2
3
4
5
6
7删除 "hello shiyanlou" 中所有的'o','l','h'
echo 'hello shiyanlou' | tr -d 'olh'
将"hello" 中的ll,去重为一个l
echo 'hello' | tr -s 'l'
将输入文本,全部转换为大写或小写输出
echo 'input some text here' | tr '[:lower:]' '[:upper:]'
上面的'[:lower:]' '[:upper:]'你也可以简单的写作'[a-z]' '[A-Z]',当然反过来将大写变小写也是可以的join 命令,将两个文件中包含相同内容的那一行合并在一起
1
2
3
4
5
6
7
8
9cd /home/shiyanlou
创建两个文件
echo '1 hello' > file1
echo '1 shiyanlou' > file2
join file1 file2
将 /etc/passwd 与 /etc/shadow 两个文件合并,指定以':'作为分隔符
sudo join -t':' /etc/passwd /etc/shadow
将 /etc/passwd 与 /etc/group 两个文件合并,指定以':'作为分隔符,分别比对第4和第3个字段
sudo join -t':' -1 4 /etc/passwd -2 3 /etc/grouppaste 命令, 在不对比的情况下,将多个文件合并,以
tab
隔开1
2
3
4
5
6
7echo hello > file1
echo shiyanlou > file2
echo www.shiyanlou.com > file3
-d 指定合并的分隔符 :
paste -d ':' file1 file2 file3
-s 合并时, 每个文件为一行
paste -s file1 file2 file3
数据流重定向
linux 默认提供了三个特殊设备
文件描述符 | 设备文件 | 说明 |
---|---|---|
0 |
/dev/stdin |
标准输入 |
1 |
/dev/stdout |
标准输出 |
2 |
/dev/stderr |
标准错误 |
文件描述符: 一个非负整数,实际上它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。
标准错误重定向
标准输出和标准错误虽然都指向终端屏幕,但实际上它们不一样。需要使用文件描述符
1 | 将标准错误重定向到标准输出,再将标准输出重定向到文件,注意要将重定向到文件写到前面 |
在输出重定向文件描述符前加&,否则 shell 会当做重定向到一个文件名为 1 的文件
永久重定向
当需要某一部分的命令的输出全部进行重定向,可使用 exec
命名实现永久重定向。
exec命令,使用指定的命令替换当前 Shell, 即 使用一个进程替换当前进程,或指定新的重定向
1 | 先开启一个子 Shell |
进程-工作管理
bash 支持 job(工作控制),通过 & 符号,可让命令在后台运行 ls &
crtl + z
可是 工作停止并丢到后台中
jobs
命令 查看 被放置在后台的工作
fg [jobnumber]
, 将后台的工作拿到前台开
1 | 后面不加参数提取预设工作,加参数提取指定工作的编号 |
bg [jobnumber]
, 在后台运作指定 job
kill -signal jobnumber/pid
, 对 job 或 pid 对于进程 进行操作
kill 常用信号值
信号值 | 作用 |
---|---|
-1 | 重新读取参数运行,类似与 restart |
-2 | 如同 ctrl+c 的操作退出 |
-9 | 强制终止该任务 |
-15 | 正常的方式终止该任务 |
进程查看、控制
ps
静态查看当前进程的信息; top
实时查看进程的状态;pstree
查看当前活跃进程的树形结构
ps aux
,罗列所有的进行信息,ps aux | grep zsh
, 查找匹配的进程
Kill 命令
当一个进程结束时,或者异常结束时,会向其父进程返回一个,或接受一个 SIGHUP 信号 而做出的结束进程。这个 SIGHUP 信号不仅可以有系统发送,也可以使用kill
命令来发送这个信号,来操作进程的结束或重启等等
正则表达式
grep 命令用于打印输出文本中匹配的模式串,其常用参数
参数 | 说明 |
---|---|
-b |
将二进制文件作为文本来进行匹配 |
-c |
统计以模式匹配的数目 |
-i |
忽略大小写 |
-n |
显示匹配文本所在行的行号 |
-v |
反选,输出不匹配行的内容 |
-r |
递归匹配查找 |
-A n |
n 为正整数,表示 after 的意思,除了列出匹配行之外,还列出后面的 n 行 |
-B n |
n 为正整数,表示 before 的意思,除了列出匹配行之外,还列出前面的 n 行 |
--color=auto |
将输出中的匹配项设置为自动颜色显示 |
特殊符号
参数 | 说明 |
---|---|
-b |
将二进制文件作为文本来进行匹配 |
-c |
统计以模式匹配的数目 |
-i |
忽略大小写 |
-n |
显示匹配文本所在行的行号 |
-v |
反选,输出不匹配行的内容 |
-r |
递归匹配查找 |
-A n |
n 为正整数,表示 after 的意思,除了列出匹配行之外,还列出后面的 n 行 |
-B n |
n 为正整数,表示 before 的意思,除了列出匹配行之外,还列出前面的 n 行 |
--color=auto |
将输出中的匹配项设置为自动颜色显示 |
1 | grep默认是区分大小写的,这里将匹配所有的小写字母 |