内容来自:Linux介绍
视频推荐:[Linux基础入门教程-linux命令-vim-gcc/g++ -动态库/静态库 -makefile-gdb调试](
目录
- day04
- 22、通过文字设定法修改用户对文件的操作权限
- 23、通过数字设定法修改文件的权限
- 24、修改文件所有者和所属组
- 25、tree—查看目录内容
- 26、pwd—touch—which命令
- pwd
- touch
- which
- 27、重定向操作
- 28、用户的切换
- 29、创建新用户
day04
22、通过文字设定法修改用户对文件的操作权限
文件权限是针对文件所有者
,文件所属组用户
,其他人
这三类人而言的,对应的操作指令是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*
23、通过数字设定法修改文件的权限
数字设定法:
# 语法格式: 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
tips:不对其他用户执行任何权限,使用数字 0
24、修改文件所有者和所属组
默认情况下,文件是通过哪个用户创建出来的,就属于哪个用户,这个用户属于哪个组,文件就属于哪个组。如果有特殊需求,可以修改文件所有者,对应的操作命令是
chown
。因为修改文件所有者就跨用户操作,普通用户没有这个权限,需要借助管理员权限才能完成该操作。
普通用户借助管理员权限执行某些shell命令, 需要在命令前加关键字sudo, 但是普通用户默认是没有使用 sudo的资格的, 需要修改 /etc/sudoers 文件
。
普通用户添加sudo权限
# 语法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
普通用户没有修改文件所属组的权限,如果需要修改需要借助管理员权限才能完成,需要使用的命令是
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
25、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
26、pwd—touch—which命令
pwd
pwd命令用户当前所在的工作目录,没有参数,直接执行该命令即可。
# 查看当前用户在哪个目录中, 所在的目录一般称之为工作目录
[root@VM-8-14-centos ~/luffy/get/onepiece]# pwd
/root/luffy/get/onepiece # 当前工作目录
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
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
27、重定向操作
关于重定向使用最多的是就是
输出重定向
,顾名思义就是修改输出的数据的位置,通过重定向操作我们可以非常方便的进行文件的复制,或者文件内容的追加。输出重定向使用的不是某个关键字而是符号>
或者>>
。
>
:将文件内容写入到指定文件中, 如果文件中已有数据, 则会使用新数据覆盖原数据>>
:将输出的内容追加到指定的文件尾部
# 输出的重定向举例: 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
# 或者使用 echo
echo abcdefg >> test.txt
每个汉字(如 “年”、“月”、“日”、“星期”)在 UTF-8 编码中占用 3
个字节,其余字符(数字、空格、冒号、英文字母)在 UTF-8 编码中占用 1 个字节。
28、用户的切换
Linux是一个多用户的操作系统,可以同时登陆多个用户,因此很多时候需要在多个用户之间切换,用户切换需要使用
su
或者su -
。使用su
只切换用户,当前的工作目录不会变化,但是使用su -
不仅会切换用户也会切换工作目录,工作目录切换为当前用户的家目录。从用户A切换到用户B, 如果还想再切换回用户A,可以直接使用
exit
。
# 只切换用户, 工作目录不变
$ su 用户名
# 举例:
robin@OS:~/Linux$ su luffy
Password: # 需要输入luffy用户的密码
luffy@OS:/home/robin/Linux$ # 工作目录不变
# 切换用户和工作目录, 会自动跳转到当前用户的家目录中
$ su - 用户名
# 举例:
robin@OS:~/Linux$ su - luffy
Password: # 需要输入luffy用户的密码
luffy@OS:~$ pwd
/home/luffy # 工作目录变成了luffy的家目录
# 回到原来的用户
$ exit
29、创建新用户
作为一个普通用户是没有给系统添加新用户这个权限的,如果想要添加新用户可以先切换到 root 用户,或者基于普通用户为其添加管理员权限来完成新用户的添加。添加新用户需要使用
adduser/useradd
命令来完成。普通用户没有添加/删除用户的权限,需要授权,给普通用于添加sudo权限
# 添加用户
# sudo -> 使用管理员权限执行这个命令
$ sudo adduser 用户名
# centos
$ sudo useradd 用户名
# ubuntu
$ sudo useradd -m -s /bin/bash 用户名
# 在使用 adduser 添加新用户的时候,有的Linux版本执行完命令就结束了,有的版本会提示设置密码等用户信息
robin@OS:~/Linux$ sudo adduser lisi
Adding user `lisi' ...
Adding new group `lisi' (1004) ...
Adding new user `lisi' (1004) with group `lisi' ...
Creating home directory `/home/lisi' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for lisi
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
当新用户添加完毕之后, 我们可以切换到新添加的用户下,用来检测是否真的添加成功了:
su - ace
;另外我们也可以使用其他方式来检验,首先在
/home
目录中会出现一个和用户名同名的目录,这就是新创建的用户的家目录,另外我们还可以查看/etc/passwd
文件,里边记录着新添加的用户的更加详细的信息: