Linux必备知识(一)

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#  其他发行版中可以用dnfsudo 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、内存利用率,启动时间等

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注