Linux(3)用户组、用户、文件权限、环境变量

本文详细介绍Linux系统中用户和组的管理方法,包括创建、编辑、删除用户和组的操作命令,以及文件和目录的权限设置。此外还介绍了环境变量的配置与管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 用户和组的管理

Windows是单用户多任务,Linux是多用户多任务。
在Linux系统中,不同的用户有不同的权限和任务,通过group分类及权限控制,可以保证用户操作的安全性。
1.用户user:Linux具有多用户特征,所以我们能在linux系统中建立多个user
2.用户组group:具有相同特征的user的集合体

同一个用户可以对应多个组,用户和组的关系:一对多,组和用户的关系:多对一。
用户和用户组的对应关系可以是:一对一、多对一、一对多或多对多

1.1 groupadd 创建组

在哪里建组都行,因为建立用户组的时候系统是停下的,所以最后都在/etc/group里。/etc是存配置文件的地方

  • -g 指定新建工作组的GID(groupID)
    可以理解为身份证号,但是组名不能重复,GID可重复(很奇怪)
[root@yr ~]# groupadd -g 1000 g1000
[root@yr ~]# tail -5 /etc/group
haldaemon:x:68:
avahi-autoipd:x:101:
gdm:x:42:
sabayon:x:86:
g1000:x:1000:

[root@yr ~]# groupadd g03
[root@yr ~]# tail -5 /etc/group
avahi-autoipd:x:101:
gdm:x:42:
sabayon:x:86:
g1000:x:1000:
g03:x:1001:			#如果不指定GID,就会选择当前最大的GID+1
  • -r 创建系统工作组,系统工作组的组ID小于500(这是个规定)
  • -o 与-g同时使用,表示新用户组的GID可以与已有GID相同
[root@yr ~]# groupadd -g 1000 -o g04
[root@yr ~]# tail -5 /etc/group
gdm:x:42:
sabayon:x:86:
g1000:x:1000:
g03:x:1001:
g04:x:1000:

1.2 groupmod 编辑

  • -g:GID为用户组制定新的组织标号
groupmod -g 1005 g04		#为g04制定1005这个组织编号
  • -o
  • -n 改名
groupmod -n linux g04		#将g04改名为linux

1.3 groupdel 删除用户组

  • groupdel linux 删除名为linux的用户组

如果要删除的组里有用户:1.可以先把用户调走再删除组,2.可以直接删除(相当于开除)

1.4 useradd 创建用户

  • -u【uid】 指定用户id (可以通过tail -5 /etc/passwd查看配置信息或者 id 【uid】看这个用户的信息)
user01:x:503:503::/home/user01:/bin/bash
# 用户名字:密码:uid:GID::宿主目录:shell  (附加组不显示)
  • -d【登入目录】 指定用户登入时的启始目录
  • -g【组】 指定用户所属的主组
  • -G【指定用户所属的附加组】
    如果不指定user的宿主目录,默认存在/home下
[root@yr home]# useradd -g g03 u03
[root@yr home]# ll
total 12
drwx------ 3 u01 u01 4096 Jan 10 16:37 u01
drwx------ 3 u02 u02 4096 Jan 10 16:39 u02
drwx------ 3 u03 g03 4096 Jan 10 16:46 u03    #如果不指定,就默认归到u03

useradd -d /opt/xxx u05 建立一个用户,指定存在/opt/xxx目录下,名字叫u05

  • -m 自动建立用户的登入目录(默认)
  • -M 不自动建立用户的登入目录
    这样目录下没目录,以后进不来,进不来要手动建立这个目录
  • -n 取消建立以用户名称为名的群组
  • -s【shell】指定用户登入后所使用的shell

1.5 切换用户su

  • su - u04 切换到普通user u04,当前目录是pwd:/home/user01
  • su u04 当前目录是pwd:/home(su后面有无“-”的区别就在这里,切换后的当前目录不同)
  • su - 切回root(需要password)或者exit退出来。

只有root的提示符才是#,普通用户都是$
su只是切换了用户的身份,但shell环境仍然是原用户的shell
而su -连用户和shell环境一起切换。
su切换成root用户后,pwd一下,工作目录还是普通用户的工作目录;而su -切换后,工作目录会转换成root的工作目录。

1.6 shell

Linux下的所有命令都是文件,使用命令调用脚本。但在后台要执行一系列的操作。

  • /bin/sh 是Unix默认的shell
  • /bin/ksh AIX系统下的
  • /bin/bash Linux系统中一个默认的shell
    linux下所有的东西都是文件

1.7 usermod 修改用户信息

  • -l【账号名】 修改user名称
usermod -l newu05 u05	#将u05重新改名为newu05
  • -d【登入目录】 修改登入时的目录,即宿主目录
  • -g【组】修改主组
  • -G【组】修改附加组
[root@yr ~]# usermod -g grp01 -G grp02 -G grp03 user05 
[root@yr ~]# id user05
uid=507(user05) gid=1008(grp01) groups=1008(grp01),801(grp03)
# 设置grp01为主组,grp02、grp03为附加组
  • -L 锁定用户密码,使密码无效
passwd newu05 	# 给newu05设置密码

可以通过普通用户切普通用户试验密码。只有root可以改普通用户的密码。

  • -U 解除密码锁定

  • -s【shell】修改用户登入后所使用的shell

  • -u【uid】修改用户ID

1.8 userdel 删除用户

只有root可以删除用户

  • userdel 【user名】 删除用户
  • -r 删除用户的同时,删除与用户相关的所有文件。如果已经删了用户,只能通过rm -rf u03来手动删除它的文件
  • -f 强制删除用户,即使用户当前已登录

1.9 用户和组的配置文件存放位置

/etc/passwd 用户的配置文件
/etc/group 用户组的配置文件

1.10 密码

  • passwd
    若修改root自己的密码,直接输入 passwd
  • passwd{username} 给指定用户设置密码
    若修改其他用户,如oracle 的密码,可直接输入passwd oracle

1.11 查看用户

  • id 查看当前用户 (who am i看不到属于哪个组,id能看到登录的情况)
  • id 【用户名】查看指定用户

2 文件及目录权限

-rwxr-x--- 1 root root 79440 May 23  2011 /usr/sbin/useradd
drwx------ 3 u01    u01    4096 Jan 10 16:37 u01

普通文件:-
目录 :d
链接文件:l
r 可读
w 可写

2.1 权限和编码

一共三组:
第一组(前三位)(owner自己的权限)rwx:文件的拥有者的权限是读、写和执行
第二组(4-6位)(同组的权限)rw-:与文件所属同一组的用户的权限是读、写但不能执行
第三组(后三位)(不同组的权限)r–:不与文件所有者同组的其他用户的权限是读,不能写也不能执行
-rwx rwx rwx
421 421 421
一共十位,不看-和空格,数位数

  • 700权限:只有拥有者可读可写可执行,其余用户都不可读不可写不可执行
drwx------ 3 u01    u01    4096 Jan 10 16:37 u01
  • 622权限:拥有者可读可写不可执行,同组和非同组用户可写不可读不可知行
drwxr-xr-x   4 root root  4096 Jan 10 20:21 opt 
  • 751权限:只有root可读可写可执行,和root同组的用户可读可执行,其他用户只能执行
[root@yr bin]# which useradd		# 查看useradd这个命令(是个文件)在哪里
/usr/sbin/useradd
[root@yr bin]# ll /usr/sbin/useradd
-rwxr-x--- 1 root root 79440 May 23  2011 /usr/sbin/useradd        #750权限

没有权限的报错信息:
error:Permission denied

查看一个文件的时候,不仅要看这个文件的权限,也要看它的目录的权限!!!

2.2 chown(change owner)更改文件或目录拥有者

  • chown u01 u02 改变u02的拥有者为u01
    这个u02是一个文件或者一个目录的名字
  • chown -R u02 u01 改变u01这个目录及它下面所有文件的目录的所有者是u02

2.3 chmod更改文件或目录权限

  • chmod 755 u01:赋予u01权限rwxr-xr-x
  • chmod u=rwx,g=rx,o=rx u01:赋予u01权限rwxr-xr-x
    # u=用户权限,g=组权限,o=不同组其他用户权限
  • chmod u-x,g+w u01:给u01去除用户执行权限,增加组的写的权限
  • chmod a+x u01:给所有用户(all)增加执行权限
    # 直接写+x默认为a+x
    目录需要x权限才能打开

2.4 chgrp更改文件或目录所属组

  • chgrp root u01:把u01的所属组改为root
  • chown user1:group1 u01 :把u01的拥有者改为user1,并且所属group1
  • chown -R u01:g01 d02 :把d02目录下的所有目录及文件都改为所属组g01的用户u01

3 环境变量

Linux中环境变量包括系统级和用户级。

  • 系统级:每个登陆到系统的用户都要读取的系统变量
  • 用户级:该用户使用系统时加载的环境变量
    所以管理环境变量的文件也分为系统级和用户级。

3.1 系统级环境变量

  • /etc/environment 系统在登录时读取的第一个文件,用于为所有进程设置环境变量
  • /etc/profile 系统在登录时读取的第2个文件,用于设定针对全系统所有用户的环境变量,一般是调用/etc/bashrc文件(有时会根据/etc/profile内容读取额外的设定的文档,如 /etc/profile.d和/etc/inputrc)
  • /etc/bashrc 是系统级的bashrc文件,为每一个运行bash shell的用户执行。此文件会在用户每次打开shell时执行一次。

其中,/etc/environment是设置整个系统的环境(与登录用户无关),/etc/profile是设置所有用户的环境(与登录用户有关)这两个文件修改后要重启才能生效

3.2 用户级环境变量

登入系统后,读取完系统级环境变量就会读取用户级环境变量,顺序是先读取 ~/.bash_profile后读取 ~/.bashrc

  • ~/.bash_profile:(看现在登录的是哪个用户,在当前用户的家目录下)对应当前登录用户的profile文件,用于定制当前用户的个人工作环境
    (根据不同使用者帐号,去其家目录读取 ~ /.bash_profile,如果这读取不了就读取 ~ /.bash_login,这个也读取不了才会读取~/.profile,这三个文档设定基本上是一样的,读取有优先关系)
  • ~/.bashrc:是对应当前登录用户的bash初始化文件,用户每打开一次shell系统就执行一次这个文件

以上几个文件的执行先后顺序
/etc/environment -> /etc/profile -> ~/.bash_profile -> /etc/bashrc -> ~/.bashrc

3.3 /etc/ 和 ~/. 的区别

文件/etc/profile,/etc/bashrc 是系统全局环境变量设定

文件 ~ /.profile,~/.bashrc是用户家目录下的私有环境变量设定

3.4 ~ /.profile与~/.bashrc的区别:

都具有个性化定制功能

  • ~/.profile可以设定本用户专有的路径,环境变量等,它只在登入的时候执行一次

  • ~/.bashrc也是某用户专有设定文档,可以设定路径,命令别名,每次shell script的执行都会使用它一次

3.5 变量的种类

根据生存周期分为2类:

  • 临时的:使用export命令声明,变量在关闭shell时失效
  • 永久的:需要修改配置文件,永久生效

3.6 配置临时环境变量

  • export 命令

1.在终端输入:
export a=2
export PATH=/mnt/cdrom
export cp_a=$a
2.终端查看一个特定环境变量包含的内容:
echo $a
echo $PATH

[root@yr home]# export a=linux_os        # 配置临时变量a
[root@yr home]# echo $a                  # 输出($是调出变量的命令)变量
linux_os

[root@yr home]# export a=/home/u01
[root@yr home]# echo $a
/home/u01
[root@yr home]# cd $a
[root@yr u01]# pwd
/home/u01

3.7 配置永久环境变量

先vi .bash_pofile,修改后source
每次开机或打开shell时自动设定而无须每次都手动设定,需要将export写入系统文件中。

[user02@yr ~]$ vi .bash_profile

# 添加内容
export PATH
export a=/home/u01			#编辑当前用户的环境变量
export b=hello
~

".bash_profile" 14L, 210C written                                       
[user02@yr ~]$ source .bash_profile			#通过source使其生效(或者重新切换至该用户)
[user02@yr ~]$ echo $a						#查看是否配置成功
/home/u01
[user02@yr ~]$ echo $b
hello

3.8 环境变量配置文件的生效方法

  • 方法一:重新登陆该用户
[root@yr u01]# vi .bash_pofile
。。
export PATH
export a=/home/u01
~
".bash_profile" 14L, 196C written
[root@yr u01]# pwd
/home/u01
[root@yr u01]# cd /
[root@yr /]# echo $a
/home/u01
  • 方法二:source改变
[root@yr ~]# source .bash_profile
[root@yr ~]# echo $a
/home/u01

通过which echo 查看命令位置

3.9 路径环境变量命令

export PATH

3.10 查看环境变量

  • 查看当前用户所有环境变量
    env(包括临时的和永久的)

  • 查看某一环境变量信息
    echo ${变量名}
    env | grep {xxx} 只要这行包含xxx,就都返回

3.11 常用的环境变量

  • PATH 决定了shell将到哪些目录中寻找命令或程序
  • HOME 当前用户主目录
  • HISTSIZE 历史记录数
  • LOGNAME 当前用户的登录名
  • HOSTNAME 主机的名称
  • SHELL 当前用户shell类型
  • LANGUAGE 语言相关的环境变量,多语言可以修改此环境变量
  • PS1 基本提示符,对于root用户是#,对于普通用户是$

3.12 撤销/清除

unset 命令可以撤销或清除变量

[user02@yr ~]$ echo $xx
a
[user02@yr ~]$ unset xx
[user02@yr ~]$ echo $xx

[user02@yr ~]$

3.13 终端命令提示符设置

PS1

[root@yr ~]#vi /etc/profile
# 添加内容
export PS1=[ \u@\h \w]#“			#全路径显示:[username@hostname 全路径]

其中,大写的W是简洁模式,w是全路径模式(显示全部路径,否则需要通过pwd查看)
root为#,普通用户为$

  • 常用符号的意义
    \d:代表日期,格式为weekday moth date(Mon Aug1)
    \H:完整的主机名hostname
    \t:显示时间为24小时格式。如 HH:MM:SS
    \T:显示时间为12小时格式
    \A:显示时间为24小时格式:HH:MM
    \u:当前用户的账号名称
    \v:BASH版本
    \w:完整的工作目录信息。(家目录是~)
    \W:利用basename取得工作目录名称,所以只会列出最后一个目录。(用pwd查看)

HOSTNAME命令和echo $HOSTNAME是不一样的两个命令

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值