Linux-文件管理命令
目录
1. cd 命令
在 Linux 终端中如果想要进行工作路径的切换,需要使用 cd 命令。在进行目录的切换的时候, 我们可以使用相对路径也可以使用绝对路径。
进入指定目录
$ cd 目录名
- 目录名: 使用相对路径 / 绝对路径都可以,该路径必须是一个有效路径
- 特殊的目录:
..: 表示当前目录的上一级目录,使用 cd .. 或者 cd ../ 都可以
. : 表示当前目录,使用 . 或者./ 都可以,cd . 不会切换目录
进入家目录
每个用户 (普通用户和 root) 都有一个属于自己的目录,比如:
- robin 是普通用户,家目录: /home/robin
- luffy 是用户,家目录: /home/luffy
- root 是管理员用户,家目录: /root
按照上边的格式来表示家目录书写起来比较麻烦,有一种相对简单的写法就是使用 ~ 表示。如果是使用 cd 命令切换到家目录,后边可以什么路径都不加,这样也可以进入到当前用户的家目录。综上所述也就是通过 cd 进入到当前用户的家目录一共有三种不同的方式。
$ cd # 方式1
$ cd ~ # 方式2
$ cd /home/用户名 # 方式3
在临近的两个目录之间切换
如果我们要频繁的在两个路径之间切换,也有相关的快捷操作,尤其是对于比较长的路径,可以是这简直是一个福利:
# 通过cd进入到目录1: /usr/include/c++/7.5.0/ext/pb_ds/detail/list_update_map_/
# 通过cd进入到目录2: /home/luffy/get/onepiece/itis/a/goldfish
# 频繁在两个目录之间切换
$ cd -
2. ls 命令
ls 就是 list, 打印指定的文件信息,如果是目录,显示对应目录中有哪些子文件,语法格式如下:
$ ls [args] # 查看当前目录
$ ls [args] 目录名 # 查看指定目录
$ ls [args] 文件名 # 查看某个文件的信息
2.1 显示所有文件
给 ls 添加 -a 参数(就是 all 的意思)就可以显示指定目录中是所有文件了,因为默认情况下具有隐藏属性的文件是不会显示出来的。那么在 Linux 中什么样是文件才能被隐藏呢?起始很简单只需要在文件名前边加一个点 (.) 文件就具有隐藏属性了, 例如: .demo, .a.txt
# 查看root家目录下所有非隐藏文件
[root@VM-8-14-centos ~]# ls
ace luffy
# 查看root家目录下所有文件 (隐藏 + 非隐藏)
[root@VM-8-14-centos ~]# ls -a
. ace .bash_logout .bashrc .config .lesshst .pip .pydistutils.cfg
.. .bash_history .bash_profile .cache .cshrc luffy .pki .ssh .viminfo
2.2 显示文件详细信息
给 ls 添加 -l 参数(就是 list 的意思)我们就可以看到文件的详细信息了,里边的信息量还是非常大的,其中包括: 文件类型 , 文件所有者对文件的操作权限 , 文件所属组用户对文件的操作权限 , 其他人对文件的操作权限 , 硬链接计数 , 文件所有者 , 文件所属组 , 文件大小 , 文件的修改日期 , 文件名
# 显示文件的详细信息
robin@OS:~$ ls -l
total 204
-rw-rw-r-- 1 robin robin 268 Mar 22 17:32 a.c
drwxrwxr-x 2 robin robin 4096 Aug 4 2019 config
-rw-r--r-- 1 robin robin 129487 Dec 25 11:28 english.txt
drwxrwxr-x 4 robin robin 4096 Jan 15 17:48 libevent
drwxrwxr-x 17 robin robin 4096 Apr 13 22:42 Linux
drwxrwxr-x 8 robin robin 4096 Feb 5 16:57 luffy
-rw-r--r-- 1 robin robin 2223 Mar 2 14:39 main.cpp
-rw-rw-r-- 1 robin robin 2167 Dec 1 22:41 mysql_test.c
drwxrwxr-x 9 robin robin 4096 Mar 26 19:19 network
-rw-r--r-- 1 robin robin 1406 Mar 2 20:18 occi.cpp
drwxrwxr-x 3 robin robin 4096 Oct 30 12:09 oradiag_robin
drwxrwxr-x 11 robin robin 4096 Mar 26 09:40 package
drwxrwxr-x 2 robin robin 4096 Dec 29 17:11 process
drwxrwxr-x 17 robin robin 4096 Mar 29 22:31 projects
-rw-r--r-- 1 robin robin 1816 Jan 6 09:37 sidtime.c
drwxrwxr-x 2 robin robin 4096 Mar 22 11:31 socket
-rw-r--r-- 1 robin robin 583 Oct 18 17:21 test.c
-rw-r--r-- 1 robin robin 2015 Mar 1 17:05 test.cpp
-rw-rw-r-- 1 robin robin 2218 Dec 2 17:02 test_mysql.c
drwxrwxr-x 5 robin robin 4096 Jan 13 17:35 udp
# 文件详细信息介绍
d rwx rwx r-x 5 robin robin 4096 Jan 13 17:35 udp
| | | | | | | | | |
文件 文件所 文件所 其他人 硬链接 文件 文件 文件大小 文件修改时间 文件名
类型 有者权限 属组权限 权限 计数 所有者 所属组
在查看文件详细信息的时候,还有一种简单的写法,可以使用 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 中不同的用户可以对文件拥有不同的操作权限,权限一共有四种: 读权限 , 写权限 , 执行权限 , 无权限。
-
- rwx rw- r-- 1 robin robin 2218 Dec 2 17:02 app | | | | 文件类型 文件所有 文件所属 其他人权限 者权限 组权限
从上边的例子中可以看出:
- 文件所有者对文件有读、写、执行权限
- 文件所属组用户对文件有 读、写权限, 没有执行权限
- 其他人对文件有 读权限, 没有写、执行权限
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)(就是命令说人话)。
# 直接查看文件大小
[root@VM-8-14-centos ~]# ls -l ipc.tar.gz
-rw-r--r-- 1 root root 122962 Apr 25 2020 ipc.tar.gz
# 添加 -h 参数查看文件大小
[root@VM-8-14-centos ~]# ls -lh ipc.tar.gz
-rw-r--r-- 1 root root 121K Apr 25 2020 ipc.tar.gz
2.3.2 显示目录后缀
在查看文件信息的时候,处理通过文件类型区分该文件是不是一个目录之外,还可以通过一个参数 -F 在目录名后边显示一个 /, 这样就可以直接区分出来了。
# 直接查看文件信息
[root@VM-8-14-centos ~/file]# ls -l
total 8
drwxr-xr-x 2 root root 4096 Jan 25 14:29 dir
-rw-r--r-- 1 root root 0 Jan 25 14:49 haha.tar.gz
-rwxrwxrwx 1 root root 0 Jan 25 14:49 hello
lrwxrwxrwx 1 root root 15 Jan 25 14:30 link -> /root/file/test
prw-r--r-- 1 root root 0 Jan 25 14:24 pipe-2
drwxrwxrwx 2 root root 4096 Jan 25 15:20 subdir
-rw-r--r-- 1 root root 0 Jan 25 14:23 test
# 添加了 -F 参数查看文件信息
[root@VM-8-14-centos ~/file]# ls -lF
total 8
drwxr-xr-x 2 root root 4096 Jan 25 14:29 dir/
-rw-r--r-- 1 root root 0 Jan 25 14:49 haha.tar.gz
-rwxrwxrwx 1 root root 0 Jan 25 14:49 hello*
lrwxrwxrwx 1 root root 15 Jan 25 14:30 link -> /root/file/test
prw-r--r-- 1 root root 0 Jan 25 14:24 pipe-2|
drwxrwxrwx 2 root root 4096 Jan 25 15:20 subdir/
-rw-r--r-- 1 root root 0 Jan 25 14:23 test
3. 创建删除目录
创建目录
目录的创建分为两种,一种是创建单个目录,另一种是一次性创建多层目录,使用的命令是 mkdir, 后边参数是要创建的目录的名字,如果是多层目录需要添加参数 -p。
关于创建的目录所在的路径可以是相对路径, 也可以是绝对路径
# 单层目录
$ mkdir 新目录的名字
# 多层目录, 需要加参数 -p
$ mkdir parent/child/baby1/baby2 -p
- 删除目录
如果要删除已经存在的路径一共有两种方式,可以使用 rmdir 或者 rm
rmdir: 只能删除空目录,有点 low,不好用
rm: 可以删除文件也可以删除目录,如果删除的的是目录,需要加参数 -r, 意思是递归 (recursion)
rm 命令还有另外两个经常使用的参数:
- -i: 删除的时候给提示
- -f: 强制删除文件,没有提示直接删除并且不能恢复,慎用
# 1. low, 矮穷矬, 只能删除空目录
$ rmdir 目录名
# 2. 高大上, 可以删除目录也可以删除文件
# 删除目录需要加参数 -r, 递归的意思, 删除之后是不能恢复的
$ rm 目录名 -r
4. cp 命令
cp 就是 copy, 拷贝,使用这个命令可以拷贝文件也可以拷贝目录
- 拷贝文件 => 文件不存在得到新文件, 文件存在就覆盖
# `语法: cp 要拷贝的文件 得到的文件`
# `场景1: 文件A, 将A拷贝一份得到文件B`
$ cp 文件A 文件B
# `场景2: 文件A存在的, 文件B也是存在的, 执行下边的拷贝 ==> 文件A覆盖文件B`
$ cp 文件A 文件B
- 拷贝目录 ==> 目录不存在得到新目录, 该目录被拷贝到存在的目录中
# 拷贝目录需要参数 -r
# 场景1: 目录A, 通过拷贝得到不存在的目录B
$ cp 目录A 目录B -r
# 场景2: 目录A存在的, 目录B也是存在的, 执行下边的拷贝 ==> 目录A会被拷贝并将其放到目录B中
$ cp 目录A 目录B -r
# 场景3: 把A目录里的某一个或者多个文件拷贝到B目录中
$ cp A/a.txt B # 拷贝 A目录中的 a.txt 到目录B中
$ cp A/* B -r # 拷贝 A目录中的所有文件到目录B中, 不能确定A目录中是否有子目录, 因此需要加 -r
5. mv 命令
mv 就是 move, 这个 Linux 命令既能移动文件所在目录也可以给文件改名。
- 文件的移动
# 语法: mv 要移动的文件 目录
# 有一个文件A, 移动到目录B中
# 其中A可以是文件也可以是目录, B必须是目录而且必须是存在的
$ mv A B
- 文件改名
# 语法: mv 要改名的文件 新名字(原来是不存在的,这点很重要)
# 其中A可以是文件也可以是目录,并且是存在的, B原来是不存在的
$ mv A B
- 文件覆盖
# 语法: mv 存在文件A 存在的文件B
# 其中A是文件(非目录)并且是存在的, B也是一个文件(非目录)并且也存在
# A文件中的内容覆盖B文件中的内容, A文件被删除, 只剩下B文件
$ mv A B
6 查看文件内容
如果想要查看文件内容方式有很多,最常用的是 vim, 下面介绍一下 vim 以外的一些的一些方式:
- cat
该命令可以将文件内容显示到终端,由于终端是有缓存的,因此能显示的字节数也是受限制的。 如果文件太大数据就不能完全显示出来了,因此该命令适合查看比较小的文件内容。
$ cat 文件名
- more
该命令比 cat 要高级一点,我们可以以翻屏的方式查看文件中的内容,使用方式如下:
$ more 文件名
# 快捷键
- 回车: 显示下一行
- 空格: 向下滚动一屏
- b: 返回上一屏
- q: 退出more
- less
该命令和 more 命令差不多,我们可以以翻屏的方式查看文件中的内容,使用方式如下:
$ less 文件名
# 快捷键
- b: 向上翻页
- 空格: 向后翻页
- 回车: 显示下一行
- 上下键: 上下滚动
- q:退出
- head
使用该命令可以查看文件头部的若干行信息,使用方式如下:
# 默认显示文件的前10行
$ head 文件名
# 指定显示头部的前多少行
$ head -行数 文件名
- tail
使用该命令可以查看文件尾部的若干行信息,使用方式如下:
# 默认显示文件的后10行
$ tail 文件名
# 指定显示尾部的最后多少行
$ tail -行数 文件名
7. 链接的创建
链接分两种类型: 软连接和硬链接。软连接相当于 windows 中的快捷方式,硬链接前边也已经介绍过了文件并不会进行拷贝,只是多出一个新的文件名并且硬链接计数会加 1。
- 软连接
# 语法: ln -s 源文件路径 软链接文件的名字(可以带路径)
# 查看目录文件
[root@VM-8-14-centos ~/luffy]# ll
total 8
drwxr-xr-x 3 root root 4096 Jan 25 17:27 get
-rw-r--r-- 1 root root 37 Jan 25 17:26 onepiece.txt
# 给 onepiece.txt 创建软连接, 放到子目录 get 中
[root@VM-8-14-centos ~/luffy]# ln -s /root/luffy/onepiece.txt get/link.lnk
[root@VM-8-14-centos ~/luffy]# ll get
total 4
lrwxrwxrwx 1 root root 24 Jan 25 17:27 link.lnk -> /root/luffy/onepiece.txt
drwxr-xr-x 2 root root 4096 Jan 24 21:37 onepiece
在创建软链接的时候, 命令中的 源文件路径建议使用绝对路径,这样才能保证创建出的软链接文件在任意目录中移动都可以访问到链接的那个源文件。
- 硬链接
# 语法: ln 源文件 硬链接文件的名字(可以带路径)
# 创建硬链接文件, 放到子目录中
[root@VM-8-14-centos ~/luffy]# ln onepiece.txt get/link.txt
# 查看链接文件和硬链接计数, 从 1 --> 2
[root@VM-8-14-centos ~/luffy]# ll get
total 8
lrwxrwxrwx 1 root root 24 Jan 25 17:27 link.lnk -> /root/luffy/onepiece.txt
-rw-r--r-- 2 root root 37 Jan 25 17:26 link.txt
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 来描述用户对文件的操作权限。
- 文字设定法
#chmod
# 语法格式: chmod who [+|-|=] mod 文件名
- who:
- u: user -> 文件所有者
- g: group -> 文件所属组用户
- o: other -> 其他
- a: all, 以上是三类人 u+g+o
- 对权限的操作:
+: 添加权限
-: 去除权限
=: 权限的覆盖
- mod: 权限
r: read, 读
w: write, 写
x: execute, 执行
-: 没有权限
# 将文件所有者权限设置为读和执行, 也就是权限覆盖
robin@OS:~/Linux$ chmod u=rx b.txt
robin@OS:~/Linux$ ll b.txt
-r-xrw-r-- 2 robin robin 2929 Apr 14 18:53 b.txt*
# 给其他人添加写和执行权限
robin@OS:~/Linux$ chmod o+wx b.txt
robin@OS:~/Linux$ ll b.txt
-r-xrw-rwx 2 robin robin 2929 Apr 14 18:53 b.txt*
# 给文件所属组用户去掉读和执行权限
robin@OS:~/Linux$ chmod g-rx b.txt
robin@OS:~/Linux$ ll b.txt
-r-x-w-rwx 2 robin robin 2929 Apr 14 18:53 b.txt*
# 将文件所有者,文件所属组用户,其他人权限设置为读+写+执行
robin@OS:~/Linux$ chmod a=rwx b.txt
robin@OS:~/Linux$ ll b.txt
-rwxrwxrwx 2 robin robin 2929 Apr 14 18:53 b.txt*
- 数字设定法
# 语法格式: chmod [+|-|=] mod 文件名
- 对权限的操作:
+: 添加权限
-: 去除权限
=: 权限的覆盖, 等号可以不写
- mod: 权限描述, 所有权限都放开是 7
- 4: read, r
- 2: write, w
- 1: execute , x
- 0: 没有权限
# 分解: chmod 0567 a.txt
0 5 6 7
八进制 文件所有者 文件所属组用户 其他人
r + x r + w r+w+x
######################### 举例 #########################
# 查看文件 c.txt 的权限
robin@OS:~/Linux$ ll c.txt
-rwxrwxrwx 2 robin robin 2929 Apr 14 18:53 c.txt*
# 文件所有者去掉执行权限, 所属组用户去掉写权限, 其他人去掉读+写权限
robin@OS:~/Linux$ chmod -123 c.txt
robin@OS:~/Linux$ ll c.txt
-rw-r-xr-- 2 robin robin 2929 Apr 14 18:53 c.txt*
# 文件所有者添加执行权限, 所属组用户和其他人权限不变
robin@OS:~/Linux$ chmod +100 c.txt
robin@OS:~/Linux$ ll c.txt
-rwxr-xr-- 2 robin robin 2929 Apr 14 18:53 c.txt*
# 将文件所有者,文件所属组用户,其他人权限设置为读+写, 没有执行权限
robin@OS:~/Linux$ chmod 666 c.txt
robin@OS:~/Linux$ ll c.txt
-rw-rw-rw- 2 robin robin 2929 Apr 14 18:53 c.txt
8.2 修改文件所有者
默认情况下,文件是通过哪个用户创建出来的,就属于哪个用户,这个用户属于哪个组,文件就属于哪个组。如果有特殊需求,可以修改文件所有者,对应的操作命令是 chown。因为修改文件所有者就跨用户操作,普通用户没有这个权限,需要借助管理员权限才能完成该操作。
普通用户借助管理员权限执行某些shell命令, 需要在命令前加关键字sudo, 但是普通用户默认是没有使用 sudo的资格的, 需要修改 /etc/sudoers 文件 。
# 语法1-只修改所有者:
$ sudo chown 新的所有者 文件名
# 语法2-同时修改所有者和所属组:
$ sudo chown 新的所有者:新的组名 文件名
# 查看文件所有者:b.txt 属于 robin 用户
robin@OS:~/Linux$ ll b.txt
-rw-rw-rw- 2 robin robin 2929 Apr 14 18:53 b.txt
# 将 b.txt 的所有者修改为 luffy
robin@OS:~/Linux$ sudo chown luffy b.txt
[sudo] password for robin:
robin@OS:~/Linux$ ll b.txt
-rw-rw-rw- 2 luffy robin 2929 Apr 14 18:53 b.txt
# 修改文件所有者和文件所属组
# 查看文件所有者和所属组
robin@OS:~/Linux$ ll b.txt
-rw-rw-rw- 2 luffy robin 2929 Apr 14 18:53 b.txt
# 同时修改文件所有者和文件所属组
robin@OS:~/Linux$ sudo chown robin:luffy b.txt
robin@OS:~/Linux$ ll b.txt
-rw-rw-rw- 2 robin luffy 2929 Apr 14 18:53 b.txt
8.2.1普通用户添加 sudo 权限
1. 添加新用户
我们在 Linux 系统中经常需要根据不同的需求创建对应的新用户,但是新用户作为一个普通用户,权限是非常有限的,默认不能够使用管理员权限执行某些管理员才能执行的命令 , 给大家演示一下操作步骤:
# 添加新用户 sanji
[root@VM-8-14-centos ~]# adduser sanji
# 给新用户 sanji 设置一个密码
[root@VM-8-14-centos ~]# passwd sanji
Changing password for user sanji.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
# 切换到 sanji 用户
[root@VM-8-14-centos ~]# su - sanji
# 让 sanji 用户执行一个只有管理员才有权限执行的操作, 因此需要在命令前加 sudo
[sanji@VM-8-14-centos ~]$ sudo updatedb
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for sanji:
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 目录,然后查看一下这个文件的详细信息
$ cd /etc/
$ ll sudoers
-r-------- 1 root root 4382 Jan 21 23:16 sudoers
我们惊奇的发现这个文件的所有者 root 对它也只有读权限,默认是不能修改的,作为 root 以外的其他用户对它没有任何的操作权限。
解决方案:
- 先切换到 root 用户
- 在 root 用户下修改这个文件属性,给其添加写权限
- 修改文件内容,把普通用户 sanji 添加进去,保存退出
- 将文件权限修改为原来的 400 (r--------)
- 切换到用户 sanji, 这时候就可以使用 sudo 了,权限添加成功
相关的操作命令如下:
# 1. 切换到root用户
$ su root
Password: # 输入root用户的密码
# 2. 修改文件权限, 暴力一点没有关系, 反正还需要改回去, 直接 777 就行
$ chmod 777 sudoers
# 3. 使用 vim 打开这个文件
$ vim sudoers
# 4. 在文件中找到这一行, 在文件偏尾部的位置
root ALL=(ALL) ALL
# 5. 照葫芦画瓢, 在下边新添加一行内容如下:
root ALL=(ALL) ALL # 原来的内容
sanji ALL=(ALL) ALL # 新添加的行, 将用户名指定为 sanji 即可
# 6. 保存退出 (先按esc, 然后输入 :wq)
# 7. 将文件改回原来的权限
$ chmod 400 sudoers
恭喜,权限设置成功,你的普通的用户可以使用 sudo 执行只有管理员才能操作的命令啦。
8.3 修改文件所属组
普通用户没有修改文件所属组的权限,如果需要修改需要借助管理员权限才能完成,需要使用的命令是 chgrp。当然了这个属性的修改也可以使用 chown 命令来完成。
# 只修改文件所属的组, 普通用户没有这个权限, 借助管理员的权限
# 语法: sudo chgrp 新的组 文件名
# 查看文件所属组信息
robin@OS:~/Linux$ ll b.txt
-rw-rw-rw- 2 robin luffy 2929 Apr 14 18:53 b.txt
# 修改文件所属的组
robin@OS:~/Linux$ sudo chgrp robin b.txt
robin@OS:~/Linux$ ll b.txt
-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) 显示目录的层数。
# 语法格式
$ tree [-L n] # 查看当前目录的结构, n为显示的目录层数
$ tree 目录名 [-L n] # 查看指定目录的结构, n为显示的目录层数
# 只显示1层
[root@VM-8-14-centos ~]# tree -L 1
.
|-- ace
|-- file
|-- ipc.tar.gz
|-- link.lnk -> /root/luffy/onepiece.txt
`-- luffy
# 显示2层目录
[root@VM-8-14-centos ~]# tree -L 2
.
|-- ace
| `-- brother
|-- file
| |-- dir
| |-- haha.tar.gz
| |-- hello
| |-- link -> /root/file/test
| |-- pipe-2
| |-- subdir
| `-- test
|-- ipc.tar.gz
|-- link.lnk -> /root/luffy/onepiece.txt
`-- luffy
|-- get
`-- onepiece.txt
9.2 pwd 命令
pwd 命令用户当前所在的工作目录,没有参数,直接执行该命令即可。
# 查看当前用户在哪个目录中, 所在的目录一般称之为工作目录
[root@VM-8-14-centos ~/luffy/get/onepiece]# pwd
/root/luffy/get/onepiece # 当前工作目录
9.3 touch 命令
使用 touch 命令可以创建一个新的空文件 , 如果指定的文件是已存在的,只会更新文件的修改日期,对内容没有任何影响。
# 语法: touch 文件名
# 查看目录信息
[root@VM-8-14-centos ~/luffy]# ll
total 8
drwxr-xr-x 3 root root 4096 Jan 25 17:38 get
-rw-r--r-- 2 root root 37 Jan 25 17:26 onepiece.txt
# 创建一个新的文件 robin.txt
[root@VM-8-14-centos ~/luffy]# touch robin.txt
# 再次查看目录中的文件信息, 发现 robin.txt是空的, 大小为 0
[root@VM-8-14-centos ~/luffy]# ll
total 8
drwxr-xr-x 3 root root 4096 Jan 25 17:38 get
-rw-r--r-- 2 root root 37 Jan 25 17:26 onepiece.txt
-rw-r--r-- 1 root root 0 Jan 25 17:54 robin.txt
# touch 后的参数指定一个已经存在的文件名
[root@VM-8-14-centos ~/luffy]# touch onepiece.txt
# 继续查看目录中的文件信息, 发现文件时间被更新了: 37 Jan 25 17:26 --> 37 Jan 25 17:54
[root@VM-8-14-centos ~/luffy]# ll
total 8
drwxr-xr-x 3 root root 4096 Jan 25 17:38 get
-rw-r--r-- 2 root root 37 Jan 25 17:54 onepiece.txt
-rw-r--r-- 1 root root 0 Jan 25 17:54 robin.txt
9.4 which 命令
which 命令可以查看要执行的命令所在的实际路径,命令解析器工作的时候也会搜索这个目录。需要注意的是该命令只能查看非内建的shell指令所在的实际路径, 有些命令是直接写到内核中的, 无法查看。
我们使用的大部分 shell 命令都是放在系统的 /bin 或者 /usr/bin 目录下:
# 由于使用的Linux版本不同, 得到的路径也会有不同
[root@VM-8-14-centos ~]# which ls
alias ls='ls --color=auto'
/usr/bin/ls
[root@VM-8-14-centos ~]# which date
/usr/bin/date
[root@VM-8-14-centos ~]# which cp
alias cp='cp -i'
/usr/bin/cp
[root@VM-8-14-centos ~]# which mv
alias mv='mv -i'
/usr/bin/mv
[root@VM-8-14-centos ~]# which pwd
/usr/bin/pwd
9.5 重定向命令
关于重定向使用最多的是就是输出重定向 , 顾名思义就是修改输出的数据的位置,通过重定向操作我们可以非常方便的进行文件的复制,或者文件内容的追加。输出重定向使用的不是某个关键字而是符号 > 或者 >>。
- >: 将文件内容写入到指定文件中,如果文件中已有数据,则会使用新数据覆盖原数据
- >>: 将输出的内容追加到指定的文件尾部
# 输出的重定向举例: printf默认是要将数据打印到终端, 可以修改默认的输出位置 => 重定向到某个文件中
# 关键字 >
# 执行一个shell指令, 获得一个输出, 这个输出默认显示到终端, 如果要将其保存到文件中, 就可以使用重定向
# 如果当前目录下test.txt不存在, 会被创建, 如果存在, 内容被覆盖
$ date > test.txt
# 日期信息被写入到文件 test.txt中
robin@OS:~/Linux$ cat test.txt
Wed Apr 15 09:37:52 CST 2020
# 如果不希望文件被覆盖, 而是追加, 需要使用 >>
in@OS:~/Linux$ date >> test.txt
# 日期信息被追加到 test.txt中
robin@OS:~/Linux$ cat test.txt
Wed Apr 15 09:37:52 CST 2020
Wed Apr 15 09:38:44 CST 2020
# 继续追加信息
robin@OS:~/Linux$ date >> test.txt
robin@OS:~/Linux$ cat test.txt
Wed Apr 15 09:37:52 CST 2020
Wed Apr 15 09:38:44 CST 2020
Wed Apr 15 09:39:03 CST 2020
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2023-04-28 jar包运行后显示 没有主清单属性 IDEA 使用maven打jar包两种方式及pom配置
2023-04-28 Could not create the Java virtual machine解决
2023-04-28 IDEA从零到精通(21)之使用Maven clean发生错误Process terminated
2023-04-28 java -jar XXX.jar 没有主清单属性以及找不到或无法加载主类的问题
2023-04-28 Maven指令打包SpringBoot项目提示没有主清单文件
2023-04-28 将IDEA MAVEN项目打包成jar包的通用方法
2023-04-28 IDEA+Maven 打jar包