03_用户权限习题记录
用户权限课后习题详解
习题一:用户管理
题目 1:写一个 shell 脚本,批量创建 20 个用户(user1-20)密码中有 5 个随机字符
解答:
#!/bin/bash
for i in {1..20}; do
user="user$i"
password=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 5 | head -n 1)
useradd $user
echo "$user:$password" | chpasswd
echo "用户名:$user,密码:$password"
done
使用场景: 批量创建测试用户时非常实用,避免手动逐个创建的繁琐。
解释:
tr -dc 'a-zA-Z0-9':过滤出只包含字母(大小写)和数字的字符。
-c或——complerment:取代所有不属于第一字符集的字符;
-d或——delete:删除所有属于第一字符集的字符;
fold -w 5:将输出限制为每行 5 个字符。
-w, --width=宽度 使用指定的列宽度代替默认的80
输出示例:
用户名:user1,密码:a3F8b
用户名:user2,密码:9kLm2
...
题目 2:如何查看用户对系统的操作情况和登录情况
解答:
查看操作情况:last 命令查看登录记录,lastlog 查看所有用户最后登录信息,w 或 who 查看当前登录用户。
查看登录情况:last 命令可查看历史登录情况。
使用场景: 系统管理员监控用户活动,排查安全问题。
输出示例(last 命令):
user1 pts/0 192.168.1.100 Fri May 19 14:25 still logged in
user2 pts/1 192.168.1.101 Fri May 19 13:40 - 14:10 (00:30)
题目 3:默认情况下,Linux 用户的登录用户密码的存放位置是()
答案:c./etc/shadow
解析: /etc/passwd 存放用户基本信息,/etc/shadow 存放加密后的密码。
题目 4:创建用户默认会拷贝哪个目录下的环境变量
答案:/etc/skel
解析: 创建新用户时,/etc/skel 目录下的文件会被复制到用户家目录,作为初始环境配置。
题目 5:创建 test 用户,指定 UID6666,基本组 test_test 附加组:sa,dba,注释信息:2019 new student,shell:bash
解答:
groupadd test_test
useradd -u 6666 -g test_test -G sa,dba -c "2019 new student" -s /bin/bash test
使用场景: 精确控制用户属性,满足特定安全和管理要求。
题目 6:修改 bgx 用户 uid,gid,附加组,注释信息,用户家目录,登录 shell,登录名
解答:
usermod -u 新UID -g 新GID -G 附加组列表 -c "新注释" -d 新家目录 -s 新shell -l 新登录名 bgx
使用场景: 用户信息变更时进行批量更新。
题目 7:如何查询用户信息以及登录信息
解答:
查询用户信息:id 用户名 或 getent passwd 用户名
查询登录信息:last 用户名
输出示例(id 命令):
uid=1001(bgx) gid=1001(bgx) groups=1001(bgx),1002(sa),1003(dba)
题目 8:如何将创建的 test 用户设置一个 8 位的随机密码
解答:
password=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 8 | head -n 1)
echo "test:$password" | chpasswd
题目 9:如何创建一个 student_group 组,并指定 GID 为 999
解答:
groupadd -g 999 student_group
题目 10:如何使用 test 用户切换至 student_group 组
解答:
newgrp student_group
使用场景: 需要临时切换到特定组进行操作时。
习题二:用户和文件权限管理需求
需求解析与实现
1. 建立用户目录
mkdir -p /runtime/tech /runtime/edu
2. 添加组账号
groupadd -g 1001 tech
groupadd -g 1002 edu
groupadd -g 200 runtime
3. 添加用户账号
# tech 组用户
useradd -g tech -G runtime -s /bin/bash jerry
useradd -g tech -G runtime -s /bin/bash kim
useradd -g tech -G runtime -s /bin/bash amy
useradd -g tech -G runtime -s /bin/bash john
# 设置 kim 用户失效日期
usermod -e 2015-12-31 kim
# edu 组用户
useradd -g edu -G runtime -s /bin/ksh jiangsir
useradd -g edu -G runtime -s /bin/bash tansir
4. 设置目录权限及归属
chgrp runtime /runtime
chmod 750 /runtime
chgrp tech /runtime/tech
chmod 750 /runtime/tech
chgrp edu /runtime/edu
chmod 750 /runtime/edu
5. 建立公共数据存储目录 "/public"
mkdir /public
# 设置权限,技术组可读写执行
chmod 770 /public
chgrp tech /public
习题三:权限管理
题目 1:Linux 运行级别有几种,每个级别分别代表什么含义,如何切换运行级别和查看当前运行级别
解答:
Linux 传统运行级别(SysV init):
- 0:关机
- 1(s/S):单用户模式(维护模式)
- 2:多用户模式,无网络
- 3:多用户模式,命令行
- 4:保留
- 5:多用户模式,图形界面
- 6:重启
查看当前运行级别:runlevel 或 who -r
切换运行级别:init 运行级别 或 telinit 运行级别
现代 systemd 系统:
- 0:关机(
runlevel0.target) - 1:救援模式(
rescue.target) - 2:多用户模式(
multi-user.target) - 3:多用户模式(与 2 相同)
- 4:保留
- 5:图形界面(
graphical.target) - 6:重启(
reboot.target)
切换命令:systemctl isolate 目标.target
查看当前状态:systemctl get-default
题目 2:linux 系统关机重启注销有哪些命令
解答:
关机:
shutdown -h now:立即关机poweroff:关机halt:停止系统,可能需要手动断电
重启:
reboot:重启shutdown -r now:立即重启
注销:
logout:退出当前会话exit:退出 shell 会话
题目 3:如何进入单用户模式,修改密码
解答:
进入单用户模式:
- 重启系统,在 GRUB 菜单出现时按
e键编辑启动项 - 找到以
linux开头的行,添加single或init=/bin/bash到行尾 - 按
Ctrl + X或F10启动
修改密码:
passwd 用户名
题目 4:linux 常用有哪些快捷键,并写出每列含义
常用快捷键:
| 快捷键 | 功能描述 |
|---|---|
Ctrl + C |
终止当前操作 |
Ctrl + Z |
挂起当前进程 |
Ctrl + D |
退出当前 shell 或 EOF |
Ctrl + A |
光标移动到行首 |
Ctrl + E |
光标移动到行尾 |
Ctrl + U |
删除从光标到行首的字符 |
Ctrl + K |
删除从光标到行尾的字符 |
Ctrl + W |
删除光标前的单词 |
Alt + B |
光标向左移动一个单词 |
Alt + F |
光标向右移动一个单词 |
Ctrl + L |
清屏 |
Ctrl + R |
反向搜索历史命令 |
题目 5:请说出你知道的下列字符在 linux 里含义
| 符号 | 含义 |
|---|---|
~ |
当前用户家目录 |
- |
代表标准输入或上一个目录 |
. |
当前目录 |
.. |
父目录 |
| ` | ` |
> |
重定向输出,覆盖文件 |
>> |
重定向输出,追加到文件 |
1> |
标准输出重定向 |
2> |
标准错误重定向 |
&> |
同时重定向标准输出和标准错误 |
题目 6:如何最快的返回到当前用户的家目录
命令:
cd
或
cd ~
题目 7:应用程序一般都安装在那个目录
答案:
/usr/bin:用户可执行文件/usr/sbin:系统管理员可执行文件/usr/local/bin:本地安装的应用程序/opt:可选应用程序
题目 8:日志一般都存放在哪个目录下
答案:/var/log
常见日志文件:
messages:系统日志secure:安全相关日志cron:计划任务日志dmesg:内核日志
题目 9:重要配置文件一般存放在哪个目录下
答案:/etc
题目 10:系统重启后如何自动进入命令行模式的多用户操作系统
解答:
对于 SysV init 系统:
system-config-runlevel
选择运行级别 3。
对于 systemd 系统:
systemctl set-default multi-user.target
题目 11:系统网卡和 DNS 的配置文件路径在那里
解答:
- 网卡配置(CentOS/RHEL):
/etc/sysconfig/network-scripts/ifcfg-网卡名 - DNS 配置:
/etc/resolv.conf
题目 12:系统主机名如何临时修改,如何永久修改,如何查看主机名
解答:
临时修改:
hostname 新主机名
永久修改(CentOS/RHEL):
hostnamectl set-hostname 新主机名
或编辑 /etc/hostname 文件。
查看主机名:
hostname
或
hostnamectl
题目 13:创建目录 /data/
mkdir /data
题目 14:将 /data 目录移动到 /tmp 目录下,并将 /etc/passwd 文件复制到 /tmp/data 目录下
mv /data /tmp
cp /etc/passwd /tmp/data/
题目 15:如何查看当前所在的目录
pwd
题目 16:如何一次性创建 /text/1/2/3/4 目录
mkdir -p /text/1/2/3/4
mkdir -p /text{1..4}
题目 17:将 /etc 目录复制到 /text 目录下,并保持原属性不变
cp -a /etc /text/
-a, --archive 等于-dR --preserve=all
--attributes-only 只拷贝文件属性,不拷贝文件内容
题目 18:如何只查看 /text/etc 单个目录的信息,并以长格式显示
ls -ld /text/etc
-d, --directory 当遇到目录时列出目录本身而非目录内的文件
题目 19:如何查看 /text 目录大小
du -sh /text
题目 20:在 /text 目录新建 ip.txt 文件,并设置属主有读写执行权限,属组读写权限,其他账户无权限
touch /text/ip.txt
chmod 760 /text/ip.txt
题目 21:如何删除 /text 目录以及目录下的所有文件
rm -rf /text
题目 22:如何查看一个命令所在的绝对路径(至少写出 2 中方法)
方法一:
which 命令名
方法二:
command -v 命令名
方法三:
type 命令名
题目 23:请打印 /etc/passwd 文件中的第 2-5 行(不低于三种方法)
方法一:sed
sed -n '2,5p' /etc/passwd
方法二:awk
awk 'NR>=2 && NR<=5' /etc/passwd
方法三:head 和 tail
head -5 /etc/passwd | tail -3
题目 24:要求用命令 rm 删除文件时提示如下禁止使用 rm 的提示,并使该效果永久生效
解答:
创建别名:
echo 'alias rm="echo Do not use rm command."' >> /etc/bashrc
source /etc/bashrc
题目 25:用什么命令能创建文件(至少写出 2 中方法)
方法一:
touch 文件名
方法二:
echo "" > 文件名
方法三:
cat > 文件名
题目 26:一个文件的权限为 drwxr-xr-x,请写出文件的数值权限是多少,以及文件类型
数值权限:755
文件类型:目录(d 表示目录)
题目 27:系统默认的 umask 权限是多少,默认创建文件和目录的权限是多少
默认 umask:0022 或 0002(取决于系统配置)
默认文件权限:644(-rw-r--r--)
默认目录权限:755(drwxr-xr-x)
题目 28:当 umask 为 002,034,035 请问创建文件和目录分别是什么权限
umask 计算规则:文件权限 = 666 - umask,目录权限 = 777 - umask
-
umask 002:
- 文件:666 - 002 = 664(-rw-rw-r--)
- 目录:777 - 002 = 775(drwxrwxr-x)
-
umask 034:
- 文件:666 - 034 = 632(-rw---w--)
- 目录:777 - 034 = 743(drwx--rwx)
-
umask 035:
- 文件:666 - 035 = 631(-rw---wx)
- 目录:777 - 035 = 742(drwx--r-x)
题目 29:如何查看 /etc/services 整个文件有多少行
wc -l /etc/services
题目 30:查看 /etc/passwd 文件里 root 位置和 /bin/bash 位置?即将所有的第一列和最后一列位置调换
awk -F: '{print $NF,$1}' /etc/passwd
题目 31:使用 ifconfig eth0 查看网卡,如何只提取 IP 地址
ifconfig eth0 | grep 'inet ' | awk '{print $2}'
题目 32:系统的磁盘空间被占满如何定位,inode 被占满又如何定位
定位磁盘空间:
df -h
定位 inode:
df -i
查找大文件:
find / -type f -size +100M
查找占用 inode 的文件:
find / -type f | awk '{print $1}' | sort | uniq -c | sort -nr
题目 33:查找 /var/log/ 下所有 7 天以前的日志文件,并且将大于 30k 的文件移动 /tmp 下
find /var/log/ -type f -name "*.log" -mtime +7 -size +30k -exec mv {} /tmp/ \;
解释
-mtime n:文件修改时间正好是 n 天前。
-mtime -n:文件修改时间在 n 天内。
-mtime +n:文件修改时间超过 n 天。
-size n[c/k/M/G]:c 表示字节,k 表示 KB,M 表示 MB,G 表示 GB。
-size +n:文件大小大于 n。
-size -n:文件大小小于 n。
-size n:文件大小等于 n。
{}:表示 find 命令找到的文件路径。
mv:移动文件的命令。
/tmp/:目标目录,系统临时目录。
\;:表示 -exec 命令的结束。
题目 34:查询 /var/log/ 目录下三天前的的文件,并删除
find /var/log/ -type f -mtime +3 -exec rm -f {} \;
题目 35:统计 /var/log 下面所有文件的个数
find /var/log/ -type f | wc -l

浙公网安备 33010602011771号