Linux 用户、群组与系统管理

1. 用户和群组管理

1.1 用户配置文件

/etc/passwd 文件格式

1
2
3
4
5
6
7
8
9
lpic:x:500:500:LPI linux:/home/lpic:/bin/bash
↑ ↑ ↑ ↑ ↑ ↑ ↑
│ │ │ │ │ │ └─ 默认shell
│ │ │ │ │ └─────────── 家目录
│ │ │ │ └───────────────────── 用户备注信息(GECOS)
│ │ │ └───────────────────────── 主组GID
│ │ └───────────────────────────── 用户UID
│ └─────────────────────────────── 密码占位符(实际在/etc/shadow)
└──────────────────────────────────── 用户名

/etc/shadow 文件

  • 存储用户密码哈希值
  • 只有root用户可访问
  • 包含密码过期时间等安全信息

/etc/group 文件格式

1
2
3
4
5
6
staff:x:500:linux,lpic
↑ ↑ ↑ ↑
│ │ │ └───────────── 附加组成员
│ │ └───────────────── 组GID
│ └─────────────────── 组密码占位符
└───────────────────────── 组名

1.2 用户管理命令

useradd - 添加用户

1
useradd -c "开发人员" -d /home/dev -g staff -G developers -s /bin/bash -m devuser

常用选项:

  • -c:用户备注信息
  • -d:指定家目录路径
  • -g:指定主组
  • -G:指定附加组
  • -s:指定登录shell
  • -m:自动创建家目录(从/etc/skel复制模板)

usermod - 修改用户

1
usermod -c "高级开发" -G managers -s /bin/zsh devuser

常用选项:

  • -c:备注:指定备注
  • -d:path:home目录
  • -g:组名/GID:所属主组
  • -G:组名/GID:其他所属组
  • -s:path: login shell
  • -L:锁定用户密码
  • -U:解锁用户密码

userdel - 删除用户

1
userdel -r devuser  # 删除用户并移除家目录

passwd - 密码管理

1
2
3
passwd devuser      # 设置密码
passwd -l devuser # 锁定账户
passwd -u devuser # 解锁账户

1.3 群组管理命令

groupadd - 添加组

1
groupadd developers

groupmod - 修改组

1
groupmod -g 1001 -n devgroup developers
  • -g:修改GID
  • -n:修改组名

groupdel - 删除组

1
groupdel devgroup

id - 查看用户信息

1
id devuser  # 显示用户UID、GID和所属组

2. 系统时间管理

2.1 date - 系统时间

1
2
date 093017002012.30    # 设置为2012年9月30日17:00:30
date "+%Y/%m/%d (%a)" # 格式化为"2023/05/15 (Mon)"

常用格式符号:

  • %Y:4位年份
  • %m:2位月份
  • %d:2位日期
  • %H:24小时制小时
  • %M:分钟
  • %a:星期缩写

2.2 hwclock - 硬件时钟

1
2
3
hwclock --show          # 显示硬件时钟
hwclock --systohc # 系统时间同步到硬件时钟
hwclock --hctosys # 硬件时钟同步到系统时间

2.3 NTP时间同步

1
2
ntpdate time.server.lpic.jp  # 手动同步时间
service ntpd start # 启动NTP服务

NTP配置文件(/etc/ntp.conf):

1
2
3
driftfile /etc/ntp.drift
logfile /var/log/ntp.log
server ntp.server.lpic.jp

3. 系统日志管理

3.1 syslog 配置

配置文件:/etc/syslog.conf

格式:

1
facility.priority    log_location

facility(设施)类型:

  • auth/authpriv:认证相关
  • cron:定时任务
  • daemon:守护进程
  • kern:内核消息
  • mail:邮件系统
  • syslog:syslog自身
  • local0-local7:自定义设施

priority(优先级):

  • emerg:紧急情况
  • alert:需要立即处理
  • crit:严重错误
  • err:一般错误
  • warning:警告
  • notice:重要通知
  • info:一般信息
  • debug:调试信息

输出目标:

  • 文件名:如/var/log/messages
  • @host:远程syslog服务器
  • 用户名:发送到用户终端
  • *:所有用户终端

3.2 logger 命令

1
logger -p syslog.info -t TEST "测试日志消息"

3.3 常用日志文件

  • /var/log/secure:认证日志
  • /var/log/messages:系统消息
  • /var/log/boot.log:启动日志

3.4 用户登录信息

1
2
3
4
who          # 显示当前登录用户
w # 显示详细登录信息
last # 显示登录历史
lastlog # 显示用户最近登录时间

3.5 日志轮转

配置文件:/etc/logrotate.conf

示例:

1
2
3
4
5
6
7
8
9
10
weekly
rotate 4
create
compress

/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}

4. 邮件系统

4.1 邮件组件

  • MTA(邮件传输代理):sendmail/postfix/exim
  • MDA(邮件投递代理):procmail
  • MUA(邮件用户代理):mail/mutt/thunderbird

4.2 启动MTA

1
2
3
service sendmail start
service postfix start
service exim4 start

4.3 mail 命令

1
2
3
4
mail -s "测试邮件" user@example.com
邮件正文...
. # 单独一行输入点结束
Cc: # 抄送地址(可选)

4.4 邮件转发

/etc/aliases

1
root: admin,lpic

更新别名数据库:

1
newaliases

用户.forward文件

1
2
/home/user/.forward:
user2@example.com

5. 打印系统

5.1 CUPS打印系统

1
service cups start  # 启动CUPS服务

主要配置文件:

  • /etc/cups/cupsd.conf:服务配置
  • /etc/cups/printers.conf:打印机配置
  • /etc/cups/ppd/:PPD驱动文件

5.2 打印命令

lpr - 打印文件

1
lpr -P LaserJet -#2 document.pdf

lpq - 查看打印队列

1
lpq -P LaserJet

lprm - 删除打印任务

1
2
lprm -P LaserJet 123  # 删除指定任务
lprm -P LaserJet - # 删除用户所有任务

5.3 Web管理界面

访问:http://localhost:631

6. 定时任务管理

6.1 cron 定时任务系统

crontab 命令

1
2
3
4
crontab -e            # 编辑当前用户的crontab
crontab -l # 列出当前用户的crontab
crontab -r # 删除当前用户的crontab
crontab -u user -e # 编辑指定用户的crontab(root权限)

crontab 文件格式

1
2
3
4
5
6
7
* * * * * command_to_execute
│ │ │ │ │
│ │ │ │ └── 星期几 (0-6, 0=星期日)
│ │ │ └──── 月份 (1-12)
│ │ └────── 日 (1-31)
│ └──────── 小时 (0-23)
└────────── 分钟 (0-59)

特殊字符:

  • *:所有有效值
  • ,:值列表分隔符(如1,3,5)
  • -:范围(如1-5)
  • /:步长(如*/2表示每2个单位)

系统cron目录

1
2
3
4
5
6
/etc/crontab           # 系统级crontab文件
/etc/cron.d/ # 系统cron片段
/etc/cron.hourly/ # 每小时执行
/etc/cron.daily/ # 每天执行
/etc/cron.weekly/ # 每周执行
/etc/cron.monthly/ # 每月执行

anacron

  • 用于在系统停机后执行错过的定时任务
  • 配置文件:/etc/anacrontab

6.2 at 一次性任务

at 命令

1
2
3
4
at 17:00 tomorrow      # 创建定时任务
at -f job.sh 23:00 # 从文件读取任务
atq # 查看待执行任务(at -l)
atrm 3 # 删除任务3(at -d 3)

时间格式

1
2
3
4
HH:MM                  # 24小时制(如23:00)
noon/midnight # 中午12点/午夜12点
today/tomorrow # 今天/明天
now + count time-units # 如now + 3 days

6.3 batch 低负荷执行

1
2
batch                  # 进入交互式输入模式
batch -f job.sh # 从文件读取任务

6.4 访问控制

cron 访问控制

  1. 如存在/etc/cron.allow,仅允许文件内用户
  2. 如无allow文件,检查/etc/cron.deny,拒绝文件内用户
  3. 如两者都不存在,默认行为取决于系统配置

at 访问控制

  1. 如存在/etc/at.allow,仅允许文件内用户
  2. 如无allow文件,检查/etc/at.deny,拒绝文件内用户
  3. 如两者都不存在,默认只有root可用

7. 本地化与国际化

7.1 本地化变量

变量 作用域
LC_CTYPE 字符分类和大小写转换
LC_COLLATE 排序和比较规则
LC_MESSAGES 系统消息语言
LC_MONETARY 货币格式
LC_NUMERIC 数字格式
LC_TIME 日期时间格式
LC_ALL 覆盖所有LC_*设置
LANG 默认设置(未被LC_*覆盖时使用)

7.2 常用locale设置

1
2
3
4
5
C/POSIX               # 最小locale
en_US.utf8 # 英文(美国)
ja_JP.utf8 # 日文(UTF-8)
ja_JP.eucJP # 日文(EUC-JP)
zh_CN.utf8 # 中文(简体)

7.3 locale 命令

1
2
3
locale -a             # 列出可用locale
locale -m # 列出可用字符编码
locale # 显示当前locale设置

7.4 字符编码

编码 描述
ASCII 7位英文字符
ISO-8859 8位扩展ASCII
UTF-8 Unicode编码
EUC-JP Linux日文编码
Shift_JIS Windows/Mac日文编码
ISO-2022-JP 邮件用日文编码

7.5 iconv 编码转换

1
2
iconv -f eucjp -t utf8 input.txt > output.txt  # EUC-JP转UTF-8
iconv -l # 列出支持编码

8. 时区设置

8.1 时区文件

1
2
/usr/share/zoneinfo/   # 所有时区定义文件
/etc/localtime # 系统当前时区链接

8.2 设置时区方法

1
2
3
4
5
6
7
8
# 方法1: 复制时区文件
cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

# 方法2: 创建符号链接
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

# 方法3: 临时设置(当前会话有效)
export TZ="Asia/Tokyo"

8.3 时区配置工具

1
2
3
4
tzselect   # 交互式时区选择
tzconfig # 时区配置工具(部分发行版)
dpkg-reconfigure tzdata # Debian系重新配置时区
timedatectl set-timezone Asia/Tokyo # systemd系统设置时区

9. 打印系统补充

9.1 CUPS Web管理界面

访问:http://localhost:631

9.2 打印命令补充

1
2
lpstat -p -d          # 显示打印机状态和默认打印机
lpoptions -d LaserJet # 设置默认打印机

9.3 打印系统日志

1
/var/log/cups/        # CUPS日志目录