07-Shell命令进阶

不羁岁月 提交于 2020-01-12 13:03:03

Shell命令进阶

通配符

通配符列表:

通配符 说明
* 任意字符
任意单个字符
[characters] 其中的任意一个字符
[!characters] 不能是其中的任意一个字符
[[:class:]] 指定分类中的任意一个字符

常用字符分类表:

字符分类 说明
[:alnum:] 字母和数字
[:alpha:] 字母
[:digit:] 数字
[:lower:] 小写字母
[:upper:] 大写字母

通配符示例:

模式 说明
* 任何文件
g* 以g开头的任何文件
b*.txt 任何以b开头以.txt结尾的文件
Data??? 以Data开头后跟3个任意字符
[abc]* 以a或者b或者c开头的任意文件
BACKUP.[0-9][0-9][0-9] 以BACKUP.开头后跟3个数字
[[:upper:]]* 任何以一个大写字母开头的文件
[![:digit:]]* 任何不以数字开头的文件
*[[:lower:]123] 任何以小写字母结尾或者以1,2,3任何一个数字结尾的文件

文件链接

ln-建立链接

ln-Create Links,用于建立硬链接或者符号链接(软链接)

命令格式:

ln file link

功能: 建立硬链接

命令格式:

ln -s item link

功能: 建立符号链接

硬链接与软链接原理

原理图:
在这里插入图片描述

硬链接

硬链接:通过文件数据块的inode(索引节点)号指向文件

  • 默认情况下,每个文件都有一个硬链接,它就是这个文件的文件名
  • 硬链接就是到某个文件的直接入口
  • 一个文件只有一个inode,但可以有多个硬链接,同一个文件的硬连接保存的inode号是相同,也就是一个文件可以有多个入口,或者说一个文件有多个别名
  • 每增加一个硬链接,inode节点对应的链接数就加1,每删除一个就减1,只有inode节点的链接数为0时,该文件才被系统回收

硬链接的限制:

  • 不能跨文件系统建立硬链接,因为inode节点号可能相同
  • 不能对目录建立硬链接,因为linux系统默认有两个特殊目录:(.)当前目录 (…)父目录,都是硬链接,如果对目录建立硬链接会形成访问循环
  • 只能对已存在文件创建硬链接

软链接

软链接又称符号链接,为了克服硬链接的限制。

软链接类似于windows中的快捷方式

软链接将建立一个特殊类型的文件,在该文件内容是一个文件或者目录的指针

软链接特性:

  • 可以对不存在的文件或者目录建立软链接
  • 可以跨文件系统建立软链接
  • 可以针对目录建立软链接
  • 删除软链接不会删除原始文件
  • 删除原始文件后,软连接指向失效,称为链接悬挂或者链接断开
  • 建立软链接时尽量使用绝对路径

硬链接及软链接存在的原因

链接为 Linux 系统解决了文件的共享问题,还带来了隐藏文件路径、增加权限安全及节省存储等好处。

阶段练习

  1. 确认当前工作目录在登陆者home目录,并在该目录下建立playground目录,进入playground目录建立dir1及dir2两个子目录:
cd
mkdir playground
cd playground
mkdir dir1 dir2
  1. 拷贝文件

将/etc目录下的passwd文件拷贝到playground目录下

cp /etc/passwd .
查看当前目录:
ls -l
total 12
drwxrwxr-x 2 me me 4096 2012-01-10 16:40 dir1
drwxrwxr-x 2 me me 4096 2012-01-10 16:40 dir2
-rw-r--r-- 1 me me 1650 2012-01-10 16:07 passwd
使用-v选项:
cp -v /etc/passwd .
`/etc/passwd' -> `./passwd'
使用 -i选项
cp -i /etc/passwd .
cp: overwrite `./passwd'?
  1. 移动及重命名

    重命名passwd文件为fun:

mv passwd fun
将fun移到dir1目录下:
mv fun dir1
继续移到dir2下:
 mv dir1/fun dir2
继续移回当前文件夹:
mv dir2/fun .
  1. 建立硬链接
ln fun fun-hard
fun dir1/fun-hard
fun dir2/fun-hard

查看playground目录:

ls -l
total 16
drwxrwxr-x 2 me me 4096 2012-01-14 16:17 dir1
drwxrwxr-x 2 me me 4096 2012-01-14 16:17 dir2
-rw-r--r-- 4 me me 1650 2012-01-10 16:33 fun
-rw-r--r-- 4 me me 1650 2012-01-10 16:33 fun-hard

*注意查看fun以及fun-hard文件的第2个域是4,表明当前文件有4个硬链接(默认情况下文件名本身就是一个硬链接)

硬链接保存的inode是相同的,可以通过-i选项查看:

ls -li
total 16
12353539 drwxrwxr-x 2 me me 4096 2012-01-14 16:17 dir1
12353540 drwxrwxr-x 2 me me 4096 2012-01-14 16:17 dir2
12353538 -rw-r--r-- 4 me me 1650 2012-01-10 16:33 fun
12353538 -rw-r--r-- 4 me me 1650 2012-01-10 16:33 fun-hard

这里的第一个域就是inode号

  1. 建立软链接

    软链接主要是为了克服硬链接的两个缺点:1)硬链接不能跨物理驱动器 2)硬链接不能指向目录

    建立软链接:

ln -s fun fun-sym
ln -s ../fun dir1/fun-sym
ln -s ../fun dir2/fun-sym

注意:后两条命令使用的是相对路径,是目标文件相对于符号链接的位置(因此是…/)

查看dir1下的软链接:

ls -l dir1
total 4
-rw-r--r-- 4 me me 1650 2012-01-10 16:33 fun-hard
lrwxrwxrwx 1 me me 6 2012-01-15 15:17 fun-sym -> ../fun

注意:fun-sym这一行开始的l表明它是一个符号链接,实际指向的是…/fun,这里的第5个域表示文件长度为6,它不是原始文件的长度,而是字符串"…/fun"的长度,因为软链接的文件内容存储的是链接文件的引用位置。

可以使用绝对路径建立软链接:

ln -s /home/me/playground/fun dir1/fun-sym

指向目录的软链接:

ln -s dir1 dir1-sym
ls -l
total 16
drwxrwxr-x 2 me me 4096 2012-01-15 15:17 dir1
lrwxrwxrwx 1 me me 4 2012-01-16 14:45 dir1-sym -> dir1
drwxrwxr-x 2 me me 4096 2012-01-15 15:17 dir2
-rw-r--r-- 4 me me 1650 2012-01-10 16:33 fun
-rw-r--r-- 4 me me 1650 2012-01-10 16:33 fun-hard
lrwxrwxrwx 1 me me 3 2012-01-15 15:15 fun-sym -> fun
  1. 移除文件和目录

    删除硬链接:

rm fun-hard
ls -l
total 12
drwxrwxr-x 2 me me 4096 2012-01-15 15:17 dir1
lrwxrwxrwx 1 me me 4 2012-01-16 14:45 dir1-sym -> dir1
drwxrwxr-x 2 me me 4096 2012-01-15 15:17 dir2
-rw-r--r-- 3 me me 1650 2012-01-10 16:33 fun
lrwxrwxrwx 1 me me 3 2012-01-15 15:15 fun-sym -> fun

fun-hard被删除,同时链接计数变为3

删除文件fun,并使用-i选项:
rm -i fun
rm: remove regular file `fun'?
输入y,文件被删除,使用ls -l查看,此时符号链接指向的文件由于不存在而变成断开或悬挂。对于大多数linux发行版会用特殊方式显示该符号链接已经断开
ls -l
total 8
drwxrwxr-x 2 me me 4096 2012-01-15 15:17 dir1
lrwxrwxrwx 1 me me 4 2012-01-16 14:45 dir1-sym -> dir1
drwxrwxr-x 2 me me 4096 2012-01-15 15:17 dir2
lrwxrwxrwx 1 me me 3 2012-01-15 15:15 fun-sym -> fun

如果使用less查看文件则显示相应信息:

less fun-sym
fun-sym: No such file or directory

清理断开的符号链接:

 rm fun-sym dir1-sym
ls -l
total 8
drwxrwxr-x 2 me me 4096 2012-01-15 15:17 dir1
drwxrwxr-x 2 me me 4096 2012-01-15 15:17 dir2

注意:对符号链接的大多数操作都是针对链接的目标,而不是链接本身,但是rm是一个例外,当你删除链接时,仅是删除了链接而不是目标文件

  1. 删除playground目录

    递归删除playground目录

cd
rm -r playground

查看磁盘可用空间

df:disk free space

df

在这里插入图片描述

查看可用内存

free:free memory

free

在这里插入图片描述

进程操作

ps:显示当进程,无参数则显示与当前会话关联的进程

可选参数:

-e:(everything)显示所有进程(包含不属于当前用户的进程)

-f:(full)完整格式列表

-u username:以username身份运行的进程

-p pid:显示指定进程id的进程

pstree:显示进程树

kill pid:杀死进程(kill -9 pid,-9是信号代码即终止的意思)

top:动态显示系统运行中的进程

命令实践

ps
ps -e

在这里插入图片描述

ps -f
ps -u root

在这里插入图片描述

pstree

在这里插入图片描述

ps -ef |head
ps -p 9

在这里插入图片描述

ps -p 1577
kill 1577
ps -p 1577

在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!