代码: https://github.com/WHaoL/study/tree/master/00_06_Linux_SystemCode_and_SocketCode
代码: https://gitee.com/liangwenhao/study/tree/master/00_06_Linux_SystemCode_and_SocketCode
1. Linux介绍
1.1 Linux的诞生
1991年,GNU计划已经开发出了许多工具软件,最受期盼的GNU C编译器已经出现,GNU的操作系统核心HURD一直处于实验阶段(GNU工程从1984年起就在做这件事),没有任何可用性,实质上也没能开发出完整的GNU操作系统,但是GNU奠定了Linux用户基础和开发环境。
-
Linux时间线
- 1991年初,林纳斯·托瓦兹开始在一台386sx兼容微机上学习minix操作系统。
- 1991年4月,林纳斯·托瓦兹开始酝酿并着手编制自己的操作系统。
- 1991 年4 月13 日在comp.os.minix 上发布说自己已经成功地将 bash 移植到了minix 上,而且已经爱不释手、不能离开这个shell软件了。
- 1991年的10月5日,林纳斯·托瓦兹在comp.os.minix新闻组上发布消息,正式向外宣布Linux内核的诞生
- 1992年Linux与其他GNU软件结合,完全自由的操作系统正式诞生。该操作系统往往被称为“GNU/Linux”
- 1993年,大约有100余名程序员参与了Linux内核代码编写/修改工作,其中核心组由5人组成,此时Linux 0.99的代码大约有十万行,用户大约有10万左右。
- 1994年3月,Linux1.0发布,代码量17万行,当时是按照完全自由免费的协议发布,随后正式采用GPL协议。
-
Linux主要特性
- Linux中一切都是文件.
- 完全免费
- 多用户, 多任务
- 良好的界面
- 支持多平台
-
一些名词
-
GNU :Gnu’s Not Unix. 可以理解成一种口号,最早由Richard Stallman呼吁并倡导的。算是嘴皮上的功夫。
-
GPL :General Public License. GNU通用公共许可证。书面上的协议。
扫描二维码关注公众号,回复: 11977216 查看本文章 -
FSF :自由软件基本会,给GNU提供资金支付的,毕竟没钱难成事啊。
-
自由软件:GNU项目下的所有软件都基于GPL许可证(非GNU项目也可使用GPL),都是自由软件。
-
开源软件:是美国Open Source Initiative协会定义。
自由软件与开源软件都允许用户任意获取,且使用、修改、再发行都不受限制,相似度极高。
两者除了所谓的思想理念不同之外,按我们的话讲就是东家不一样
-
1.2 Linux发行版
- ubuntu版本
- 主版本.副版本
- 主版本: 当年的年号
- 单数: 测试版
- 双数: 稳定版
- 副版本: 月份: 04, 10
- 10-> 测试版
- 04 -> 相对稳定
- 长期支持版 -> 最少五年
- 主版本-> 双数
- 副版本 -> 04
- 主版本: 当年的年号
- 主版本.副版本
1.3 命令解析器
-
命令解析器
# 运行在Linux中的应用程序, 当前我们在Linux中打开一个终端的时候, 命令解析器启动, 阻塞当前终端, 等待用户输入指令, 输入完毕, 按回车, 输入的指令被命令解析器解析: - 这个命令在操作系统中是存在的: 执行对应的操作 - 这个命令在操作系统中是不存在的: 提示无法解析 # 命令解析器是如何解析用户输入的指令的: - 当命令输入完成, 按回车, 命令解析器会搜索对应的路径($PATH中存储的路径): - 查看所搜索的路径: echo $PATH - 会对$PATH中的路径依次进行遍历, 找这个目录中有没有我们输入的指令 - 如果没有, 继续搜索后边的路径 - 如果有, 执行该目录下的 这个可执行程序, 停止向下搜索 # Linux中的命令解析器名字: - shell: unix中的命令解析器, -> 简写为: sh - bash: 在shell的基础上修改之后应用在Linux中 -> 默认的命令解析器
-
命令提示符
robin@OS:~/backup/cjson$ - robin: 当前用户的用户名, 通过`whoami`可以查看当前用户 - @: at->在 - OS: 主机名, 这是在安装操作系统的时候指定的 - ~/backup/cjson: 当前用户所在的目录, 查看当前用户所在的目录 `pwd` - ~: 当前用户的家目录, 属于当前用户自己的用户目录 - $: 当前用户是普通用户 - #: 当前用户是管理员
2. Linux目录
2.1 Linux目录结构
- linux文件系统是树状结构
- 根节点使用
/
表示, 这是顶级目录 - 根目录下的子目录介绍
bin
: 存储可执行的二进制文件sbin
: 存储可执行的二进制文件, 对bin的补充, 一些管理员使用的可执行程序可以放到该目录dev
: 设备目录, 存储的文件, 当前主机上所有的硬件都被抽象成文件, 放到该目录下home
: 存储用户目录的目录- 只有在linux下创建一个新用户, 就会在/home下自动创建一个属于这个用户的家目录
lib
: 存储静态/动态库的目录etc
: 存储配置文件的目录media
: 加载外设: 光驱, 外设数据会被挂载到这个目录下边mnt
: 挂载磁盘, U盘, 移动硬盘opt
: 安装第三方软件目录root
: 管理员用户root的家目录usr
:unix system resource
, 操作系统的资源目录- /usr/bin: 可执行的二进制文件, 第三方的
- /usr/games: 游戏
- /usr/lib: 第三方的库, 动态/静态
- /usr/local: 安装第三方软件目录
- /usr/src: 源文件
- /usr/include: 头文件
2.2 路径
2.2.1 绝对路径
- 从根目录开始表示的目录字符串
/home/robin/backup
- 路径的第一个字符必然是
/
2.2.2 相对路径
-
从当前用户所在的目录开始表示一个路径
# 当前用户所在的目录: /home/robin/backup # 子目录: . ├── cjson │ ├── cfg.c │ ├── cfg.h │ ├── cJSON.c │ ├── cJSON.h │ ├── conf │ │ └── cfg.json │ ├── register │ ├── test.c │ └── test.json └── test ├── bin │ ├── login │ ├── lr.tar.gz │ └── register ├── cfg.h ├── cJSON.h ├── conf │ └── cfg.json ├── Makefile ├── redis_op.h └── upload # 如果表示当前目录: . == ./ -> 当前目录 .. == ../ -> 当前目录的上一级目录 # 表示cjson/cfg.c ./cjson/cfg.c cjson/cfg.c
3. 文件管理命令
3.1 ls命令
# 查看目录或者文件属性
# 参数:
# -a, 显示所有的文件
# linux中隐藏的文件第一个字符是 .
robin@OS:~$ ls -a
. .bash_history .config .lesshst package .vim .viminfz.tmp
robin@OS:~$ ls
a.txt backup backup.rar config english.txt fastdfs hyperledger-fabric Linux luffy package projects
# 参数 -l, 显示详细信息
robin@OS:~$ ls -l
total 420
-rwxr--r-x 1 robin root 129773 Jul 20 08:17 a.txt
drwxrwxr-x 4 robin robin 4096 Jul 20 11:29 backup
-rw-rw-r-- 1 robin robin 133144 Jul 20 08:35 backup.rar
drwxrwxr-x 2 robin robin 4096 Feb 11 22:58 config
-rw-r--r-- 1 robin robin 129773 Jul 20 07:59 english.txt
drwxrwxr-x 5 robin robin 4096 Oct 14 2018 fastdfs
drwxrwxr-x 3 robin robin 4096 Nov 26 2018 hyperledger-fabric
drwxrwxr-x 17 robin robin 4096 May 25 23:07 Linux
drwxrwxr-x 7 robin robin 4096 May 26 22:52 luffy
drwxrwxr-x 9 robin robin 4096 Jun 13 23:43 package
drwxrwxr-x 3 robin robin 4096 Jun 14 00:36 projects
# 详细属性介绍
1. -rwxr--r-x: 文件类型和文件的权限
- 文件类型: 7类
- 普通文件 (- -> regular file)
- 目录 (d -> directory)
- 软链接(windows中的快捷方式) (l -> soft link)
- 字符设备文件(鼠标, 键盘) (c -> char)
- 块设备文件(磁盘) (b -> block)
- 管道 | (p -> pipe)
- 套接字文件 (s - socket)
2. 文件的访问权限: rwx r-- r-x, 需要分三组
- 文件所有者对文件的访问权限: user -> u
- 文件所属组对文件的访问权限: group -> g
- 其他人对文件的访问权限: other -> o
在linux中只要创建一用户, 这个用户就默认属于某个组, 用户组的名字和用户名相同
一个用户可以同时加入到多个用户组
在/etc目录下有一个存储用户信息的文件: /etc/passwd
在/etc目录下有一个存储用户组信息的文件: /etc/group
3. 第二大列中的数字 -> 文件的硬链接计数
- 在磁盘上有多个文件名, 这些文件名指向的是磁盘上的同一个存储位置
- 文件名有多个, 但是在磁盘上只存储一份
4. 第三列字符串: 文件所有者
5. 第4列字符串: 文件所属组
6. 第5列整形数: 文件大小
- 如果是一个文件: 代表文件大小
- 如果是目录: 4096, 只是目录本身大小, 不包括里边的数据
7. 第6列: 文件的创建日期
8. 第7列: 文件名
# 命令: ll == ls -alF
# -h: 文件大小以人类能看懂的方式显示, 默认显示字节
robin@OS:~$ ls -lh
total 428K
drwxrwxr-x 2 robin robin 4.0K Jul 20 11:57 a
prw-rw-r-- 1 robin robin 0 Jul 20 11:58 abc
-rwxr--r-x 1 robin root 127K Jul 20 08:17 a.txt
drwxrwxr-x 4 robin robin 4.0K Jul 20 11:29 backup
-rw-rw-r-- 1 robin robin 131K Jul 20 08:35 backup.rar
drwxrwxr-x 2 robin robin 4.0K Feb 11 22:58 config
-rw-r--r-- 1 robin robin 127K Jul 20 07:59 english.txt
drwxrwxr-x 5 robin robin 4.0K Oct 14 2018 fastdfs
drwxrwxr-x 2 robin robin 4.0K Jul 20 11:57 fifo
drwxrwxr-x 3 robin robin 4.0K Nov 26 2018 hyperledger-fabric
drwxrwxr-x 17 robin robin 4.0K May 25 23:07 Linux
drwxrwxr-x 7 robin robin 4.0K May 26 22:52 luffy
drwxrwxr-x 9 robin robin 4.0K Jun 13 23:43 package
drwxrwxr-x 3 robin robin 4.0K Jun 14 00:36 projects
软链接 VS 硬链接
硬链接
就是同一个文件使用了多个别名(他们有共同的 inode)。
硬链接可由命令 link 或 ln 创建,如:
link oldfile newfile
ln oldfile newfile
由于硬链接是有着相同 inode 号仅文件名不同的文件,因此,删除一个硬链接文件并不影响其他有相同 inode 号的文件。
硬链接不能对目录进行创建,只可对文件创建。
软链接
(也叫符号链接)与硬链接不同,文件用户数据块中存放的内容是另一文件的路径名的指向。软链接就是一个普通文件,只是数据块内容有点特殊。
软链接可对文件或目录创建。
ln -s old.file soft.link
ln -s old.dir soft.link.dir
加-s选项表示创建的是软链接。
删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接就变成了死链接。
要更深入地了解,请参见IBM网站:http://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/
3.2 cd命令
-
进入指定目录
cd 相对路径 cd 绝对路径 cd .. # 返回上一级 == ../
-
进入家目录
cd 当前用户家目录绝对路径 # 不常用 cd # 最简单 cd ~
-
在临近的两个目录之间切换
# 进入到第一个目录 cd /home/robin/a/b/c/d/e/f/g # 第二次进入到 cd /bin/include/json/hello/world # 第三次要返回到第一个目录中 cd - # 进入到: /home/robin/a/b/c/d/e/f/g # 第四次进入到第二个目录 cd - # /bin/include/json/hello/world
3.3 创建删除目录
-
创建目录
# 创建单一目录 mkdir 目录名 ... # 创建嵌套关系的目录(多层) 一定要加参数: -p mkdir parent/child/sunzi/ -p
-
删除目录
# 矮穷矬 -> 只能删除空目录 rmdir 目录名 # 高大上, 删除目录的时候, 需要加参数: -r(递归) rm 文件/目录 -rf # -f -> 强制删除 # -i -> 提示是否要真正的删除 robin@OS:~/b$ rm dd -ri rm: remove directory 'dd'? 输入: n->no, 不删除 输入: y->yse, 删除 rm dd/ -rf
3.4 cp命令
# 拷贝文件或目录
# 文件目录可以使用相对路径/绝对路径表示
# 语法: cp 存在的文件/目录 新的文件/目录
# 1. cp 存在的文件 新的文件(不存在)
$ cp a.txt ee/c.txt # c.txt被创建, 内容和a.txt是一样的
# 2. cp 存在的文件 新的文件(存在)
$ cp a.txt ee/c.txt # c.txt被a.txt覆盖
# 3. cp 存在的目录 新目录(不存在), 需要加参数: -r
$ cp ee aa -r # aa目录被创建里边的内容和ee中的内容一致
# 4. cp 存在的目录 目录(存在), 需要加参数: -r
$ cp aa ee -r # aa目录别拷贝到了ee目录中
robin@OS:~/b$ tree
.
├── aa
│ └── c.txt
├── a.txt
├── b.txt
├── ee
│ ├── aa `-> 被拷贝过来的aa目录
│ │ └── c.txt
│ ├── b.txt
│ └── c.txt
└── ff
# 5. cp 存在的文件 目录(存在)
$ cp abcdefg ee
robin@OS:~/b$ tree
.
├── aa
│ └── c.txt
├── abcdefg
├── a.txt
├── b.txt
├── ee
│ ├── aa
│ │ └── c.txt
│ ├── abcdefg
│ ├── b.txt
│ └── c.txt
└── ff
3.5 mv命令
-
文件移动
# 将一个文件从一个目录移动到另外的目录中 mv 文件/目录 另一个目录(`存在`) # 移动之前 robin@OS:~/b$ tree . ├── aa │ └── c.txt ├── abcdefg ├── a.txt ├── b.txt ├── ee │ ├── aa │ │ └── c.txt │ ├── abcdefg │ ├── b.txt │ └── c.txt └── ff # 移动 $ mv abcdefg a.txt b.txt ff # 移动之后 robin@OS:~/b$ tree . ├── aa │ └── c.txt ├── ee │ ├── aa │ │ └── c.txt │ ├── abcdefg │ ├── b.txt │ └── c.txt └── ff ├── abcdefg ├── a.txt └── b.txt
-
文件改名
# 修改一个已经存在的文件的名字 mv 文件名/目录名 新的名字(`这个文件是不存在`) # 文件1改名为文件2, 文件2内容被文件1覆盖, 并且文件1被删除了(其实是文件2没了) mv 已经存在的文件1 已经存在的文件2 robin@OS:~/b/aa$ ls aa abcdefg b.txt c.txt robin@OS:~/b/aa$ cat c.txt hello, worldc 你好, 世界 robin@OS:~/b/aa$ cat b.txt xxxxxxxxxxxxxxxxx bbbbbbbbbbbbbbb robin@OS:~/b/aa$ mv c.txt b.txt robin@OS:~/b/aa$ ls aa abcdefg b.txt robin@OS:~/b/aa$ cat b.txt hello, worldc 你好, 世界
3.6 查看文件内容
-
cat
# 将指定的文件的内容输出到终端 # 查看比较小的文件 cat 文件名
-
more
# 查看文件的所有内容, 将指定的文件的内容输出到终端 # 不能向上翻 more 文件名 # 操作: - enter: 向下走一行 - 空格: 向下翻页 - q键: 退出
-
less
# 查看文件的所有内容, 将指定的文件的内容输出到终端 # 可以上下翻页 less 文件名 # 操作: - 回车: 向下滚动一行 - ↑键: 向上滚动一行 - ↓键: 向下滚动一行 - 空格: 向下翻页 - pagedown: 向下翻页 - pageup: 向上翻页 - q键: 退出
-
head
# 将指定的文件的内容输出到终端, 默认显示文件前十行 head 文件名 # -n: 指定显示的行数, 从文件头向下数 head -n 12 文件名 # 显示文件的前12行
-
tail
# 将指定的文件的内容输出到终端, 默认显示文件最后十行 tail 文件名 # -n: 指定显示的行数 tail -n 12 文件名 # 显示文件的最后12行
3.7 其他命令
tree命令
# 以树状结构查看目录结构
# 需要安装 apt-get -> 16.04之后可以写成 apt
sudo apt install tree
# 1. tree -> 查看当前目录
# 2. tree 目录名 -> 查看指定的目录
# 3. 参数 -L, 显示目录的层数
tree -L 3
pwd命令
# 查看当前的工作路径 -> 得到的是绝对路径
touch命令
# 创建一个新的空文件
touch 文件名(不存在) # 新的文件被创建
touch 文件名(存在) # 更新文件的时间
which命令
# 查看二进制指令(可执行程序)放在什么目录中
$ which cp
/bin/cp
$ which cd # 没有输出, cd是linux的内建命令, 没有对应的可执行程序, 系统可以直接解析
重定向命令 >
# 执行某些命令有输出, 这些输出默认显示到终端, 我们可以通过重新将这些输出直接写入磁盘文件
ls > a.txt # ls的结果被写入到a.txt文件中, 文件不存在创建, 存在覆盖文件原内容
管道 |
# 位于两个shell命令之间
# 管道接收第一个命令的输出, 将这些数据作为第二个命令的输入
命令1 | 命令2
4. 用户管理命令
4.1 切换用户
# 每个用户下都有一套环境变量, 记录着当前用户的信息
# 切换到对应的用户
su 用户名 # 只切换用户, 环境变量不切换
su - 用户名 # 既切换用户, 又切换环境变量
# 回到之前的用户
exit
注意:切换root失败的问题
su命令不能切换root,提示su: Authentication failure,
--> 只要你sudo passwd root过一次之后,下次再su的时候只要输入密码就可以成功切换了。
这个问题产生的原因是由于ubtun系统默认是没有激活root用户的,需要我们手工进行操作,在命令行界面下,或者在终端中输入如下命令:
sudo passwd
Password:你当前的密码
Enter new UNIX password:这个是root的密码
Retype new UNIX password:重复root的密码
然后会提示成功的信息。
再说明一点,使用su和sudo是有区别的,使用su切换用户需要输入所切换到的用户的密码,而使用sudo则是当前用户的密码。
切换用户的命令是su,su是(switch user)切换用户的缩写。通过su命令,可以从普通用户切换到root用户,也可以从root用户切换到普通用户。从普通用户切换到root用户需要密码(该密码是普通用户的密码),从root用户切换到普通用户不需要密码。
sudo vim text.txt 在当前目录使用管理员权限创建text文件。
4.2 添加删除用户
# 添加用户
adduser 用户名
# 删除用户, 用户的目录还在, 手动删除即可
deluser 用户名
4.3 添加删除用户组
# 添加用户组
addgroup 用户组
# 删除用户组
delgroup 用户组
4.4 设置/修改密码
# 当前普通用户只能改自己的密码
passwd 用户名
# root用户可以修改所有普通用户/root的密码 -> 任意用户密码
sudo passwd 用户名
4.5 文件属性
修改文件权限
-
文字设定法
chmod who[+|-|=]mod 文件名 - who - u: 所有者, user - g: 所属组, group - o: 其他人, other - a: 所有用户(u+g+o) - mod: - x: 执行 - r: 读 - w: 写 - -: 没有权限 # 举例 robin@OS:~$ ll a.txt -rwxr--r-x 1 robin root 129773 Jul 20 08:17 a.txt* robin@OS:~$ chmod a=rwx a.txt robin@OS:~$ ll a.txt -rwxrwxrwx 1 robin root 129773 Jul 20 08:17 a.txt* robin@OS:~$ chmod u-x a.txt robin@OS:~$ ll a.txt -rw-rwxrwx 1 robin root 129773 Jul 20 08:17 a.txt* robin@OS:~$ chmod go-rw a.txt robin@OS:~$ ll a.txt -rw---x--x 1 robin root 129773 Jul 20 08:17 a.txt*
-
数字设定法
# 使用八进制数表示三类人的权限, 举例: 0765 # 使用数字表示权限: - 0: 没权限 - 1: 执行->x - 2: 写 -> w - 4: 读 -> r 0 7 6 5 八进制 读写执行 读写 读执行 文件所有者 文件所属组 其他人 chmod [+|-|=]mod 文件名 robin@OS:~$ ll a.txt -rw---x--x 1 robin root 129773 Jul 20 08:17 a.txt* robin@OS:~$ chmod 777 a.txt robin@OS:~$ ll a.txt -rwxrwxrwx 1 robin root 129773 Jul 20 08:17 a.txt* robin@OS:~$ chmod -111 a.txt robin@OS:~$ ll a.txt -rw-rw-rw- 1 robin root 129773 Jul 20 08:17 a.txt robin@OS:~$ chmod -666 a.txt robin@OS:~$ ll a.txt ---------- 1 robin root 129773 Jul 20 08:17 a.txt robin@OS:~$ chmod +123 a.txt robin@OS:~$ ll a.txt ---x-w--wx 1 robin root 129773 Jul 20 08:17 a.txt* robin@OS:~$ chmod 664 a.txt robin@OS:~$ ll a.txt -rw-rw-r-- 1 robin root 129773 Jul 20 08:17 a.txt
修改文件所有者
# 必须使用管理员权限执行这个命令
sudo chown 新的所有者 文件名
sudo chown 新的所有者:新的组 文件名
修改文件所属组
# 必须使用管理员权限执行这个命令
sudo chgrp 新的组 文件名
5. 压缩和解压缩
常用的压缩格式:
- tar.gz
- tar.bz2
- zip
5.1 tar
# 压缩
# 参数:
- c: 创建压缩包
- z: tar.gz的压缩格式
- j: tar.bz2的压缩格式
- v: 压缩的时候输出log信息到终端 (参数可省)
- f: 指定压缩包的名字
$ tar zcvf 压缩包的名字.tar.gz 要压缩的目录或文件 ######################
$ tar jcvf 压缩包的名字.tar.bz2 要压缩的目录或文件
# 举例:
tar zcvf all.tar.gz a.txt english.txt backup/
######################################################################
# 解压缩
- x: 释放压缩包
- z: tar.gz的压缩格式
- j: tar.bz2的压缩格式
- v: 压缩的时候输出log信息到终端 (参数可省)
- f: 指定压缩包的名字
# 默认解压到当前目录
$ tar zxvf xxx.tar.gz ######################
$ tar jxvf xxx.tar.bz2
# 解压到指定目录, 参数 -C
$ tar zxvf xxx.tar.gz -C 解压目录
$ tar jxvf xxx.tar.bz2 -C 解压目录
5.2 zip
sudo apt install zip
sudo apt install unzip
# 压缩
# 如果压缩的文件中有目录需要添加参数 -r
zip 压缩包的名字 要压缩文件/目录
# 解压缩 -> 解压到当前目录
unzip 压缩包的名字
# 解压缩到指定目录
unzip 压缩包的名字 -d 解压目录
5.3 rar
# 默认是没有这个工具的, 需要安装
sudo apt install rar
# 压缩 archive, 如果压缩的文件中有目录 -r
rar a 压缩包名.rar 要压缩的文件/目录
# 解压缩 -> 解压到当前目录
rar x 压缩包的名字
# 解压缩 -> 解压到指定目录
rar x 压缩包的名字 解压目录名
压缩:
命令 参数 创建的压缩包的名字 要压缩的文件/目录
解压缩:
命令 参数 要解压缩的压缩包名 参数 解压目录
6. 查找和检索
6.1 find
# 根据文件属性查找某个目录下的某个/些文件
# 语法格式:
find 搜索的路径 参数 参数值
# 通过文件名查找 -name
# 搜索范围: 指定的目录和其子目录
# 文件名可以加双引号也可以不加, 文件名有通配符, 建议加双引号
find ./ -name english.txt
# 根据文件类型搜索, 参数: -type
# 七种文件类型:
- 普通文件 -> f
- 软连接(快捷方式) -> l
- 目录 -> d
- 管道 -> p
- 套接字 -> s
- 字符设备 -> c
- 块设备 -> b
$ find ./ -type p
# 根据文件的创建时间 -ctime
# 比如今天是18号
# 天数表示: -3: 18, 17, 16这几天: 三天以内,
# +3: 16号以前的日子
find ./ -ctime +2
# 根据目录的层数(深度)
# -maxdepth 3: 从当前目录位置往下最多搜索3层
# -mindepth 3: 至少从第三层开始搜索
6.2 grep
# 根据文件内容搜索文件
grep "搜索的文件内容" 搜索的文件名
grep 搜索的文件内容 搜索的路径 -r
# 如果想知道搜索到内容在文件的第多少行, 使用参数: -n
-
管道的使用
ll | grep abc
创建链接的命令 -> ln
# 创建硬链接
ln 要创建硬链接的文件路径 得到的链码的名字(自己指定)
# 创建软链接 -> 创建快捷方式
# 要创建硬链接的文件路径 -> 使用绝对路径
ln -s 链接的文件路径 得到的链码的名字(自己指定) #创建软连接
$ ln -s /home/robin/english.txt eng.txt #创建软连接
lrwxrwxrwx 1 robin robin 23 Jul 21 10:22 eng.txt -> /home/robin/english.txt
# 得到的软链接文件中保存了english.txt的路径
ln old new
ln -s old new
查找头文件或者库文件的路径
#法一:快、不全
locate name
#法二:慢、全
find / -name "name"