sunny123456

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

Linux-文件管理命令

目录

1. cd 命令 

2. ls 命令

2.1 显示所有文件

2.2 显示文件详细信息

2.2.1 文件类型

 2.2.2 用户类型

2.2.3 文件权限

2.2.4 硬链接计数

2.2.5 其他属性

2.3 其他参数

2.3.1 单位显示

2.3.2 显示目录后缀

3. 创建删除目录

4. cp 命令

5. mv 命令

6 查看文件内容

7. 链接的创建

8. 文件属性

8.1 修改文件文件权限

8.2 修改文件所有者

8.2.1普通用户添加 sudo 权限

8.3 修改文件所属组

9. 其他命令

9.1 tree 命令

9.2 pwd 命令

9.3 touch 命令

9.4 which 命令

9.5 重定向命令


1. cd 命令 

在 Linux 终端中如果想要进行工作路径的切换,需要使用 cd 命令。在进行目录的切换的时候, 我们可以使用相对路径也可以使用绝对路径。

进入指定目录

$ cd 目录名

  • 目录名: 使用相对路径 / 绝对路径都可以,该路径必须是一个有效路径
  • 特殊的目录:

..: 表示当前目录的上一级目录,使用 cd .. 或者 cd ../ 都可以

. : 表示当前目录,使用 . 或者./ 都可以,cd . 不会切换目录

进入家目录

每个用户 (普通用户和 root) 都有一个属于自己的目录,比如:

  • robin 是普通用户,家目录: /home/robin
  • luffy 是用户,家目录: /home/luffy
  • root 是管理员用户,家目录: /root

按照上边的格式来表示家目录书写起来比较麻烦,有一种相对简单的写法就是使用 ~ 表示。如果是使用 cd 命令切换到家目录,后边可以什么路径都不加,这样也可以进入到当前用户的家目录。综上所述也就是通过 cd 进入到当前用户的家目录一共有三种不同的方式。

  1. $ cd # 方式1
  2. $ cd ~ # 方式2
  3. $ cd /home/用户名 # 方式3

在临近的两个目录之间切换

如果我们要频繁的在两个路径之间切换,也有相关的快捷操作,尤其是对于比较长的路径,可以是这简直是一个福利:

  1. # 通过cd进入到目录1: /usr/include/c++/7.5.0/ext/pb_ds/detail/list_update_map_/
  2. # 通过cd进入到目录2: /home/luffy/get/onepiece/itis/a/goldfish
  3. # 频繁在两个目录之间切换
  4. $ cd -

2. ls 命令

ls 就是 list, 打印指定的文件信息,如果是目录,显示对应目录中有哪些子文件,语法格式如下:

  1. $ ls [args] # 查看当前目录
  2. $ ls [args] 目录名 # 查看指定目录
  3. $ ls [args] 文件名 # 查看某个文件的信息

2.1 显示所有文件

给 ls 添加 -a 参数(就是 all 的意思)就可以显示指定目录中是所有文件了,因为默认情况下具有隐藏属性的文件是不会显示出来的。那么在 Linux 中什么样是文件才能被隐藏呢?起始很简单只需要在文件名前边加一个点 (.) 文件就具有隐藏属性了, 例如: .demo, .a.txt

  1. # 查看root家目录下所有非隐藏文件
  2. [root@VM-8-14-centos ~]# ls
  3. ace luffy
  4. # 查看root家目录下所有文件 (隐藏 + 非隐藏)
  5. [root@VM-8-14-centos ~]# ls -a
  6. . ace .bash_logout .bashrc .config .lesshst .pip .pydistutils.cfg
  7. .. .bash_history .bash_profile .cache .cshrc luffy .pki .ssh .viminfo

2.2 显示文件详细信息

给 ls 添加 -l 参数(就是 list 的意思)我们就可以看到文件的详细信息了,里边的信息量还是非常大的,其中包括: 文件类型 , 文件所有者对文件的操作权限 , 文件所属组用户对文件的操作权限 , 其他人对文件的操作权限 , 硬链接计数 , 文件所有者 , 文件所属组 , 文件大小 , 文件的修改日期 , 文件名

  1. # 显示文件的详细信息
  2. robin@OS:~$ ls -l
  3. total 204
  4. -rw-rw-r-- 1 robin robin 268 Mar 22 17:32 a.c
  5. drwxrwxr-x 2 robin robin 4096 Aug 4 2019 config
  6. -rw-r--r-- 1 robin robin 129487 Dec 25 11:28 english.txt
  7. drwxrwxr-x 4 robin robin 4096 Jan 15 17:48 libevent
  8. drwxrwxr-x 17 robin robin 4096 Apr 13 22:42 Linux
  9. drwxrwxr-x 8 robin robin 4096 Feb 5 16:57 luffy
  10. -rw-r--r-- 1 robin robin 2223 Mar 2 14:39 main.cpp
  11. -rw-rw-r-- 1 robin robin 2167 Dec 1 22:41 mysql_test.c
  12. drwxrwxr-x 9 robin robin 4096 Mar 26 19:19 network
  13. -rw-r--r-- 1 robin robin 1406 Mar 2 20:18 occi.cpp
  14. drwxrwxr-x 3 robin robin 4096 Oct 30 12:09 oradiag_robin
  15. drwxrwxr-x 11 robin robin 4096 Mar 26 09:40 package
  16. drwxrwxr-x 2 robin robin 4096 Dec 29 17:11 process
  17. drwxrwxr-x 17 robin robin 4096 Mar 29 22:31 projects
  18. -rw-r--r-- 1 robin robin 1816 Jan 6 09:37 sidtime.c
  19. drwxrwxr-x 2 robin robin 4096 Mar 22 11:31 socket
  20. -rw-r--r-- 1 robin robin 583 Oct 18 17:21 test.c
  21. -rw-r--r-- 1 robin robin 2015 Mar 1 17:05 test.cpp
  22. -rw-rw-r-- 1 robin robin 2218 Dec 2 17:02 test_mysql.c
  23. drwxrwxr-x 5 robin robin 4096 Jan 13 17:35 udp
  24. # 文件详细信息介绍
  25. d rwx rwx r-x 5 robin robin 4096 Jan 13 17:35 udp
  26. | | | | | | | | | |
  27. 文件 文件所 文件所 其他人 硬链接 文件 文件 文件大小 文件修改时间 文件名
  28. 类型 有者权限 属组权限 权限 计数 所有者 所属组

在查看文件详细信息的时候,还有一种简单的写法,可以使用 ll 命令:

  • 有些版本的 Linux 中 ll 等价于 ls -l;
  • 有些版本的 Linux 中 ll 等价于 ls -laF;

2.2.1 文件类型

在 Linux 操作系统中,一共有 7 中文件类型,这 7 中类型是根据文件属性进行划分的,而不是根据文件后缀划分的。

  • -: 普通的文件,在 Linux 终端中没有执行权限的为白色,压缩包为红色,可执行程序为绿色字体
  • d: 目录 (directory), 在 Linux 终端中为蓝色字体,如果目录的所有权限都是开放的,有绿色的背景色
  • l: 软链接文件 (link), 相当于 windows 中的快捷方式,在 Linux 终端中为淡蓝色 (青色) 字体
  • c: 字符设备 (char), 在 Linux 终端中为黄色字体
  • b: 块设备 (block), 在 Linux 终端中为黄色字体
  • p: 管道文件 (pipe), 在 Linux 终端中为棕黄色字体
  • s: 本地套接字文件 (socket), 在 Linux 终端中为粉色字体

 2.2.2 用户类型

在 Linux 中有三大类用户: 文件所有者 , 文件所属组用户 , 其他人 , 我们可以对同一个文件给这三种人设置不同的操作权限,用于限制用户对文件的访问。

  • 文件所有者

Linux 中的所有的文件都有一个所有者,就是文件的主人

  • 文件所属组

文件的主人属于哪个组,这个文件默认也就属于哪个组
用户组中可以有多个用户,这些组中的其他用户和所有者的权限可以是不一样的

  • 其他人

这个用户既不是文件所有者也不是文件所属组中的用户,就称之为其他人
其他人对文件也可以拥有某些权限

2.2.3 文件权限

Linux 中不同的用户可以对文件拥有不同的操作权限,权限一共有四种: 读权限 , 写权限 , 执行权限 , 无权限。

    1. - rwx rw- r-- 1 robin robin 2218 Dec 2 17:02 app
    2. | | | |
    3. 文件类型 文件所有 文件所属 其他人权限
    4. 者权限 组权限

从上边的例子中可以看出:

  • 文件所有者对文件有读、写、执行权限
  • 文件所属组用户对文件有 读、写权限, 没有执行权限
  • 其他人对文件有 读权限, 没有写、执行权限

2.2.4 硬链接计数

硬链接计数是一个整数,如果这个数为 N (N>=1),就说明在一个或者多个目录下一共有 N 个文件,但是这 N 个文件并不占用多块磁盘空间,他们使用的是同一块,如果通过其中一个文件修改了磁盘数据,那么其他文件中的内容也就变了。每当我们给给磁盘文件创建一个硬链接(使用 ln),磁盘上就会出现一个新的文件名,硬链接计数加 1,但是这新文件并不占用任何的磁盘空间,文件名还是映射到原来的磁盘地址上。

和直接进行文件拷贝的区别,创建硬链接只是多了一个新的文件名, 拷贝文件不仅多了新的文件名在磁盘上数据也进行了拷贝

2.2.5 其他属性

关于 ls -l 得到的其他属性相对比较简单,最后再给大家介绍一下:

  • 文件大小 —> 单位是字节

如果文件是目录显示为 4096, 这是目录自身大小,不包括目录中的文件大小

  • 文件日期:显示的是文件的修改日期,只要文件被更新,日期也会随之变化
  • 文件名:文件自己的名字(没啥可解释的)

如果文件类型是软连接会这样显示: link -> /root/file/test, 后边的路径表示快捷方式链接的是哪个磁盘文件

2.3 其他参数

2.3.1 单位显示

在查看文件大小的时候,如果文件比较大对应的数组自然也就很大,我们还需要基于字节进行相关的换算,不能直观得到我们想要的结果,如果数学不好,我们可以使用一个参数 -h (human)(就是命令说人话)。

  1. # 直接查看文件大小
  2. [root@VM-8-14-centos ~]# ls -l ipc.tar.gz 
  3. -rw-r--r-- 1 root root 122962 Apr 25  2020 ipc.tar.gz
  4. # 添加 -h 参数查看文件大小
  5. [root@VM-8-14-centos ~]# ls -lh ipc.tar.gz 
  6. -rw-r--r-- 1 root root 121K Apr 25  2020 ipc.tar.gz

2.3.2 显示目录后缀

在查看文件信息的时候,处理通过文件类型区分该文件是不是一个目录之外,还可以通过一个参数 -F 在目录名后边显示一个 /, 这样就可以直接区分出来了。

  1. # 直接查看文件信息
  2. [root@VM-8-14-centos ~/file]# ls -l
  3. total 8
  4. drwxr-xr-x 2 root root 4096 Jan 25 14:29 dir
  5. -rw-r--r-- 1 root root 0 Jan 25 14:49 haha.tar.gz
  6. -rwxrwxrwx 1 root root 0 Jan 25 14:49 hello
  7. lrwxrwxrwx 1 root root 15 Jan 25 14:30 link -> /root/file/test
  8. prw-r--r-- 1 root root 0 Jan 25 14:24 pipe-2
  9. drwxrwxrwx 2 root root 4096 Jan 25 15:20 subdir
  10. -rw-r--r-- 1 root root 0 Jan 25 14:23 test
  11. # 添加了 -F 参数查看文件信息
  12. [root@VM-8-14-centos ~/file]# ls -lF
  13. total 8
  14. drwxr-xr-x 2 root root 4096 Jan 25 14:29 dir/
  15. -rw-r--r-- 1 root root 0 Jan 25 14:49 haha.tar.gz
  16. -rwxrwxrwx 1 root root 0 Jan 25 14:49 hello*
  17. lrwxrwxrwx 1 root root 15 Jan 25 14:30 link -> /root/file/test
  18. prw-r--r-- 1 root root 0 Jan 25 14:24 pipe-2|
  19. drwxrwxrwx 2 root root 4096 Jan 25 15:20 subdir/
  20. -rw-r--r-- 1 root root 0 Jan 25 14:23 test

3. 创建删除目录

创建目录

目录的创建分为两种,一种是创建单个目录,另一种是一次性创建多层目录,使用的命令是 mkdir, 后边参数是要创建的目录的名字,如果是多层目录需要添加参数 -p。

关于创建的目录所在的路径可以是相对路径, 也可以是绝对路径

  1. # 单层目录
  2. $ mkdir 新目录的名字
  3. # 多层目录, 需要加参数 -p
  4. $ mkdir parent/child/baby1/baby2 -p
  • 删除目录

如果要删除已经存在的路径一共有两种方式,可以使用 rmdir 或者 rm

rmdir: 只能删除空目录,有点 low,不好用

rm: 可以删除文件也可以删除目录,如果删除的的是目录,需要加参数 -r, 意思是递归 (recursion)

rm 命令还有另外两个经常使用的参数:

  • -i: 删除的时候给提示
  • -f: 强制删除文件,没有提示直接删除并且不能恢复,慎用
  1. # 1. low, 矮穷矬, 只能删除空目录
  2. $ rmdir 目录名
  3. # 2. 高大上, 可以删除目录也可以删除文件
  4. # 删除目录需要加参数 -r, 递归的意思, 删除之后是不能恢复的
  5. $ rm 目录名 -r

4. cp 命令

cp 就是 copy, 拷贝,使用这个命令可以拷贝文件也可以拷贝目录

  • 拷贝文件 => 文件不存在得到新文件, 文件存在就覆盖
  1. # `语法: cp 要拷贝的文件 得到的文件`
  2. # `场景1: 文件A, 将A拷贝一份得到文件B`
  3. $ cp 文件A 文件B
  4. # `场景2: 文件A存在的, 文件B也是存在的, 执行下边的拷贝 ==> 文件A覆盖文件B`
  5. $ cp 文件A 文件B
  • 拷贝目录 ==> 目录不存在得到新目录, 该目录被拷贝到存在的目录中
  1. # 拷贝目录需要参数 -r
  2. # 场景1: 目录A, 通过拷贝得到不存在的目录B
  3. $ cp 目录A 目录B -r
  4. # 场景2: 目录A存在的, 目录B也是存在的, 执行下边的拷贝 ==> 目录A会被拷贝并将其放到目录B中
  5. $ cp 目录A 目录B -r
  6. # 场景3: 把A目录里的某一个或者多个文件拷贝到B目录中
  7. $ cp A/a.txt B # 拷贝 A目录中的 a.txt 到目录B中
  8. $ cp A/* B -r # 拷贝 A目录中的所有文件到目录B中, 不能确定A目录中是否有子目录, 因此需要加 -r

5. mv 命令

mv 就是 move, 这个 Linux 命令既能移动文件所在目录也可以给文件改名。

  • 文件的移动
  1. # 语法: mv 要移动的文件 目录
  2. # 有一个文件A, 移动到目录B中
  3. # 其中A可以是文件也可以是目录, B必须是目录而且必须是存在的
  4. $ mv A B
  • 文件改名
  1. # 语法: mv 要改名的文件 新名字(原来是不存在的,这点很重要)
  2. # 其中A可以是文件也可以是目录,并且是存在的, B原来是不存在的
  3. $ mv A B
  • 文件覆盖
  1. # 语法: mv 存在文件A 存在的文件B
  2. # 其中A是文件(非目录)并且是存在的, B也是一个文件(非目录)并且也存在
  3. # A文件中的内容覆盖B文件中的内容, A文件被删除, 只剩下B文件
  4. $ mv A B

6 查看文件内容

如果想要查看文件内容方式有很多,最常用的是 vim, 下面介绍一下 vim 以外的一些的一些方式:

  • cat

该命令可以将文件内容显示到终端,由于终端是有缓存的,因此能显示的字节数也是受限制的。 如果文件太大数据就不能完全显示出来了,因此该命令适合查看比较小的文件内容。

$ cat 文件名
  • more

该命令比 cat 要高级一点,我们可以以翻屏的方式查看文件中的内容,使用方式如下:

  1. $ more 文件名
  2. # 快捷键
  3. - 回车: 显示下一行
  4. - 空格: 向下滚动一屏
  5. - b: 返回上一屏
  6. - q: 退出more
  • less

该命令和 more 命令差不多,我们可以以翻屏的方式查看文件中的内容,使用方式如下:

  1. $ less 文件名
  2. # 快捷键
  3. - b: 向上翻页
  4. - 空格: 向后翻页
  5. - 回车: 显示下一行
  6. - 上下键: 上下滚动
  7. - q:退出
  • head

使用该命令可以查看文件头部的若干行信息,使用方式如下:

  1. # 默认显示文件的前10行
  2. $ head 文件名
  3. # 指定显示头部的前多少行
  4. $ head -行数 文件名
  • tail

使用该命令可以查看文件尾部的若干行信息,使用方式如下:

  1. # 默认显示文件的后10行
  2. $ tail 文件名
  3. # 指定显示尾部的最后多少行
  4. $ tail -行数 文件名

7. 链接的创建

链接分两种类型: 软连接和硬链接。软连接相当于 windows 中的快捷方式,硬链接前边也已经介绍过了文件并不会进行拷贝,只是多出一个新的文件名并且硬链接计数会加 1。

  • 软连接
  1. # 语法: ln -s 源文件路径 软链接文件的名字(可以带路径)
  2. # 查看目录文件
  3. [root@VM-8-14-centos ~/luffy]# ll
  4. total 8
  5. drwxr-xr-x 3 root root 4096 Jan 25 17:27 get
  6. -rw-r--r-- 1 root root 37 Jan 25 17:26 onepiece.txt
  7. # 给 onepiece.txt 创建软连接, 放到子目录 get
  8. [root@VM-8-14-centos ~/luffy]# ln -s /root/luffy/onepiece.txt get/link.lnk
  9. [root@VM-8-14-centos ~/luffy]# ll get
  10. total 4
  11. lrwxrwxrwx 1 root root 24 Jan 25 17:27 link.lnk -> /root/luffy/onepiece.txt
  12. drwxr-xr-x 2 root root 4096 Jan 24 21:37 onepiece

在创建软链接的时候, 命令中的 源文件路径建议使用绝对路径,这样才能保证创建出的软链接文件在任意目录中移动都可以访问到链接的那个源文件。

  • 硬链接
  1. # 语法: ln 源文件 硬链接文件的名字(可以带路径)
  2. # 创建硬链接文件, 放到子目录中
  3. [root@VM-8-14-centos ~/luffy]# ln onepiece.txt get/link.txt
  4. # 查看链接文件和硬链接计数, 从 1 --> 2
  5. [root@VM-8-14-centos ~/luffy]# ll get
  6. total 8
  7. lrwxrwxrwx 1 root root 24 Jan 25 17:27 link.lnk -> /root/luffy/onepiece.txt
  8. -rw-r--r-- 2 root root 37 Jan 25 17:26 link.txt
  9. drwxr-xr-x 2 root root 4096 Jan 24 21:37 onepiece

硬链接和软链接不同,它是通过文件名直接找对应的硬盘地址,而不是基于路径,因此源文件使用相对路径即可,无需为其制定绝对路径。

目录是不允许创建硬链接的。

8. 文件属性

文件属性相关的命令主要是修改用户对文件的操作权限,文件所有者,文件所属组的相关信息。

8.1 修改文件文件权限

文件权限是针对文件所有者 , 文件所属组用户 , 其他人这三类人而言的,对应的操作指令是 chmod。设置方式也有两种,分别为文字设定法和数字设定法。

文字设定法是通过一些关键字 r, w, x, - 来描述用户对文件的操作权限。

数字设定法是通过一些数字 0, 1, 2, 4, 5, 6, 7 来描述用户对文件的操作权限。

  • 文字设定法
  1. #chmod
  2. # 语法格式: chmod who [+|-|=] mod 文件名
  3. - who:
  4. - u: user -> 文件所有者
  5. - g: group -> 文件所属组用户
  6. - o: other -> 其他
  7. - a: all, 以上是三类人 u+g+o
  8. - 对权限的操作:
  9. +: 添加权限
  10. -: 去除权限
  11. =: 权限的覆盖
  12. - mod: 权限
  13. r: read, 读
  14. w: write, 写
  15. x: execute, 执行
  16. -: 没有权限
  17. # 将文件所有者权限设置为读和执行, 也就是权限覆盖
  18. robin@OS:~/Linux$ chmod u=rx b.txt
  19. robin@OS:~/Linux$ ll b.txt
  20. -r-xrw-r-- 2 robin robin 2929 Apr 14 18:53 b.txt*
  21. # 给其他人添加写和执行权限
  22. robin@OS:~/Linux$ chmod o+wx b.txt
  23. robin@OS:~/Linux$ ll b.txt
  24. -r-xrw-rwx 2 robin robin 2929 Apr 14 18:53 b.txt*
  25. # 给文件所属组用户去掉读和执行权限
  26. robin@OS:~/Linux$ chmod g-rx b.txt
  27. robin@OS:~/Linux$ ll b.txt
  28. -r-x-w-rwx 2 robin robin 2929 Apr 14 18:53 b.txt*
  29. # 将文件所有者,文件所属组用户,其他人权限设置为读++执行
  30. robin@OS:~/Linux$ chmod a=rwx b.txt
  31. robin@OS:~/Linux$ ll b.txt
  32. -rwxrwxrwx 2 robin robin 2929 Apr 14 18:53 b.txt*
  • 数字设定法
  1. # 语法格式: chmod [+|-|=] mod 文件名
  2. - 对权限的操作:
  3. +: 添加权限
  4. -: 去除权限
  5. =: 权限的覆盖, 等号可以不写
  6. - mod: 权限描述, 所有权限都放开是 7
  7. - 4: read, r
  8. - 2: write, w
  9. - 1: execute , x
  10. - 0: 没有权限
  11. # 分解: chmod 0567 a.txt
  12. 0 5 6 7
  13. 八进制 文件所有者 文件所属组用户 其他人
  14. r + x r + w r+w+x
  15. ######################### 举例 #########################
  16. # 查看文件 c.txt 的权限
  17. robin@OS:~/Linux$ ll c.txt
  18. -rwxrwxrwx 2 robin robin 2929 Apr 14 18:53 c.txt*
  19. # 文件所有者去掉执行权限, 所属组用户去掉写权限, 其他人去掉读+写权限
  20. robin@OS:~/Linux$ chmod -123 c.txt
  21. robin@OS:~/Linux$ ll c.txt
  22. -rw-r-xr-- 2 robin robin 2929 Apr 14 18:53 c.txt*
  23. # 文件所有者添加执行权限, 所属组用户和其他人权限不变
  24. robin@OS:~/Linux$ chmod +100 c.txt
  25. robin@OS:~/Linux$ ll c.txt
  26. -rwxr-xr-- 2 robin robin 2929 Apr 14 18:53 c.txt*
  27. # 将文件所有者,文件所属组用户,其他人权限设置为读+写, 没有执行权限
  28. robin@OS:~/Linux$ chmod 666 c.txt
  29. robin@OS:~/Linux$ ll c.txt
  30. -rw-rw-rw- 2 robin robin 2929 Apr 14 18:53 c.txt

8.2 修改文件所有者

默认情况下,文件是通过哪个用户创建出来的,就属于哪个用户,这个用户属于哪个组,文件就属于哪个组。如果有特殊需求,可以修改文件所有者,对应的操作命令是 chown。因为修改文件所有者就跨用户操作,普通用户没有这个权限,需要借助管理员权限才能完成该操作。

普通用户借助管理员权限执行某些shell命令, 需要在命令前加关键字sudo, 但是普通用户默认是没有使用 sudo的资格的, 需要修改 /etc/sudoers 文件 。

  1. # 语法1-只修改所有者:
  2. $ sudo chown 新的所有者 文件名
  3. # 语法2-同时修改所有者和所属组:
  4. $ sudo chown 新的所有者:新的组名 文件名
  5. # 查看文件所有者:b.txt 属于 robin 用户
  6. robin@OS:~/Linux$ ll b.txt
  7. -rw-rw-rw- 2 robin robin 2929 Apr 14 18:53 b.txt
  8. # 将 b.txt 的所有者修改为 luffy
  9. robin@OS:~/Linux$ sudo chown luffy b.txt
  10. [sudo] password for robin:
  11. robin@OS:~/Linux$ ll b.txt
  12. -rw-rw-rw- 2 luffy robin 2929 Apr 14 18:53 b.txt
  13. # 修改文件所有者和文件所属组
  14. # 查看文件所有者和所属组
  15. robin@OS:~/Linux$ ll b.txt
  16. -rw-rw-rw- 2 luffy robin 2929 Apr 14 18:53 b.txt
  17. # 同时修改文件所有者和文件所属组
  18. robin@OS:~/Linux$ sudo chown robin:luffy b.txt
  19. robin@OS:~/Linux$ ll b.txt
  20. -rw-rw-rw- 2 robin luffy 2929 Apr 14 18:53 b.txt

8.2.1普通用户添加 sudo 权限

1. 添加新用户

我们在 Linux 系统中经常需要根据不同的需求创建对应的新用户,但是新用户作为一个普通用户,权限是非常有限的,默认不能够使用管理员权限执行某些管理员才能执行的命令 , 给大家演示一下操作步骤:

  1. # 添加新用户 sanji
  2. [root@VM-8-14-centos ~]# adduser sanji
  3. # 给新用户 sanji 设置一个密码
  4. [root@VM-8-14-centos ~]# passwd sanji
  5. Changing password for user sanji.
  6. New password:
  7. Retype new password:
  8. passwd: all authentication tokens updated successfully.
  9. # 切换到 sanji 用户
  10. [root@VM-8-14-centos ~]# su - sanji
  11. # 让 sanji 用户执行一个只有管理员才有权限执行的操作, 因此需要在命令前加 sudo
  12. [sanji@VM-8-14-centos ~]$ sudo updatedb
  13. We trust you have received the usual lecture from the local System
  14. Administrator. It usually boils down to these three things:
  15. #1) Respect the privacy of others.
  16. #2) Think before you type.
  17. #3) With great power comes great responsibility.
  18. [sudo] password for sanji:
  19. sanji is not in the sudoers file. This incident will be reported.

最后命令还是没能够执行,原因是没有权限,最后提示告诉我们 sanji is not in the sudoers file, 因此我们只需要将用户 sanji 添加到这个文件中就可以了,说干就干。

2. 添加 sudo 权限

这个叫做 sudoers 的文件位于 /etc 目录下,我们先切换到 /etc 目录,然后查看一下这个文件的详细信息

  1. $ cd /etc/
  2. $ ll sudoers
  3. -r-------- 1 root root 4382 Jan 21 23:16 sudoers

我们惊奇的发现这个文件的所有者 root 对它也只有读权限,默认是不能修改的,作为 root 以外的其他用户对它没有任何的操作权限。

解决方案:

  1. 先切换到 root 用户
  2. 在 root 用户下修改这个文件属性,给其添加写权限
  3. 修改文件内容,把普通用户 sanji 添加进去,保存退出
  4. 将文件权限修改为原来的 400 (r--------)
  5. 切换到用户 sanji, 这时候就可以使用 sudo 了,权限添加成功

相关的操作命令如下:

  1. # 1. 切换到root用户
  2. $ su root
  3. Password: # 输入root用户的密码
  4. # 2. 修改文件权限, 暴力一点没有关系, 反正还需要改回去, 直接 777 就行
  5. $ chmod 777 sudoers
  6. # 3. 使用 vim 打开这个文件
  7. $ vim sudoers
  8. # 4. 在文件中找到这一行, 在文件偏尾部的位置
  9. root ALL=(ALL) ALL
  10. # 5. 照葫芦画瓢, 在下边新添加一行内容如下:
  11. root ALL=(ALL) ALL # 原来的内容
  12. sanji ALL=(ALL) ALL # 新添加的行, 将用户名指定为 sanji 即可
  13. # 6. 保存退出 (先按esc, 然后输入 :wq)
  14. # 7. 将文件改回原来的权限
  15. $ chmod 400 sudoers

恭喜,权限设置成功,你的普通的用户可以使用 sudo 执行只有管理员才能操作的命令啦。

8.3 修改文件所属组

普通用户没有修改文件所属组的权限,如果需要修改需要借助管理员权限才能完成,需要使用的命令是 chgrp。当然了这个属性的修改也可以使用 chown 命令来完成。

  1. # 只修改文件所属的组, 普通用户没有这个权限, 借助管理员的权限
  2. # 语法: sudo chgrp 新的组 文件名
  3. # 查看文件所属组信息
  4. robin@OS:~/Linux$ ll b.txt
  5. -rw-rw-rw- 2 robin luffy 2929 Apr 14 18:53 b.txt
  6. # 修改文件所属的组
  7. robin@OS:~/Linux$ sudo chgrp robin b.txt
  8. robin@OS:~/Linux$ ll b.txt
  9. -rw-rw-rw- 2 robin robin 2929 Apr 14 18:53 b.txt

9. 其他命令

9.1 tree 命令

该命令的作用是以树状结构显示目录 , tree 工具默认是没有的,需要手动安装,系统版本不同安装方式也不尽相同:

  • ubuntu: sudo apt install tree
  • centos: sudo yum install tree

如果是基于管理员用户安装软件,不需要加 sudo。该命令有一个常用参数 -L, 即 (layer) 显示目录的层数。

  1. # 语法格式
  2. $ tree [-L n] # 查看当前目录的结构, n为显示的目录层数
  3. $ tree 目录名 [-L n] # 查看指定目录的结构, n为显示的目录层数
  4. # 只显示1
  5. [root@VM-8-14-centos ~]# tree -L 1
  6. .
  7. |-- ace
  8. |-- file
  9. |-- ipc.tar.gz
  10. |-- link.lnk -> /root/luffy/onepiece.txt
  11. `-- luffy
  12. # 显示2层目录
  13. [root@VM-8-14-centos ~]# tree -L 2
  14. .
  15. |-- ace
  16. | `-- brother
  17. |-- file
  18. | |-- dir
  19. | |-- haha.tar.gz
  20. | |-- hello
  21. | |-- link -> /root/file/test
  22. | |-- pipe-2
  23. | |-- subdir
  24. | `-- test
  25. |-- ipc.tar.gz
  26. |-- link.lnk -> /root/luffy/onepiece.txt
  27. `-- luffy
  28. |-- get
  29. `-- onepiece.txt

9.2 pwd 命令

pwd 命令用户当前所在的工作目录,没有参数,直接执行该命令即可。

  1. # 查看当前用户在哪个目录中, 所在的目录一般称之为工作目录
  2. [root@VM-8-14-centos ~/luffy/get/onepiece]# pwd
  3. /root/luffy/get/onepiece # 当前工作目录

9.3 touch 命令

使用 touch 命令可以创建一个新的空文件 , 如果指定的文件是已存在的,只会更新文件的修改日期,对内容没有任何影响。

  1. # 语法: touch 文件名
  2. # 查看目录信息
  3. [root@VM-8-14-centos ~/luffy]# ll
  4. total 8
  5. drwxr-xr-x 3 root root 4096 Jan 25 17:38 get
  6. -rw-r--r-- 2 root root 37 Jan 25 17:26 onepiece.txt
  7. # 创建一个新的文件 robin.txt
  8. [root@VM-8-14-centos ~/luffy]# touch robin.txt
  9. # 再次查看目录中的文件信息, 发现 robin.txt是空的, 大小为 0
  10. [root@VM-8-14-centos ~/luffy]# ll
  11. total 8
  12. drwxr-xr-x 3 root root 4096 Jan 25 17:38 get
  13. -rw-r--r-- 2 root root 37 Jan 25 17:26 onepiece.txt
  14. -rw-r--r-- 1 root root 0 Jan 25 17:54 robin.txt
  15. # touch 后的参数指定一个已经存在的文件名
  16. [root@VM-8-14-centos ~/luffy]# touch onepiece.txt
  17. # 继续查看目录中的文件信息, 发现文件时间被更新了: 37 Jan 25 17:26 --> 37 Jan 25 17:54
  18. [root@VM-8-14-centos ~/luffy]# ll
  19. total 8
  20. drwxr-xr-x 3 root root 4096 Jan 25 17:38 get
  21. -rw-r--r-- 2 root root 37 Jan 25 17:54 onepiece.txt
  22. -rw-r--r-- 1 root root 0 Jan 25 17:54 robin.txt

9.4 which 命令

which 命令可以查看要执行的命令所在的实际路径,命令解析器工作的时候也会搜索这个目录。需要注意的是该命令只能查看非内建的shell指令所在的实际路径, 有些命令是直接写到内核中的, 无法查看。

我们使用的大部分 shell 命令都是放在系统的 /bin 或者 /usr/bin 目录下:

  1. # 由于使用的Linux版本不同, 得到的路径也会有不同
  2. [root@VM-8-14-centos ~]# which ls
  3. alias ls='ls --color=auto'
  4. /usr/bin/ls
  5. [root@VM-8-14-centos ~]# which date
  6. /usr/bin/date
  7. [root@VM-8-14-centos ~]# which cp
  8. alias cp='cp -i'
  9. /usr/bin/cp
  10. [root@VM-8-14-centos ~]# which mv
  11. alias mv='mv -i'
  12. /usr/bin/mv
  13. [root@VM-8-14-centos ~]# which pwd
  14. /usr/bin/pwd

9.5 重定向命令

关于重定向使用最多的是就是输出重定向 , 顾名思义就是修改输出的数据的位置,通过重定向操作我们可以非常方便的进行文件的复制,或者文件内容的追加。输出重定向使用的不是某个关键字而是符号 > 或者 >>。

  • >: 将文件内容写入到指定文件中,如果文件中已有数据,则会使用新数据覆盖原数据
  • >>: 将输出的内容追加到指定的文件尾部
  1. # 输出的重定向举例: printf默认是要将数据打印到终端, 可以修改默认的输出位置 => 重定向到某个文件中
  2. # 关键字 >
  3. # 执行一个shell指令, 获得一个输出, 这个输出默认显示到终端, 如果要将其保存到文件中, 就可以使用重定向
  4. # 如果当前目录下test.txt不存在, 会被创建, 如果存在, 内容被覆盖
  5. $ date > test.txt
  6. # 日期信息被写入到文件 test.txt中
  7. robin@OS:~/Linux$ cat test.txt
  8. Wed Apr 15 09:37:52 CST 2020
  9. # 如果不希望文件被覆盖, 而是追加, 需要使用 >>
  10. in@OS:~/Linux$ date >> test.txt
  11. # 日期信息被追加到 test.txt中
  12. robin@OS:~/Linux$ cat test.txt
  13. Wed Apr 15 09:37:52 CST 2020
  14. Wed Apr 15 09:38:44 CST 2020
  15. # 继续追加信息
  16. robin@OS:~/Linux$ date >> test.txt
  17. robin@OS:~/Linux$ cat test.txt
  18. Wed Apr 15 09:37:52 CST 2020
  19. Wed Apr 15 09:38:44 CST 2020
  20. Wed Apr 15 09:39:03 CST 2020
原文链接:https://blog.csdn.net/m0_37792813/article/details/126324661
posted on 2024-04-28 19:03  sunny123456  阅读(2)  评论(0编辑  收藏  举报