01-linux命令

代码: 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"

猜你喜欢

转载自blog.csdn.net/liangwenhao1108/article/details/107427632
今日推荐