【Linux系统】常用命令:群组用户以及文件权限管理、查找文件、Linux的软件仓库

现如今各种场合都有使用各种 Linux 发行版,从嵌入式设备到超级计算机,并且在服务器领域确定了地位,对于一个开发人员来说,Linux的学习是必不可少的,对于简单操作Linux系统更是必备的技能,对于Linux系统的重要性在这里不多赘述。于是我在学习过程中,整理了一系列Linux常用命令,文章内容收集整理于网络,相关代码都是经过自己实现验证的,众所周知,Linux系统的相关命令是数不胜数的,学完以至于完全记住是很难的,在这里只是整理一部分常用、实用、后端开发人员必备的命令,当然,个人感觉这些命令不需要刻意去记忆,而是在反复的使用过程中达到孰能生巧的,所以本系列文章目的主要用于方便自己后期的查阅与复习,希望可以帮助到你!

前面主要学习了Linux系统学习的前置知识与基础操作命令、文件目录相关命令。详情查阅:【Linux系统】常用命令:基础操作、文件目录 - 编程那点事儿 (imyjs.cn)

大家都知道Linux 是一个多任务、多用户的操作系统。多个用户可以在同一时间去操作系统执行不同的任务,一个用户也能以多个人登陆操作。下面学习Linux系统中群组、用户相关命令以及文件权限管理、查找文件、Linux的软件仓库的相关知识。

前置知识

1.Linux角色分类

超级用户:root (user id --UID) 0 最高的管理权限。

普通用户:

系统用户 UID:1-999(rhel7  centos7) 1-499(rhel6)
本地用户 UID:1000+(rhel7 centos7)  500+(rhel6)

UID:用户身份标示,唯一标示。

2.Linux组分类

组分类:

根据账号的功能分类:
	超级用户组:root GID:0
	普通用户组 :
	系统用户组: GID 1---999
	本地用户组: GID 1000+

3.Linux用户和组的关系

一个用户属于一个组,也可以属于多个组,多个用户可以在一个组,可以在多个组

4.Linux用户和组的相关配置文件

  • 1./etc/passwd:用户 and 属性信息。
  • 2./etc/group: 组 and 属性信息。
  • 3./etc/shadow: 用户密码 and 属性信息。
  • 4./etc/gshadow:组密码 and 属性信息。
  • 5./etc/default/useradd: 设置添加用户规则文件。
  • 6./etc/login.defs:设置用户账号限制。

5.Linux用户信息文件

用户管理中最重要的一个文件,这个文件是对所有用户开放的,每一行存一个用户的信息,每个属性之间用冒号分割。

[zhangsan@localhost ~]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
# ...... 省略更多

举例:root:x:0:0:root:/root:/bin/bash

1.登陆用户名:root

2.用户密码占位符:x

3.用户UID:0

4.用户组GID:0

5.对用户账户的描述:root

6.用户家目录位置:/root

7.用户默认的shell:/bin/zsh (默认是/bin/bash)

6.Linux密码信息文件

该文件只有root用户有读权限,每一行存一个用户的记录,每个属性用冒号分割。

[zhangsan@localhost ~]$ cat /etc/shadow
cat: /etc/shadow: 权限不够
[zhangsan@localhost ~]$ su root
密码:
[root@localhost zhangsan]# cat /etc/shadow
root:$6$vk03IDpnK2kwXu9A$dhrU/cSaMxO5n72nVdc8CrrjQ4jXJ5MgCGN7Csm/w3KT0xWjRUeG5LfwRhgHNn0y7iiE1zqwpbu6Bv2dp81dt0::0:99999:7:::
bin:*:18353:0:99999:7:::
# ...... 省略更多

举例:bin:*:18353:0:99999:7:::

1.登录用户名: bin

2.加密的密码: * 号代表密码被锁定

3.最近更改密码的日期: 18353代表到1970-1-1密码不可改的天数

4.密码修改期限:99999 代表永远不用改,如果是其他数字则表示从1970-1-1内的多少天必须修改密码。

5.更改密码最大有效天数: 代表密码保持有效的最大天数。

6.密码过期警告:密码到正式失效前有多少天(-1,永远不提示)

7.密码过期后多少天禁用用户:可登陆,单不能操作。

8.用户被禁用日期:多少天后账号过期,不能登陆。

9.保留参数

7.Linux组信息文件

用户组的组信息存放在这,一行存一个组记录,属性用冒号分割。

[root@localhost zhangsan]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
# ...... 省略更多

举例:root:x:0:

1.组名:root

2.组密码占位符: x

3.组GID: 0

 

用户相关命令

Linux 中,理论上来说,我们可以创建无数个用户,但是这些用户是被划分到不同的群组里面的,有一个用户,名叫 root ,是一个很特殊的用户,它是超级用户,拥有最高权限。

自己创建的用户是有限权限的用户,这样大大提高了 Linux系统的安全性,有效防止误操作或是病毒攻击,但是我们执行的某些命令需要更高权限时可以使用 sudo 命令。

sudo

root 身份运行命令

[zhangsan@localhost ~]$ sudo date
[sudo] zhangsan 的密码:
zhangsan 不在 sudoers 文件中。此事将被报告。
[zhangsan@localhost ~]$ 

提示:zhangsan 不在 sudoers 文件中。此事将被报告。

原因: 当前用户不在sudo 用户组,需要先加入此用户组

解决:

  • su root # 先切换到 root 用户
  • 添加内容后保存文件即可。
    • vi /etc/sudoers
    • 账户名 ALL=(ALL:ALL) ALL
    • wq!进行保存

 

useradd + passwd

  • useradd 添加新用户

    常用参数:

    -m:自动建立用户家目录(在CentOS下不指定默认也会自动创建)

    -g:指定用户所在的组,否则会建立一个和同名的组

  • passwd 修改用户密码

    如果是普通用户,直接用passwd可以修改自己的账户密码

这两个命令需要 root 用户权限

useradd lisi--> 添加一个lisi用户,添加完之后在 /home 路径下可以查看

passwd lisi--> 修改lisi用户的密码

[zhangsan@localhost etc]$ useradd lisi
useradd: Permission denied.
useradd:无法锁定 /etc/passwd,请稍后再试。
[zhangsan@localhost etc]$ sudo useradd lisi
[zhangsan@localhost etc]$ passwd lisi
passwd:只有根用户才能指定用户名。
[zhangsan@localhost etc]$ sudo passwd lisi
更改用户 lisi 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[zhangsan@localhost etc]$ 

 

  • 创建用户时,默认会创建—个和用户名同名的组名。
  • 用户信息保存在/etc/passwd文件中

注意:在修改密码时,如果密码组成规则不符合系统规定时,比如密码少于 8 个字符等,此时继续输入也可以使用!

cat /etc/passwd --> 确认用户信息

[root@localhost home]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
...... # 省略其他用户信息
zhangsan:x:1000:1000::/home/zhangsan:/bin/bash # 创建的zhangsan用户
[root@localhost home]# 

 

userdel

删除用户,需要 root 用户权限

-r选项会自动删除用户家目录

  • userdel lisi --> 只会删除用户名,不会从/home中删除对应文件夹
  • userdel lisi -r --> 会同时删除/home下的对应文件夹
[zhangsan@localhost home]$ pwd
/home
[zhangsan@localhost home]$ ls
lisi  zhangsan
[zhangsan@localhost home]$ sudo userdel lisi -r
[sudo] zhangsan 的密码:
[zhangsan@localhost home]$ ls
zhangsan
[zhangsan@localhost home]$ 

 

usermod

用于修改用户的账户。

【常用参数】

  • -l 对用户重命名。需要注意的是 /home 中的用户家目录的名字不会改变,需要手动修改。
  • -g 修改用户所在的群组,例如 usermod -g dev lisi修改 lisi 用户的群组为 dev
  • -G 一次性让用户添加多个群组,例如 usermod -G friends,foo,bar lion
  • -a -G 会让你离开原先的群组,如果你不想这样做的话,就得再添加 -a 参数,意味着 append 追加的意思。

 

su

切换用户,需要 root 用户权限

su zhangsan --> 切换为普通用户
su - --> 切换为root用户

sudo su --> 切换为root用户(exit 命令或 CTRL + D 快捷键都可以使普通用户切换为 root 用户)

[zhangsan@localhost ~]$ exit
[root@localhost zhangsan]# exit
[zhangsan@localhost ~]$ 登出  # 连续两次 CTRL + D 退出

 

su不接用户名,可以切换到root ,但是不推荐使用,因为不安全。

群组相关命令

Linux 中每个用户都属于一个特定的群组,如果你不设置用户的群组,默认会创建一个和它的用户名一样的群组,并且把用户划归到这个群组。

groupadd

创建群组,用法和 useradd 类似。

groupadd dev

[root@localhost ~]# groupadd dev
[root@localhost ~]# cat /etc/group # 查看系统所有用户组
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
.....   # 省略其他用户组信息
dev:x:1000:  # 新建的用户组dev
[root@localhost ~]# 

groupdel

删除一个已存在的群组

groupdel dev

[root@localhost ~]# groupdel ddd  不可以删除不存在的用户组
groupdel:“ddd”组不存在
[root@localhost ~]# groupdel dev  删除dev用户组
[root@localhost ~]# cat /etc/group    查看系统所有用户组
.... # 省略其他用户组信息
[root@localhost ~]# 

groups

查看用户所在群组

[zhangsan@localhost home]$ groups zhangsan  --> 查看 zhangsan 用户所在的群组
zhangsan : zhangsan
[zhangsan@localhost home]$   

 

chgrp

用于修改文件的群组。

chgrp bar file.txt --> file.txt文件的群组修改为bar

chown

改变文件的所有者,需要 root 身份才能运行。

chown lion file.txt --> 把其它用户创建的file.txt转让给lion用户
chown lion:bar file.txt --> 把file.txt的用户改为lion,群组改为bar

【常用参数】

  • -R 递归设置子目录和子文件, chown -R lion:lion /home/frankfrank 文件夹的用户和群组都改为 lion

文件权限管理

chmod

修改访问权限。

chmod 740 file.txt

【常用参数】

  • -R 可以递归地修改文件访问权限,例如 chmod -R 777 /home/lion

修改权限的确简单,但是理解其深层次的意义才是更加重要的。下面我们来系统的学习 Linux 的文件权限。

[zhangsan@localhost ~]$ ls -l
总用量 0
-rw-rw-r--. 1 zhangsan zhangsan 0 5月  12 14:02 aa.txt
drwxrwxr-x. 2 zhangsan zhangsan 6 5月  12 14:02 bb
[zhangsan@localhost ~]$ 

其中 drwxrwxr-x 表示文件或目录的权限。让我们一起来解读它具体代表什么?

  • d :表示目录,就是说这是一个目录,普通文件是 - ,链接是 l
  • rread 表示文件可读。
  • wwrite 表示文件可写,一般有写的权限,就有删除的权限。
  • xexecute 表示文件可执行。
  • - :表示没有相应权限。

权限的整体是按用户来划分的,如下所示:

d rwx rwx r-x
文件属性 文件所有者 群组用户 其他用户

 

现在再来理解这句权限 drwxrwxr-x 的意思:

  • 它是一个文件夹;
  • 它的所有者具有:读、写、执行权限;
  • 它的群组用户具有:读、写、执行权限;
  • 它的其它用户具有:读、执行的权限,没有写的权限。

现在理解了权限,我们使用 chmod 来尝试修改权限。 chmod 它不需要是 root 用户就能运行的,只要你是此文件所有者,就可以用 chmod 来修改文件的访问权限。

数字分配权限

权限 数字
r 4
w 2
x 1

因此要改变权限,只要做一些简单的加法就行:

[zhangsan@localhost ~]$ chmod 744 aa.txt 
[zhangsan@localhost ~]$ ls -l
总用量 0
-rwxr--r--. 1 zhangsan zhangsan 0 5月  12 14:02 aa.txt
drwxrwxr-x. 2 zhangsan zhangsan 6 5月  12 14:02 bb

 

7 = 4 + 2 + 1 :文件所有者拥有读、写、执行权限;

4 = 4 + 0 + 0 :群组用户只拥有读权限;

4 = 4 + 0 + 0 :其他用户只拥有读权限;

 

用字母来分配权限

  • uuser 的缩写,用户的意思,表示所有者。
  • ggroup 的缩写,群组的意思,表示群组用户。
  • oother 的缩写,其它的意思,表示其它用户。
  • aall 的缩写,所有的意思,表示所有用户。
  • + :加号,表示添加权限。
  • - :减号,表示去除权限。
  • = :等于号,表示分配权限。
chmod u+rx file --> 文件file的所有者增加读和运行的权限
chmod g+r file --> 文件file的群组用户增加读的权限
chmod o-r file --> 文件file的其它用户移除读的权限
chmod g+r o-r file --> 文件file的群组用户增加读的权限,其它用户移除读的权限
chmod go-r file --> 文件file的群组和其他用户移除读的权限
chmod +x file --> 文件file的所有用户增加运行的权限
chmod u=rwx,g=r,o=- file --> 文件file的所有者分配读写和执行的权限,群组其它用户分配读的权限,其他用户没有任何权限

查找文件

概览

  • which : 查看执行文件的位置。
  • whereis : 查看可执行文件位置和相关文件。
  • locate : 配合数据库缓存,快速查看文件的位置。
  • grep : 过滤匹配,他是一个文件搜索工具。
  • find : 可以根据条件查看文件。

which

语法: which 参数 查询目标

常用命令:一般不加参数使用

--all, -a 显示所有的匹配路径

总的来说一个命令就是一个可执行程序。

[root@localhost ~]# pwd
/root
[root@localhost ~]# which python
/usr/bin/python

 

whereis

语法: whereis 参数 查询目标

常用参数:

  • 一般不加参数使用
  • -b 只搜索二进制文件
  • -B <目录> 定义二进制文件查找路径
  • -m 只搜索 man 手册
  • -M <目录> 定义 man 手册查找路径
  • -s 只搜索源代码
  • -S <目录> 定义源代码查找路径

操作:

[zhangsan@localhost ~]$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
[zhangsan@localhost ~]$ 

 

locate

搜索包含关键字的所有文件和目录。后接需要查找的文件名,也可以用正则表达式。

locate和find命令功能差不多,但是搜索效率更高,因为locate查的是数据库而find查找的是目录文件。

[zhangsan@localhost ~]$ locate aa.txt 
bash: locate: 未找到命令
[zhangsan@localhost ~]$ yum -y install mlocate
已加载插件:fastestmirror
您需要 root 权限执行此命令。
[zhangsan@localhost ~]$ sudo yum -y install mlocate
[sudo] zhangsan 的密码:
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
..... # 省略安装过程

安装 locate:yum -y install mlocate

[zhangsan@localhost ~]$ locate aa.txt
locate: 无法执行 stat () `/var/lib/mlocate/mlocate.db': 没有那个文件或目录
[zhangsan@localhost ~]$ updatedb
updatedb: 无法为 `/var/lib/mlocate/mlocate.db' 打开临时文件
[zhangsan@localhost ~]$ sudo updatedb
[zhangsan@localhost ~]$ locate aa.txt
/home/zhangsan/aa.txt
[zhangsan@localhost ~]$ 

 

[注意] locate 命令会去文件数据库中查找命令,而不是全磁盘查找,因此刚创建的文件并不会更新到数据库中,所以无法被查找到,可以执行 updatedb 命令去更新数据库。即安装mlocate后需要使用updatedb 命令更新数据库!

注意需要使用root身份!

 

grep

语法:grep 参数 目标值 文件

常用参数:

  • -v 取反
  • -i 忽略大小写
  • ^* 以*开头
  • *$ 以*结尾
  • ^$ 空行

操作:

查 /etc/passwd有root的行

[zhangsan@localhost ~]$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[zhangsan@localhost ~]$ 

 

查 /etc/passwd 没有root的行

[zhangsan@localhost ~]$ grep -v root /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
....... # 内容较多,仅展示几行

 

查 /etc/passwd 有root的行并显示行号

[zhangsan@localhost ~]$ grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
[zhangsan@localhost ~]$ 

 

find

用于查找文件,它会去遍历你的实际硬盘进行查找,而且它允许我们对每个找到的文件进行后续操作,功能非常强大。

find <何处> <何物> <做什么>
  • 何处:指定在哪个目录查找,此目录的所有子目录也会被查找。
  • 何物:查找什么,可以根据文件的名字来查找,也可以根据其大小来查找,还可以根据其最近访问时间来查找。
  • 做什么:找到文件后,可以进行后续处理,如果不指定这个参数, find 命令只会显示找到的文件。

语法:find 路径 参数 操作

常用参数:

  • 路径: 例如用 . 来表示当前目录,用 / 来表示系统根目录
  • -print:显示的时候”\n”做为定界符, 换行
  • -print0:与xargs配套使用,以“\0”做为定界符

常用命令选项:

  • -name 按照文件名查找文件。“名称”
  • -perm 按照文件权限来查找文件。666 777 等
  • -depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找
  • -user 按照文件属主来查找文件
  • -atime -ctime (单位是天)
  • -mmin -cmin -amin(单位是分钟)
  • -size n [c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计
  • -follow 如果find命令遇到符号链接文件,就跟踪至链接所指向的文件

根据文件名查找

find -name "file.txt" --> 当前目录以及子目录下通过名称查找文件
find . -name "syslog" --> 当前目录以及子目录下通过名称查找文件
find / -name "syslog" --> 整个硬盘下查找syslog
find /var/log -name "syslog" --> 在指定的目录/var/log下查找syslog文件
find /var/log -name "syslog*" --> 查找syslog1、syslog2 ... 等文件,通配符表示所有
find /var/log -name "*syslog*" --> 查找包含syslog的文件 

 

[zhangsan@localhost ~]$ tree 
.
├── aa.txt
└── bb
    ├── aa.txt
    └── cc
        └── dd
            ├── aa.txt
            ├── ss.txt
            └── zz
                └── zz.txt

4 directories, 5 files
[zhangsan@localhost ~]$ find -name aa.txt
./aa.txt
./bb/aa.txt
./bb/cc/dd/aa.txt
[zhangsan@localhost ~]$ 

 

[注意] find 命令只会查找完全符合 “何物” 字符串的文件,而 locate 会查找所有包含关键字的文件。

根据文件大小查找

find /var -size +10M --> /var 目录下查找文件大小超过 10M 的文件
find /var -size -50k --> /var 目录下查找文件大小小于 50k 的文件
find /var -size +1G --> /var 目录下查找文件大小超过 1G 的文件
find /var -size 1M --> /var 目录下查找文件大小等于 1M 的文件

 

根据文件最近访问时间查找

find -name "*.txt" -atime -7  --> 近 7天内访问过的.txt结尾的文件

 

仅查找目录或文件

find . -name "file" -type f  --> 只查找当前目录下的file文件
find . -name "file" -type d  --> 只查找当前目录下的file目录

 

操作查找结果

find -name "*.txt" -printf "%p - %u\n" --> 找出所有后缀为txt的文件,并按照 %p - %u\n 格式打印,其中%p=文件名,%u=文件所有者
find -name "*.jpg" -delete --> 删除当前目录以及子目录下所有.jpg为后缀的文件,不会有删除提示,因此要慎用
find -name "*.c" -exec chmod 600 {} \; --> 对每个.c结尾的文件,都进行 -exec 参数指定的操作,{} 会被查找到的文件替代,\; 是必须的结尾
find -name "*.c" -ok chmod 600 {} \; --> 和上面的功能一直,会多一个确认提示

 

软件仓库

Linux下软件是以包的形式存在,一个软件包其实就是软件的所有文件的压缩包,是二进制的形式,包含了安装软件的所有指令。 Red Hat 家族的软件包后缀名一般为 .rpmDebian 家族的软件包后缀是 .deb

Linux的包都存在一个仓库,叫做软件仓库,它可以使用 yum 来管理软件包, yumCentOS 中默认的包管理工具,适用于 Red Hat 一族。可以理解成 Node.jsnpm

yum 常用命令

  • yum update | yum upgrade 更新软件包
  • yum search xxx 搜索相应的软件包
  • yum install xxx 安装软件包
  • yum remove xxx 删除软件包

切换 CentOS 软件源

有时候 CentOS 默认的 yum 源不一定是国内镜像,导致 yum 在线安装及更新速度不是很理想。这时候需要将 yum 源设置为国内镜像站点。国内主要开源的镜像站点是网易和阿里云。

1、首先备份系统自带 yum 源配置文件 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2、下载阿里云的 yum 源配置文件到 /etc/yum.repos.d/CentOS7

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

3、生成缓存

yum makecache

 

微信关注

编程那点事儿

本站为非盈利性站点,所有资源、文章等仅供学习参考,并不贩卖软件且不存在任何商业目的及用途,如果您访问和下载某文件,表示您同意只将此文件用于参考、学习而非其他用途。
本站所发布的一切软件资源、文章内容、页面内容可能整理来自于互联网,在此郑重声明本站仅限用于学习和研究目的;并告知用户不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
如果本站相关内容有侵犯到您的合法权益,请仔细阅读本站公布的投诉指引页相关内容联系我,依法依规进行处理!
作者:理想
链接:https://www.imyjs.cn/archives/831
THE END
二维码
【Linux系统】常用命令:群组用户以及文件权限管理、查找文件、Linux的软件仓库
现如今各种场合都有使用各种 Linux 发行版,从嵌入……
<<上一篇
下一篇>>
文章目录
关闭
目 录