usermod
sudo usermod -aG admins jay # 将用户jay加入 admins组
groups jay # 查看 jay所属的组
sudo usermod -aG admins,sudo jay # 加入多个组 # 移动主目录,需要以root身份登录
sudo usermod -d /home/myhome --move-home jay
# 我们甚至可以不必先创建目录,该命令会自动创建
# 可以注销root,再以jay目录登录测试
pwd ~echo $HOME
# 修改用户名
usermod -l jayl jay # 锁定用户
usermod -L jayl # 解锁用户
usermod -U jayl # 设置过期日期
usermod jayl -e 2022-4-17 # 查询下用户情况 ,用 chage命令
chage -l jayl
sudo
代替root工作,有些命令只有root能做。用户可以切到 root
# 切到root运行,当然有些系统是没启动root的
su -
有了sudo,可以禁用或锁定 root,因为基本用不到,尤其是 ssh,一般要禁止root登录。
有些实例比如云中的实例可能未装 sudo,所以要确认一下
which sudo
如果没有装sudo,可以查一下是否有 sudo组或 wheel组。
查看 /etc/sudoers文件
# 以root登录查看
cat /etc/sudoers
# 在这个文件的后面可以看到 %sudo 之类的
# 前面的 % 表示组,说明该发行版加入 sudo组就具体 sudo 权限
# 有些发行版不是 sudo组,而是 wheel组,在文件显示 %wheel,那就只要将用户加入wheel组即可 # 查看当前用户是否属于这个文件标示的组
groups jay
# 或 不加用户名groups # 如果不属于,就加进该组,比如发行版是 wheel组
usermod -aG wheel jay # 可以检查下当前用户用 sudo可以做什么
sudo -l
# 通常会显示权限是 (ALL:ALL)ALL
# 后面会解释 # 有时候执行一个命令忘了输sudo,显示没权限,我们需重新加 sudo重新执行
# 只需用 两个感叹号就行sudo !! # 回到sudoers文件,能看到
# %sudo ALL=(ALL:ALL)ALL我们可以新建一个组比如 sudo2 并复制这行%sudo2 ALL=(ALL:ALL)ALL就可以实现只要用户加入 sudo2也有sudo权限
但这么多ALL是什么意思呢?
第一个ALL 表示主机,一般保留
第二个ALL 表示用户,可以使用具体的用户,99%情况下是模拟root
第三个ALL 表示组
第四个ALL 表示任何命令
不建议直接编辑sudoers文件,万一出错很麻烦,通过命令较好,可以事先捕捉到错误
# 使用visudo来编辑sudoers文件添加一行,允许用户 tux可以使用sudo,实际上系统里可以尚未存在这个tux用户
tux ALL=(ALL:ALL)ALL
保存文件,如果没有报错,说明语法是对的。 # 添加用户 tux
sudo adduser tux # 切换到tux
sudo su - tux # 检查sudo权限
sudo -l
确认确实已有sudo权限 # 我们可以让用户使用sudo执行特定的命令
# 具体的命令路径可以用 which 命令查询
which rm
查到路径 sudo visudo
修改成
tux ALL=(ALL:ALL) /usr/bin/apt,/usr/bin/rm
保存
我们也可以设置运行sudo 不用输密码,这样方便但会损失一些安全。
# 在命令前面添加 NOPASSWD: 即可
sudo visudo
修改成
tux ALL=(ALL:ALL) NOPASSWD: /etc/bin/apt,/usr/bin/rm
最后,用 sudo visudo修改如果有错误的,会有提示,但没告诉选项。可以选择:
e 表示退回重新修改
x 表示退出不修改
q 表示保存修改并退出,绝对不要选这个,否则将会将错误的配置保存,会出现不可预知的错误。
htop
以前用 top,现在用htop,比top更直观好用。
安装
sudo apt install htop
# 其他发行版中可以用dnf
sudo dnf install htop
可以使用鼠标对各列进行排序,也可以定制相关显示。
上下箭头选择进程,比如htop进程,按F9 杀死进程,选择一个发送的选项,然后回车kill掉
shift+P 对CPU列进行排序
shift+M 对内存列进行排序
f2 可以设置上部部分显示
进程很多,查找有点困难,可以通过两种方式:
按用户查找,按 u ,通过用户筛选进程
按名字查找,按f3 ,输入名称查找。
PS 命令
仅输入 ps ,只有简单的几行,表示当前会话终端运行的进程。
PID 表示进程ID,Linux保证进程ID是唯一的
TTY 表示运行的会话终端
TIME 表示CPU时间
ps 有不同格式,一般情况下使用 unix风格 和 BSD风格。
ps -aux unix格式
ps aux bsd风格
ps –quick-pid 2925 gnu风格
ps x
# 查看当前用户运行的所有进程,不限于当前会话
# 能看到STAT列,有相关状态
# s 小写s 表示是根进程
# S 大写S 表示是睡眠状态,可能在等待输入等状态,不中断的睡眠状态
# R 大写R 表示正在实际运行,未在睡眠等待
# T 大写T 表示终止进程,类似按了CTRL+Z中断到后台
# 下面看看ps另一种方法
ps -He #
# 大写H以层次结构显示进程,能方便看出父子关系
# 小写e 表示显示所有,不限于当前终端 ps -axjf
#
# 能更清楚看到层次结构
# 能看到一些新列
# ppid 是指父PID
# pgid 父组ID
# sid 表示会话ID,通常与启动链一样
# tpgid 终端组ID
# uid 用户ID,启动该进t程的用户 ps aux
## 可能是最流行的参数
# 可以看到友好的用户名称,CPU、内存利用率,启动时间等