高级命令
用户
/etc/passwd
并不是一个用来保存密码的文件,而是用来保存用户信息的文件。保存密码的是/etc/shadow
。
/etc/passwd
的字段包括:登录用户名、用户密码、用户UID、用户的组ID、备注、HOME目录的位置和默认shell。
千万不要直接修改/etc/passwd
文件,改崩了可能连root用户都登不了系统。要使用专用的命令来更改用户设置。
useradd
: 创建一个新用户
useradd [
options
]
login
: 以options
中的设置创建新用户login
useradd -D
: 显示默认设置的内容
useradd -D [
options
]
: 修改默认设置的内容
参数 | 描述 |
---|---|
-c comment | 给新用户添加备注 |
-d home-dir | 指定主目录的名字(如果不想用登录名作为主目录名的话) |
-e expire-date | 用YYYY-MM-DD的格式指定一个账户过期的日期 |
-g initial-group | 指定用户登录组的gid或组名 |
-m | 创建用户的主目录 |
-M | 不创建用户的主目录 |
-p | 指定账户默认的密码 |
-s shell | 指定默认的登录shell |
-u uid | 指定uid |
adduser
: 交互式添加用户
比useradd
好用,不容易出问题。
userdel
: 删除用户
默认情况下,userdel
只会删除/etc/passwd
文件中的用户信息,而不会删除系统中属于该账户的任何文件。
使用-r
,userdel
会删除用户的HOME目录以及邮件目录
usermod
: 修改用户账户的字段。
参数 | 描述 |
---|---|
-c comment | 修改备注字段 |
-e date | 修改过期时间 |
-g group | 修改登录组 |
-l name | 修改登录名 |
-L | 锁定用户 |
-U | 解锁 |
-p passwd | 修改账户的密码 |
passwd
: 修改密码
chpasswd
: 批量修改密码
chsh
: 修改用户登录shell
组
/etc/group
文件中保存了每个组的信息,包括:组名、组密码、组ID和属于该组的用户列表。
组密码用于使非组内成员临时成为该组成员。用户列表中不一定列出了所有组内成员。当一个用户在/etc/passwd
文件中指定某个组作为默认组是,该用户账户不会再出现在/etc/group
中。
同/etc/passwd
,不要直接用编辑器改这个文件。
groupadd
: 创建新组
groupmod
: 修改已有组的字段
注意:把一个用户添加到一个组中使用usermod -aG
groups...
命令,没有对应的groupmod
命令。
文件权限
ls -l
输出的结果的第一个字段就是描述文件和目录权限的编码。
- -
代表文件
- d
代表目录
- l
代表链接
- c
代表字符形设备
- b
代表块设备
- n
代表网络设备
之后三组三字符编码分别对应文件的属主、属组和其他用户的访问权限
- r
代表可读
- w
代表可写
- x
代表可执行。对于文件夹,可读意味着可以读取文件目录项,即可以知道该目录下的内容;可执行意味着,可以访问目录下的文件。
umask
: 显示或设置新建文件和目录的默认权限屏蔽字
每组rwx
可以看成一个八进制数字。普通文件的自然权限是6,即可读可写不可执行;目录的自然权限是7,可读可写可执行。权限屏蔽字就是创建的文件需要屏蔽的权限。
比如,mask为002时,新建的文件其他用户没有写权限。
chmod
: 改变文件的权限
- chmod
options mode file
mode
参数可以使用八进制值或者符号模式进行描述。
符号模式:[ugoa...][+-=][rwxXstugo...]
。第一组字符定义了权限作用的对象:u
代表用户、g
代表组、o
代表其他、a
代表全部;下一步表示你是想要在现有的权限上增加权限(+
),还是移除权限(-
),或是将权限设置成后面的值(=
);第三个符号代表作用到设置上的权限:
- X
: 如果对象是目录或者它已有执行权限,赋予执行权限。
- s
: 运行时重新设置UID或GID
- t
: 保留文件或目录
- u
: 将权限设置为跟属主一样
- g
: 将权限设置为跟属组一样
- o
: 将权限设置为更其他用户一样
chown
: 改变文件的属主
chown
options owner[:[group]] file
可以用登录名或者UID来指定文件的属主。
文件系统
文件系统建立在磁盘分区上,一个物理存储设备可以划分成一个或者多个分区,分区可视为存储子设备。
存储设备首部建有分区表,用来描述该存储器上的分区划分。
fdisk
: 用来管理存储设备上的分区
交互命令:
n
: 新建分区p
: 列出分区表w
: 将改动写入磁盘d
: 删除一个分区
mkfs
: 在分区上创建文件系统, 创建文件系统命令有多种:mkfs.e2fs
,mkfs.ext2
,mkfs.vfat
等等。
软件管理
apt
:
dpkg
:
作业控制
在命令后面加&
,把命令放到后台作为一个独立的进程运行。shell会显示分配的作业号和进程号。当进程在后台运行时,它仍然使用终端的显示器来显示STDOUT和STDERR的信息。在终端会话中使用后台进程时,每一个后台进程都和终端会话连接在一起。如果终端会话退出,那么后台进程也会退出。
nohup command&
如果想要在终端会话中启动脚本,然后让脚本一直在后台模式运行到结束,即使推出了终端,这可以通过nohup
命令来实现。nohup
命令运行了另外一个命令来阻断所有发送给该进程的SIGHUP
信号。这会在退出终端会话时阻止进程退出。由于nohup
命令会解除终端与进程的关联,进程也不再同STDOUT
和STDERR
联系在一起,为了保存该命令产生的输出,nohup
会自动将STDOUT
和STDERR
的信息重定向到一个名为nohup.out
的文件中。
jobs
命令可以查看后台的作业。
bg job-number
命令可以把暂停的作业放到后台运行
fg job-number
命令可以把暂停的作业放到前台运行
nice
: 设置命令启动时的优先级
nice [option] [command [arg]...]
优先级取值从-20
到19
,默认情况下,bash shell以优先级0
来启动进程。设置正优先级需要管理员权限。
- -n N: 执行优先级
renice: 改变正在运行的进程的优先级。
renice [-n] priority [-g|-p|-u] identifier...
和nice命令类似,降低优先级不需要管理员权限,提高优先级需要管理员权限。
- -n prior: 指定优先级
- -g: 跟着的参数为组id,改变该组进程的优先级
- -p: 跟着的参数为Pid,改变该进程的优先级
- -u: 跟着的参数为uid,改变该用户进程的优先级
·at
: 计划执行作业
at [-f filename] time
at命令允许指定Linux系统何时运行脚本。at命令会将作业提交到队列中,指定shell何时运行该作业。at的守护进程atd会以后台模式运行,检查作业队列来运行作业。
- -f filename: 指定作业的命令脚本。缺省时从stdin输入。
- time: 指定何时运行作业。可以使用多种格式:
- HH:MM 每天的HH时MM分运行
- midnight,noon,teatime(4pm)
- month-name day 指定某天
- MM/DD/[CC]YY
- count-time-units
当作业运行时,显示器并不会关联到该作业。linux会将提交该作业的用户的电子邮件地址作为STDOUT和STDERR。因此使用at命令时最好以用重定向输出到文件中。
- count-time-units
atq
: 列出系统中等待的作业
atrm
: 删除等待队列中的作业