📝 linux 系统管理命令

This commit is contained in:
Zhang Peng 2018-02-28 09:43:42 +08:00
parent 4630576d76
commit 4d91940625
7 changed files with 1393 additions and 640 deletions

View File

@ -15,8 +15,13 @@
* [linux 常用命令-文件权限属性设置](linux/commands/文件目录管理/文件权限属性设置.md)
* [linux 常用命令-文件查找和比较](linux/commands/文件目录管理/文件查找和比较.md)
* [linux 常用命令-目录基本操作](linux/commands/文件目录管理/目录基本操作.md)
* [linux 常用命令-系统管理](linux/commands/系统管理/README.md)
* [linux 常用命令-系统操作](linux/commands/系统管理/系统操作.md)
* [linux 常用命令-系统设置](linux/commands/系统管理/系统设置.md)
* [linux 常用命令-用户和工作组管理](linux/commands/系统管理/用户和工作组管理.md)
* [linux 常用命令-进程和作业管理](linux/commands/系统管理/进程和作业管理.md)
* [linux 常用命令-网络管理](linux/commands/网络管理/README.md)
* [linux 常用命令-网络管理](linux/commands/网络管理/网络应用.md)
* [linux 常用命令-网络应用](linux/commands/网络管理/网络应用.md)
* [linux 常用命令-磁盘管理](linux/commands/磁盘管理.md)
* [yum 命令](linux/yum.md)
* [shell](shell/README.md)

View File

@ -1,638 +0,0 @@
# Linux 常用命令-系统设置
## useradd 命令
> useradd 命令用于建立用户帐号。
>
> useradd 可用来建立用户帐号。帐号建好之后,再用 passwd 设定帐号的密码。使用 useradd 指令所建立的帐号,实际上是保存在 `/etc/passwd` 文本文件中。
>
> userdel 可用来删除帐号。
### 语法
```
useradd [-mMnr][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s <shell>][-u <uid>][用户帐号]
```
```
useradd -D [-b][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s <shell>]
```
**参数说明**
- -c<备注>  加上备注文字。备注文字会保存在passwd的备注栏位中。
- -d<登入目录>  指定用户登入时的启始目录。
- -D  变更预设值.
- -e<有效期限>  指定帐号的有效期限。
- -f<缓冲天数>  指定在密码过期后多少天即关闭该帐号。
- -g<群组>  指定用户所属的群组。
- -G<群组>  指定用户所属的附加群组。
- -m  自动建立用户的登入目录。
- -M  不要自动建立用户的登入目录。
- -n  取消建立以用户名称为名的群组.
- -r  建立系统帐号。
- -s<shell>   指定用户登入后所使用的shell。
- -u<uid>  指定用户ID。
### 实例
添加一般用户
```sh
$ useradd tt
```
为添加的用户指定相应的用户组
```sh
$ useradd -g root tt
```
创建一个系统用户
```sh
$ useradd -r tt
```
为新添加的用户指定home目录
```sh
$ useradd -d /home/myd tt
```
建立用户且制定ID
```sh
$ useradd caojh -u 544
```
## userdel 命令
> userdel 命令用于删除用户帐号。
>
> userdel 可删除用户帐号与相关的文件。若不加参数,则仅删除用户帐号,而不删除相关文件。
### 语法
```
userdel [-r][用户帐号]
```
**参数说明**
- -r  删除用户登入目录以及目录中所有文件。
### 实例
删除用户账号
```sh
$ userdel hnlinux
```
## usermod 命令
> usermod 命令用于修改用户帐号。
>
> usermod 可用来修改用户帐号的各项设定。
### 语法
```
usermod [-LU][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-l <帐号名称>][-s <shell>][-u <uid>][用户帐号]
```
**参数说明**
- -c<备注>  修改用户帐号的备注文字。
- -d登入目录>  修改用户登入时的目录。
- -e<有效期限>  修改帐号的有效期限。
- -f<缓冲天数>  修改在密码过期后多少天即关闭该帐号。
- -g<群组>  修改用户所属的群组。
- -G<群组>  修改用户所属的附加群组。
- -l<帐号名称>  修改用户帐号名称。
- -L  锁定用户密码,使密码无效。
- -s<shell>  修改用户登入后所使用的shell。
- -u<uid>  修改用户ID。
- -U  解除密码锁定。
### 实例
更改登录目录
```sh
# usermod -d /home/hnlinux root
```
改变用户的uid
```sh
# usermod -u 777 root
```
## passwd 命令
> passwd 命令用来更改使用者的密码。
### 语法
```
passwd [-k] [-l] [-u [-f]] [-d] [-S] [username]
```
**必要参数**
- -d 删除密码
- -f 强制执行
- -k 更新只能发送在过期之后
- -l 停止账号使用
- -S 显示密码信息
- -u 启用已被停止的账户
- -x 设置密码的有效期
- -g 修改群组密码
- -i 过期后停止用户账号
**选择参数**
- --help 显示帮助信息
- --version 显示版本信息
### 实例
修改用户密码
```sh
$ passwd w3cschool //设置w3cschool用户的密码
Enter new UNIX password: //输入新密码,输入的密码无回显
Retype new UNIX password: //确认密码
passwd: password updated successfully
```
显示账号密码信息
```sh
$ passwd -S w3cschool
w3cschool P 05/13/2010 0 99999 7 -1
```
删除用户密码
```sh
$ passwd -d lx138
passwd: password expiry information changed.
```
##
## su 命令
> su 命令用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码。
>
> 使用权限:所有使用者。
### 语法
```
su [options] [-] [USER [arg]...]
```
**参数说明**
- -f 或 --fast 不必读启动档(如 csh.cshrc 等),仅用于 csh 或 tcsh
- -m -p 或 --preserve-environment 执行 su 时不改变环境变数
- -c command 或 --command=command 变更为帐号为 USER 的使用者并执行指令command后再变回原来使用者
- -s shell 或 --shell=shell 指定要执行的 shell bash csh tcsh 等),预设值为 /etc/passwd 内的该使用者USER shell
- --help 显示说明文件
- --version 显示版本资讯
- \- -l 或 --login 这个参数加了之后,就好像是重新 login 为该使用者一样大部份环境变数HOME SHELL USER等等都是以该使用者USER为主并且工作目录也会改变如果没有指定 USER ,内定是 root
- USER 欲变更的使用者帐号
- ARG 传入新的 shell 参数
### 实例
变更帐号为 root 并在执行 ls 指令后退出变回原使用者
```sh
$ su -c ls root
```
变更帐号为 root 并传入 -f 参数给新执行的 shell
```sh
$ su root -f
```
变更帐号为 clsung 并改变工作目录至 clsung 的家目录home dir
```sh
$ su - clsung
```
切换用户
```
hnlinux@w3cschool.cc:~$ whoami //显示当前用户
hnlinux
hnlinux@w3cschool.cc:~$ pwd //显示当前目录
/home/hnlinux
hnlinux@w3cschool.cc:~$ su root //切换到root用户
密码:
root@w3cschool.cc:/home/hnlinux# whoami
root
root@w3cschool.cc:/home/hnlinux# pwd
/home/hnlinux
```
切换用户,改变环境变量
```
hnlinux@w3cschool.cc:~$ whoami //显示当前用户
hnlinux
hnlinux@w3cschool.cc:~$ pwd //显示当前目录
/home/hnlinux
hnlinux@w3cschool.cc:~$ su - root //切换到root用户
密码:
root@w3cschool.cc:/home/hnlinux# whoami
root
root@w3cschool.cc:/home/hnlinux# pwd //显示当前目录
/root
```
## sudo 命令
> sudo 命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。
>
> 使用权限:在 `/etc/sudoers` 中有出现的使用者。
### 语法
```sh
usage: sudo -h | -K | -k | -V
usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]
usage: sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-u user] [VAR=value] [-i|-s] [<command>]
usage: sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-u user] file ...
```
**参数说明**
- -V 显示版本编号
- -h 会显示版本编号及指令的使用方式说明
- -l 显示出自己(执行 sudo 的使用者)的权限
- -v 因为 sudo 在第一次执行时或是在 N 分钟内没有执行N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码
- -k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)
- -b 将要执行的指令放在背景执行
- -p prompt 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
- -u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)
- -s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
- -H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root
- command 要以系统管理者身份(或以 -u 更改为其他人)执行的指令
### 实例
sudo 命令使用
```sh
$ sudo ls
[sudo] password for hnlinux:
hnlinux is not in the sudoers file. This incident will be reported.
```
指定用户执行命令
```sh
$ sudo -u userb ls -l
```
显示sudo设置
```sh
$ sudo -L //显示sudo设置
Available options in a sudoers ``Defaults'' line:
syslog: Syslog facility if syslog is being used for logging
syslog_goodpri: Syslog priority to use when user authenticates successfully
syslog_badpri: Syslog priority to use when user authenticates unsuccessfully
long_otp_prompt: Put OTP prompt on its own line
ignore_dot: Ignore '.' in $PATH
mail_always: Always send mail when sudo is run
mail_badpass: Send mail if user authentication fails
mail_no_user: Send mail if the user is not in sudoers
mail_no_host: Send mail if the user is not in sudoers for this host
mail_no_perms: Send mail if the user is not allowed to run a command
tty_tickets: Use a separate timestamp for each user/tty combo
lecture: Lecture user the first time they run sudo
lecture_file: File containing the sudo lecture
authenticate: Require users to authenticate by default
root_sudo: Root may run sudo
log_host: Log the hostname in the (non-syslog) log file
log_year: Log the year in the (non-syslog) log file
shell_noargs: If sudo is invoked with no arguments, start a shell
set_home: Set $HOME to the target user when starting a shell with -s
always_set_home: Always set $HOME to the target user's home directory
path_info: Allow some information gathering to give useful error messages
fqdn: Require fully-qualified hostnames in the sudoers file
insults: Insult the user when they enter an incorrect password
requiretty: Only allow the user to run sudo if they have a tty
env_editor: Visudo will honor the EDITOR environment variable
rootpw: Prompt for root's password, not the users's
runaspw: Prompt for the runas_default user's password, not the users's
targetpw: Prompt for the target user's password, not the users's
use_loginclass: Apply defaults in the target user's login class if there is one
set_logname: Set the LOGNAME and USER environment variables
stay_setuid: Only set the effective uid to the target user, not the real uid
preserve_groups: Don't initialize the group vector to that of the target user
loglinelen: Length at which to wrap log file lines (0 for no wrap)
timestamp_timeout: Authentication timestamp timeout
passwd_timeout: Password prompt timeout
passwd_tries: Number of tries to enter a password
umask: Umask to use or 0777 to use user's
logfile: Path to log file
mailerpath: Path to mail program
mailerflags: Flags for mail program
mailto: Address to send mail to
mailfrom: Address to send mail from
mailsub: Subject line for mail messages
badpass_message: Incorrect password message
timestampdir: Path to authentication timestamp dir
timestampowner: Owner of the authentication timestamp dir
exempt_group: Users in this group are exempt from password and PATH requirements
passprompt: Default password prompt
passprompt_override: If set, passprompt will override system prompt in all cases.
runas_default: Default user to run commands as
secure_path: Value to override user's $PATH with
editor: Path to the editor for use by visudo
listpw: When to require a password for 'list' pseudocommand
verifypw: When to require a password for 'verify' pseudocommand
noexec: Preload the dummy exec functions contained in 'noexec_file'
noexec_file: File containing dummy exec functions
ignore_local_sudoers: If LDAP directory is up, do we ignore local sudoers file
closefrom: File descriptors >= %d will be closed before executing a command
closefrom_override: If set, users may override the value of `closefrom' with the -C option
setenv: Allow users to set arbitrary environment variables
env_reset: Reset the environment to a default set of variables
env_check: Environment variables to check for sanity
env_delete: Environment variables to remove
env_keep: Environment variables to preserve
role: SELinux role to use in the new security context
type: SELinux type to use in the new security context
askpass: Path to the askpass helper program
env_file: Path to the sudo-specific environment file
sudoers_locale: Locale to use while parsing sudoers
visiblepw: Allow sudo to prompt for a password even if it would be visisble
pwfeedback: Provide visual feedback at the password prompt when there is user input
fast_glob: Use faster globbing that is less accurate but does not access the filesystem
umask_override: The umask specified in sudoers will override the user's, even if it is more permissive
```
以root权限执行上一条命令
```sh
$ sudo !!
```
以特定用户身份进行编辑文本
```sh
$ sudo -u uggc vi ~www/index.html
// 以 uggc 用户身份编辑 home 目录下www目录中的 index.html 文件
```
列出目前的权限
```sh
$ sudo -l
```
列出 sudo 的版本资讯
```sh
$ sudo -V
```
## ps 命令
> ps 命令用于显示当前进程 (process) 的状态。
### 语法
```
ps [options] [--help]
```
**参数**
- ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
- -A 列出所有的行程
- -w 显示加宽可以显示较多的资讯
- -au 显示较详细的资讯
- -aux 显示所有包含其他使用者的行程
- au(x) 输出格式 :
- USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
- USER: 行程拥有者
- PID: pid
- %CPU: 占用的 CPU 使用率
- %MEM: 占用的记忆体使用率
- VSZ: 占用的虚拟记忆体大小
- RSS: 占用的记忆体大小
- TTY: 终端的次要装置号码 (minor device number of tty)
- STAT: 该行程的状态:
- D: 不可中断的静止 (通悸□□缜b进行 I/O 动作)
- R: 正在执行中
- S: 静止状态
- T: 暂停执行
- Z: 不存在但暂时无法消除
- W: 没有足够的记忆体分页可分配
- <: 高优先序的行程
- N: 低优先序的行程
- L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
- START: 行程开始时间
- TIME: 执行的时间
- COMMAND:所执行的指令
### 实例
```sh
$ ps -A 显示进程信息
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 migration/0
4 ? 00:00:00 ksoftirqd/0
5 ? 00:00:00 watchdog/0
6 ? 00:00:00 events/0
7 ? 00:00:00 cpuset
8 ? 00:00:00 khelper
9 ? 00:00:00 netns
10 ? 00:00:00 async/mgr
11 ? 00:00:00 pm
12 ? 00:00:00 sync_supers
13 ? 00:00:00 bdi-default
14 ? 00:00:00 kintegrityd/0
15 ? 00:00:02 kblockd/0
16 ? 00:00:00 kacpid
17 ? 00:00:00 kacpi_notify
18 ? 00:00:00 kacpi_hotplug
19 ? 00:00:27 ata/0
……省略部分结果
30749 pts/0 00:00:15 gedit
30886 ? 00:01:10 qtcreator.bin
30894 ? 00:00:00 qtcreator.bin
31160 ? 00:00:00 dhclient
31211 ? 00:00:00 aptd
31302 ? 00:00:00 sshd
31374 pts/2 00:00:00 bash
31396 pts/2 00:00:00 ps
```
显示指定用户信息
```sh
$ ps -u root //显示root进程用户信息
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 migration/0
4 ? 00:00:00 ksoftirqd/0
5 ? 00:00:00 watchdog/0
6 ? 00:00:00 events/0
7 ? 00:00:00 cpuset
8 ? 00:00:00 khelper
9 ? 00:00:00 netns
10 ? 00:00:00 async/mgr
11 ? 00:00:00 pm
12 ? 00:00:00 sync_supers
13 ? 00:00:00 bdi-default
14 ? 00:00:00 kintegrityd/0
15 ? 00:00:02 kblockd/0
16 ? 00:00:00 kacpid
……省略部分结果
30487 ? 00:00:06 gnome-terminal
30488 ? 00:00:00 gnome-pty-helpe
30489 pts/0 00:00:00 bash
30670 ? 00:00:00 debconf-communi
30749 pts/0 00:00:15 gedit
30886 ? 00:01:10 qtcreator.bin
30894 ? 00:00:00 qtcreator.bin
31160 ? 00:00:00 dhclient
31211 ? 00:00:00 aptd
31302 ? 00:00:00 sshd
31374 pts/2 00:00:00 bash
31397 pts/2 00:00:00 ps
```
显示所有进程信息,连同命令行
```sh
$ ps -ef //显示所有命令,连带命令行
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10:22 ? 00:00:02 /sbin/init
root 2 0 0 10:22 ? 00:00:00 [kthreadd]
root 3 2 0 10:22 ? 00:00:00 [migration/0]
root 4 2 0 10:22 ? 00:00:00 [ksoftirqd/0]
root 5 2 0 10:22 ? 00:00:00 [watchdog/0]
root 6 2 0 10:22 ? /usr/lib/NetworkManager
……省略部分结果
root 31302 2095 0 17:42 ? 00:00:00 sshd: root@pts/2
root 31374 31302 0 17:42 pts/2 00:00:00 -bash
root 31400 1 0 17:46 ? 00:00:00 /usr/bin/python /usr/sbin/aptd
root 31407 31374 0 17:48 pts/2 00:00:00 ps -ef
```
显示含关键字的进程
```sh
$ ps ef | grep xxx
```
## kill 命令
> kill 命令用于删除执行中的程序或工作。
>
> kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。程序或工作的编号可利用 ps 指令或 jobs 指令查看。
### 语法
```
kill [-s <信息名称或编号>][程序]  kill [-l <信息编号>]
```
**参数说明**
- -l <信息编号>  若不加<信息编号>选项,则-l参数会列出全部的信息名称。
- -s <信息名称或编号>  指定要送出的信息。
- [程序]  [程序]可以是程序的PID或是PGID也可以是工作编号。
### 实例
杀死进程
```sh
$ kill 12345
```
强制杀死进程
```sh
$ kill -KILL 123456
```
发送SIGHUP信号可以使用一下信号
```sh
$ kill -HUP pid
```
彻底杀死进程
```sh
$ kill -9 123456
```
显示信号
```sh
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
```
杀死指定用户所有进程
```sh
$ kill -9 $(ps -ef | grep hnlinux) //方法一 过滤出hnlinux用户进程
$ kill -u hnlinux //方法二
```
## exit 命令
> exit 命令用于退出目前的shell。
执行exit可使shell以指定的状态值退出。若不设置状态值参数则shell以预设值退出。状态值0代表执行成功其他值代表执行失败。exit也可用在script离开正在执行的script回到shell。
### 语法
```
exit [状态值]
```
### 实例
退出终端
```
# exit
```

View File

@ -1,2 +1,6 @@
# linux 常用命令-系统管理
* [linux 常用命令-系统操作](系统操作.md)
* [linux 常用命令-系统设置](系统设置.md)
* [linux 常用命令-用户和工作组管理](用户和工作组管理.md)
* [linux 常用命令-进程和作业管理](进程和作业管理.md)

View File

@ -8,6 +8,65 @@ tags:
- command
---
<!-- TOC -->
- [linux 常用命令-用户和工作组管理](#linux-%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4-%E7%94%A8%E6%88%B7%E5%92%8C%E5%B7%A5%E4%BD%9C%E7%BB%84%E7%AE%A1%E7%90%86)
- [groupadd](#groupadd)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [groupdel](#groupdel)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [groupmod](#groupmod)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [useradd](#useradd)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [userdel](#userdel)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [usermod](#usermod)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [passwd](#passwd)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [知识扩展](#%E7%9F%A5%E8%AF%86%E6%89%A9%E5%B1%95)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [su](#su)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [sudo](#sudo)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
<!-- /TOC -->
# linux 常用命令-用户和工作组管理
## groupadd
@ -424,3 +483,195 @@ su root -f
```
su -test
```
## sudo
以其他身份来执行命令
### 补充说明
**sudo命令** 用来以其他身份来执行命令预设的身份为root。在`/etc/sudoers`中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo则会发出警告的邮件给管理员。用户使用sudo时必须先输入密码之后有5分钟的有效期限超过期限则必须重新输入密码。
### 语法
```
sudo(选项)(参数)
```
### 选项
```
-b在后台执行指令
-h显示帮助
-H将HOME环境变量设为新身份的HOME环境变量
-k结束密码的有效期限也就是下次再执行sudo时便需要输入密码
-l列出目前用户可执行与无法执行的指令
-p改变询问密码的提示符号
-s<shell>执行指定的shell
-u<用户>以指定的用户作为新的身份。若不加上此参数则预设以root作为新的身份
-v延长密码有效期限5分钟
-V :显示版本信息。
```
### 参数
指令:需要运行的指令和对应的参数。
### 实例
```
$ sudo su -
# env | grep -E '(HOME|SHELL|USER|LOGNAME|^PATH|PWD|TEST_ETC|TEST_ZSH|TEST_PRO|TEST_BASH|TEST_HOME|SUDO)'
```
这个命令相当于使用root超级用户重新登录一次shell只不过密码是使用的当前用户的密码。而且重要是该命令会 **重新加载/etc/profile文件以及/etc/bashrc文件等系统配置文件并且还会重新加载root用户的$SHELL环境变量所对应的配置文件** 比如root超级用户的$SHELL是/bin/bash则会加载/root/.bashrc等配置。如果是/bin/zsh则会加载/root/.zshrc等配置执行后是完全的root环境。
```
$ sudo -i
# env | grep -E '(HOME|SHELL|USER|LOGNAME|^PATH|PWD|TEST_ETC|TEST_ZSH|TEST_PRO|TEST_BASH|TEST_HOME|SUDO)'
```
这个命令基本与 `sudo su -` 相同执行后也是root超级用户的环境只不过是多了一些当前用户的信息。
```
$ sudo -s
# env|grep -E '(HOME|SHELL|USER|LOGNAME|^PATH|PWD|TEST_ETC|TEST_ZSH|TEST_PRO|TEST_BASH|TEST_HOME|SUDO)' --color
```
这个命令相当于 **以当前用户的$SHELL开启了一个root超级用户的no-login的shell不会加载/etc/profile等系统配置** 。所以/etc/profile文件中定义的TEST_ETC环境变量就看不到了但是会**加载root用户对应的配置文件**比如root用户的$SHELL是/bin/zsh那么会加载/root/.zshrc配置文件执行完后不会切换当前用户的目录。
配置sudo必须通过编辑`/etc/sudoers`文件而且只有超级用户才可以修改它还必须使用visudo编辑。之所以使用visudo有两个原因一是它能够防止两个用户同时修改它二是它也能进行有限的语法检查。所以即使只有你一个超级用户你也最好用visudo来检查一下语法。
visudo默认的是在vi里打开配置文件用vi来修改文件。我们可以在编译时修改这个默认项。visudo不会擅自保存带有语法错误的配置文件它会提示你出现的问题并询问该如何处理就像
```
>>> sudoers file: syntax error, line 22 <<
```
此时我们有三种选择键入“e”是重新编辑键入“x”是不保存退出键入“Q”是退出并保存。如果真选择Q那么sudo将不会再运行直到错误被纠正。
现在我们一起来看一下神秘的配置文件学一下如何编写它。让我们从一个简单的例子开始让用户Foobar可以通过sudo执行所有root可执行的命令。以root身份用visudo打开配置文件可以看到类似下面几行
```
# Runas alias specification
# User privilege specificationroot ALL=(ALL)ALL
```
我们一看就明白个差不多了root有所有权限只要仿照现有root的例子就行我们在下面加一行最好用tab作为空白
```
foobar ALL=(ALL) ALL
```
保存退出后切换到foobar用户我们用它的身份执行命令
```
[foobar@localhost ~]$ ls /root
ls: /root: 权限不够
[foobar@localhost ~]$ sudo ls /root
PassWord:
anaconda-ks.cfg Desktop install.log install.log.syslog
```
好了我们限制一下foobar的权利不让他为所欲为。比如我们只想让他像root那样使用ls和ifconfig把那一行改为
```
foobar localhost= /sbin/ifconfig, /bin/ls
```
再来执行命令:
```
[foobar@localhost ~]$ sudo head -5 /etc/shadow
Password:
Sorry, user foobar is not allowed to execute '/usr/bin/head -5 /etc/shadow' as root on localhost.localdomain.
[foobar@localhost ~]$ sudo /sbin/ifconfigeth0 Linkencap:Ethernet HWaddr 00:14:85:EC:E9:9B...
```
现在让我们来看一下那三个ALL到底是什么意思。第一个ALL是指网络中的主机我们后面把它改成了主机名它指明foobar可以在此主机上执行后面的命令。第二个括号里的ALL是指目标用户也就是以谁的身份去执行命令。最后一个ALL当然就是指命令名了。例如我们想让foobar用户在linux主机上以jimmy或rene的身份执行kill命令这样编写配置文件
```
foobar linux=(jimmy,rene) /bin/kill
```
但这还有个问题foobar到底以jimmy还是rene的身份执行这时我们应该想到了`sudo -u`了,它正是用在这种时候。 foobar可以使用`sudo -u jimmy kill PID`或者`sudo -u rene kill PID`,但这样挺麻烦,其实我们可以不必每次加`-u`把rene或jimmy设为默认的目标用户即可。再在上面加一行
```
Defaults:foobar runas_default=rene
```
Defaults后面如果有冒号是对后面用户的默认如果没有则是对所有用户的默认。就像配置文件中自带的一行
```
Defaults env_reset
```
另一个问题是很多时候我们本来就登录了每次使用sudo还要输入密码就显得烦琐了。我们可不可以不再输入密码呢当然可以我们这样修改配置文件
```
foobar localhost=NOPASSWD: /bin/cat, /bin/ls
```
再来sudo一下
```
[foobar@localhost ~]$ sudo ls /rootanaconda-ks.cfg Desktop install.log
install.log.syslog
```
当然你也可以说“某些命令用户foobar不可以运行”通过使用!操作符,但这不是一个好主意。因为,用!操作符来从ALL中“剔出”一些命令一般是没什么效果的一个用户完全可以把那个命令拷贝到别的地方换一个名字后再来运行。
**日志与安全**
sudo为安全考虑得很周到不仅可以记录日志还能在有必要时向系统管理员报告。但是sudo的日志功能不是自动的必须由管理员开启。这样来做
```
touch /var/log/sudo
vi /etc/syslog.conf
```
在syslog.conf最后面加一行必须用tab分割开并保存
```
local2.debug /var/log/sudo
```
重启日志守候进程,
```
ps aux grep syslogd
```
把得到的syslogd进程的PID输出的第二列是PID填入下面
```
kill HUP PID
```
这样sudo就可以写日志了
```
[foobar@localhost ~]$ sudo ls /rootanaconda-ks.cfg
Desktop install.log
install.log.syslog
$cat /var/log/sudoJul 28 22:52:54 localhost sudo: foobar :
TTY=pts/1 ; pwd=/home/foobar ; USER=root ; command=/bin/ls /root
```
不过有一个小小的“缺陷”sudo记录日志并不是很忠实
```
[foobar@localhost ~]$ sudo cat /etc/shadow > /dev/null
cat /var/log/sudo...Jul 28 23:10:24 localhost sudo: foobar : TTY=pts/1 ;
PWD=/home/foobar ; USER=root ; COMMAND=/bin/cat /etc/shadow
```
重定向没有被记录在案为什么因为在命令运行之前shell把重定向的工作做完了sudo根本就没看到重定向。这也有个好处下面的手段不会得逞
```
[foobar@localhost ~]$ sudo ls /root > /etc/shadowbash: /etc/shadow: 权限不够
```
sudo 有自己的方式来保护安全。以root的身份执行`sudo-V`查看一下sudo的设置。因为考虑到安全问题一部分环境变量并没有传递给sudo后面的命令或者被检查后再传递的比如PATHHOMESHELL等。当然你也可以通过sudoers来配置这些环境变量。

View File

@ -0,0 +1,168 @@
---
title: linux 常用命令-系统操作
date: 2018/02/28
categories:
- linux
tags:
- linux
- command
---
<!-- TOC -->
- [linux 常用命令-系统操作](#linux-%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4-%E7%B3%BB%E7%BB%9F%E6%93%8D%E4%BD%9C)
- [reboot](#reboot)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [exit](#exit)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [shutdown](#shutdown)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
<!-- /TOC -->
# linux 常用命令-系统操作
## reboot
重新启动正在运行的Linux操作系统
### 补充说明
**reboot命令** 用来重新启动正在运行的Linux操作系统。
### 语法
```
reboot(选项)
```
### 选项
```
-d重新开机时不把数据写入记录文件/var/tmp/wtmp。本参数具有“-n”参数效果
-f强制重新开机不调用shutdown指令的功能
-i在重开机之前先关闭所有网络界面
-n重开机之前不检查是否有未结束的程序
-w仅做测试并不真正将系统重新开机只会把重开机的数据写入/var/log目录下的wtmp记录文件。
```
### 实例
```
reboot //重开机。
reboot -w //做个重开机的模拟(只有纪录并不会真的重开机)。
```
## exit
退出当前的shell
### 补充说明
**exit命令** 同于退出shell并返回给定值。在shell脚本中可以终止当前脚本执行。执行exit可使shell以指定的状态值退出。若不设置状态值参数则shell以预设值退出。状态值0代表执行成功其他值代表执行失败。
### 语法
```
exit(参数)
```
### 参数
返回值指定shell返回值。
### 实例
退出当前shell
```
[root@localhost ~]# exit
logout
```
在脚本中,进入脚本所在目录,否则退出:
```
cd $(dirname $0) || exit 1
```
在脚本中,判断参数数量,不匹配就打印使用方式,退出:
```
if [ "$#" -ne "2" ]; then
echo "usage: $0 <area> <hours>"
exit 2
fi
```
在脚本中,退出时删除临时文件:
```
trap "rm -f tmpfile; echo Bye." EXIT
```
检查上一命令的退出码:
```
./mycommand.sh
EXCODE=$?
if [ "$EXCODE" == "0" ]; then
echo "O.K"
fi
```
## shutdown
用来执行系统关机的命令。
### 补充说明
**shutdown命令** 用来系统关机命令。shutdown指令可以关闭所有程序并依用户的需要进行重新开机或关机的动作。
### 语法
```
shutdown(选项)(参数)
```
### 选项
```
-c当执行“shutdown -h 11:50”指令时只要按+键就可以中断关机的指令;
-f重新启动时不执行fsck
-F重新启动时执行fsck
-h将系统关机
-k只是送出信息给所有用户但不会实际关机
-n不调用init程序进行关机而由shutdown自己进行
-rshutdown之后重新启动
-t<秒数>:送出警告信息和删除信息之间要延迟多少秒。
```
### 参数
* [时间]设置多久时间后执行shutdown指令
* [警告信息]:要传送给所有登入用户的信息。
### 实例
指定现在立即关机:
```
shutdown -h now
```
指定5分钟后关机同时送出警告信息给登入用户
```
shutdown +5 "System will shutdown after 5 minutes"
```

View File

@ -0,0 +1,332 @@
---
title: linux 常用命令-系统设置
date: 2018/02/28
categories:
- linux
tags:
- linux
- command
---
<!-- TOC -->
- [linux 常用命令-系统设置](#linux-%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4-%E7%B3%BB%E7%BB%9F%E8%AE%BE%E7%BD%AE)
- [date](#date)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [日期格式字符串列表](#%E6%97%A5%E6%9C%9F%E6%A0%BC%E5%BC%8F%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%88%97%E8%A1%A8)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [mount](#mount)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [umount](#umount)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
<!-- /TOC -->
# linux 常用命令-系统设置
## date
显示或设置系统时间与日期
### 补充说明
**date命令** 是显示或设置系统时间与日期。
很多shell脚本里面需要打印不同格式的时间或日期以及要根据时间和日期执行操作。延时通常用于脚本执行过程中提供一段等待的时间。日期可以以多种格式去打印也可以使用命令设置固定的格式。在类UNIX系统中日期被存储为一个整数其大小为自世界标准时间UTC1970年1月1日0时0分0秒起流逝的秒数。
### 语法
```
date(选项)(参数)
```
### 选项
```
-d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;
-s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号;
-u显示GMT
--help在线帮助
--version显示版本信息。
```
### 参数
<+时间日期格式>:指定显示时使用的日期时间格式。
### 日期格式字符串列表
```
%H 小时24小时制00~23
%I 小时12小时制01~12
%k 小时24小时制0~23
%l 小时12小时制1~12
%M 分0059
%p 显示出上午或下午
%r 时间12小时制
%s 从1970年1月1日0点到目前经历的秒数
%S 秒0059
%T 时间24小时制hh:mm:ss
%X 显示时间的格式H时M分S秒
%Z 按字母表排序的时区缩写
%a 星期名缩写
%A 星期名全称
%b 月名缩写
%B 月名全称
%c 日期和时间
%d 按月计的日期0131
%D 日期mm/dd/yy
%h 和%b选项相同
%j 一年的第几天001~366
%m 月份0112
%w 一个星期的第几天0代表星期天
%W 一年的第几个星期0053星期一为第一天
%x 显示日期的格式mm/dd/yy
%y 年份的最后两个数字1999则是99
%Y 年份比如1970、1996等
%C 世纪,通常为省略当前年份的后两位数字
%U 一年中的第几周,以周日为每星期第一天
%e 按月计的日期,添加空格,等于%_d
```
### 实例
格式化输出:
```
date +"%Y-%m-%d"
2009-12-07
```
输出昨天日期:
```
date -d "1 day ago" +"%Y-%m-%d"
2012-11-19
```
2秒后输出
```
date -d "2 second" +"%Y-%m-%d %H:%M.%S"
2012-11-20 14:21.31
```
传说中的 1234567890 秒:
```
date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%m:%S"
2009-02-13 23:02:30
```
普通转格式:
```
date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S"
2009/12/12 00:00.00
```
apache格式转换
```
date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M.%S"
2009-12-05 00:00.37
```
格式转换后时间游走:
```
date -d "Dec 5, 2009 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M.%S"
2007-12-05 00:00.37
```
加减操作:
```
date +%Y%m%d //显示前天年月日
date -d "+1 day" +%Y%m%d //显示前一天的日期
date -d "-1 day" +%Y%m%d //显示后一天的日期
date -d "-1 month" +%Y%m%d //显示上一月的日期
date -d "+1 month" +%Y%m%d //显示下一月的日期
date -d "-1 year" +%Y%m%d //显示前一年的日期
date -d "+1 year" +%Y%m%d //显示下一年的日期
```
设定时间:
```
date -s //设置当前时间只有root权限才能设置其他只能查看
date -s 20120523 //设置成20120523这样会把具体时间设置成空00:00:00
date -s 01:01:01 //设置具体时间,不会对日期做更改
date -s "01:01:01 2012-05-23" //这样可以设置全部时间
date -s "01:01:01 20120523" //这样可以设置全部时间
date -s "2012-05-23 01:01:01" //这样可以设置全部时间
date -s "20120523 01:01:01" //这样可以设置全部时间
```
有时需要检查一组命令花费的时间,举例:
```
#!/bin/bash
start=$(date +%s)
nmap man.linuxde.net &> /dev/null
end=$(date +%s)
difference=$(( end - start ))
echo $difference seconds.
```
## mount
用于挂载Linux系统外的文件。
### 补充说明
**mount命令** Linux mount命令是经常会使用到的命令它用于挂载Linux系统外的文件。
### 语法
```
mount [-hV]
mount -a [-fFnrsvw] [-t vfstype]
mount [-fnrsvw] [-o options [,...]] device | dir
mount [-fnrsvw] [-t vfstype] [-o options] device dir
```
### 选项
```
-V显示程序版本
-h显示辅助讯息
-v显示较讯息通常和 -f 用来除错。
-a将 /etc/fstab 中定义的所有档案系统挂上。
-F这个命令通常和 -a 一起使用,它会为每一个 mount 的动作产生一个行程负责执行。在系统需要挂上大量 NFS 档案系统时可以加快挂上的动作。
-f通常用在除错的用途。它会使 mount 并不执行实际挂上的动作,而是模拟整个挂上的过程。通常会和 -v 一起使用。
-n一般而言mount 在挂上后会在 /etc/mtab 中写入一笔资料。但在系统中没有可写入档案系统存在的情况下可以用这个选项取消这个动作。
-s-r等于 -o ro
-w等于 -o rw
-L将含有特定标签的硬盘分割挂上。
-U将档案分割序号为 的档案系统挂下。-L 和 -U 必须在/proc/partition 这种档案存在时才有意义。
-t指定档案系统的型态通常不必指定。mount 会自动选择正确的型态。
-o async打开非同步模式所有的档案读写动作都会用非同步模式执行。
-o sync在同步模式下执行。
-o atime、-o noatime当 atime 打开时,系统会在每次读取档案时更新档案的『上一次调用时间』。当我们使用 flash 档案系统时可能会选项把这个选项关闭以减少写入的次数。
-o auto、-o noauto打开/关闭自动挂上模式。
-o defaults:使用预设的选项 rw, suid, dev, exec, auto, nouser, and async.
-o dev、-o nodev-o exec、-o noexec允许执行档被执行。
-o suid、-o nosuid
允许执行档在 root 权限下执行。
-o user、-o nouser使用者可以执行 mount/umount 的动作。
-o remount将一个已经挂下的档案系统重新用不同的方式挂上。例如原先是唯读的系统现在用可读写的模式重新挂上。
-o ro用唯读模式挂上。
-o rw用可读写模式挂上。
-o loop=:使用 loop 模式用来将一个档案当成硬盘分割挂上系统。
```
### 实例
`/dev/hda1` 挂在 `/mnt` 之下。
```
#mount /dev/hda1 /mnt
```
`/dev/hda1` 用唯读模式挂在 `/mnt` 之下。
```
#mount -o ro /dev/hda1 /mnt
```
`/tmp/image.iso` 这个光碟的 `image` 档使用 `loop` 模式挂在 `/mnt/cdrom` 之下。用这种方法可以将一般网络上可以找到的 `Linux` 光 碟 ISO 档在不烧录成光碟的情况下检视其内容。
```
#mount -o loop /tmp/image.iso /mnt/cdrom
```
## umount
用于卸载已经加载的文件系统
### 补充说明
**umount命令** 用于卸载已经加载的文件系统。利用设备名或挂载点都能umount文件系统不过最好还是通过挂载点卸载以免使用绑定挂载一个设备多个挂载点时产生混乱。
### 语法
```
umount(选项)(参数)
```
### 选项
```
-a卸除/etc/mtab中记录的所有文件系统
-h显示帮助
-n卸除时不要将信息存入/etc/mtab文件中
-r若无法成功卸除则尝试以只读的方式重新挂入文件系统
-t<文件系统类型>:仅卸除选项中所指定的文件系统;
-v执行时显示详细的信息
-V显示版本信息。
```
### 参数
文件系统:指定要卸载的文件系统或者其对应的设备文件名。
### 实例
下面两条命令分别通过设备名和挂载点卸载文件系统,同时输出详细信息:
通过设备名卸载
```
umount -v /dev/sda1
/dev/sda1 umounted
```
通过挂载点卸载
```
umount -v /mnt/mymount/
/tmp/diskboot.img umounted
```
如果设备正忙卸载即告失败。卸载失败的常见原因是某个打开的shell当前目录为挂载点里的某个目录
```
umount -v /mnt/mymount/
umount: /mnt/mymount: device is busy
umount: /mnt/mymount: device is busy
```
有时导致设备忙的原因并不好找。碰到这种情况时可以用lsof列出已打开文件然后搜索列表查找待卸载的挂载点
```
lsof | grep mymount 查找mymount分区里打开的文件
bash 9341 francois cwd DIR 8,1 1024 2 /mnt/mymount
```
从上面的输出可知mymount分区无法卸载的原因在于francois运行的PID为9341的bash进程。
对付系统文件正忙的另一种方法是执行延迟卸载:
```
umount -vl /mnt/mymount/ 执行延迟卸载
```
延迟卸载lazy unmount会立即卸载目录树里的文件系统等到设备不再繁忙时才清理所有相关资源。卸载可移动存储介质还可以用eject命令。下面这条命令会卸载cd并弹出CD
```
eject /dev/cdrom 卸载并弹出CD
```

View File

@ -0,0 +1,631 @@
---
title: linux 常用命令-进程和作业管理
date: 2018/02/28
categories:
- linux
tags:
- linux
- command
---
<!-- TOC -->
- [linux 常用命令-进程和作业管理](#linux-%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4-%E8%BF%9B%E7%A8%8B%E5%92%8C%E4%BD%9C%E4%B8%9A%E7%AE%A1%E7%90%86)
- [ps](#ps)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [kill](#kill)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [systemctl](#systemctl)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [service](#service)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [crontab](#crontab)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [知识扩展](#%E7%9F%A5%E8%AF%86%E6%89%A9%E5%B1%95)
- [实例](#%E5%AE%9E%E4%BE%8B)
<!-- /TOC -->
# linux 常用命令-进程和作业管理
## ps
报告当前系统的进程状态
### 补充说明
**ps命令** 用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等总之大部分信息都是可以通过执行该命令得到的。
### 语法
```
ps(选项)
```
### 选项
```
-a显示所有终端机下执行的程序除了阶段作业领导者之外。
a显示现行终端机下的所有程序包括其他用户的程序。
-A显示所有程序。
-c显示CLS和PRI栏位。
c列出程序时显示每个程序真正的指令名称而不包含路径选项或常驻服务的标示。
-C<指令名称>:指定执行指令的名称,并列出该指令的程序的状况。
-d显示所有程序但不包括阶段作业领导者的程序。
-e此选项的效果和指定"A"选项相同。
e列出程序时显示每个程序所使用的环境变量。
-f显示UID,PPIP,C与STIME栏位。
f用ASCII字符显示树状结构表达程序间的相互关系。
-g<群组名称>:此选项的效果和指定"-G"选项相同,当亦能使用阶段作业领导者的名称来指定。
g显示现行终端机下的所有程序包括群组领导者的程序。
-G<群组识别码>:列出属于该群组的程序的状况,也可使用群组名称来指定。
h不显示标题列。
-H显示树状结构表示程序间的相互关系。
-j或j采用工作控制的格式显示程序状况。
-l或l采用详细的格式来显示程序状况。
L列出栏位的相关信息。
-m或m显示所有的执行绪。
n以数字来表示USER和WCHAN栏位。
-N显示所有的程序除了执行ps指令终端机下的程序之外。
-p<程序识别码>:指定程序识别码,并列出该程序的状况。
p<程序识别码>:此选项的效果和指定"-p"选项相同,只在列表格式方面稍有差异。
r只列出现行终端机正在执行中的程序。
-s<阶段作业>:指定阶段作业的程序识别码,并列出隶属该阶段作业的程序的状况。
s采用程序信号的格式显示程序状况。
S列出程序时包括已中断的子程序资料。
-t<终端机编号>:指定终端机编号,并列出属于该终端机的程序的状况。
t<终端机编号>:此选项的效果和指定"-t"选项相同,只在列表格式方面稍有差异。
-T显示现行终端机下的所有程序。
-u<用户识别码>:此选项的效果和指定"-U"选项相同。
u以用户为主的格式来显示程序状况。
-U<用户识别码>:列出属于该用户的程序的状况,也可使用用户名称来指定。
U<用户名称>:列出属于该用户的程序的状况。
v采用虚拟内存的格式显示程序状况。
-V或V显示版本信息。
-w或w采用宽阔的格式来显示程序状况。 
x显示所有程序不以终端机来区分。
X采用旧式的Linux i386登陆格式显示程序状况。
-y配合选项"-l"使用时不显示F(flag)栏位并以RSS栏位取代ADDR栏位 
-<程序识别码>:此选项的效果和指定"p"选项相同。
--cols<每列字符数>:设置每列的最大字符数。
--columns<每列字符数>:此选项的效果和指定"--cols"选项相同。
--cumulative此选项的效果和指定"S"选项相同。
--deselect此选项的效果和指定"-N"选项相同。
--forest此选项的效果和指定"f"选项相同。
--headers重复显示标题列。
--help在线帮助。
--info显示排错信息。
--lines<显示列数>:设置显示画面的列数。
--no-headers此选项的效果和指定"h"选项相同,只在列表格式方面稍有差异。
--group<群组名称>:此选项的效果和指定"-G"选项相同。
--Group<群组识别码>:此选项的效果和指定"-G"选项相同。
--pid<程序识别码>:此选项的效果和指定"-p"选项相同。
--rows<显示列数>:此选项的效果和指定"--lines"选项相同。
--sid<阶段作业>:此选项的效果和指定"-s"选项相同。
--tty<终端机编号>:此选项的效果和指定"-t"选项相同。
--user<用户名称>:此选项的效果和指定"-U"选项相同。
--User<用户识别码>:此选项的效果和指定"-U"选项相同。
--version此选项的效果和指定"-V"选项相同。
--widty<每列字符数>:此选项的效果和指定"-cols"选项相同。
```
由于ps命令能够支持的系统类型相当的多所以选项多的离谱
### 实例
按内存资源的使用量对进程进行排序
```
ps aux | sort -rnk 4
```
按 CPU 资源的使用量对进程进行排序
```
ps aux | sort -nk 3
```
## kill
删除执行中的程序或工作
### 补充说明
**kill命令** 用来删除执行中的程序或工作。kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或job指令查看。
### 语法
```
kill(选项)(参数)
```
### 选项
```
-a当处理当前进程时不限制命令名和进程号的对应关系
-l <信息编号>:若不加<信息编号>选项,则-l参数会列出全部的信息名称
-p指定kill 命令只打印相关进程的进程号,而不发送任何信号;
-s <信息名称或编号>:指定要送出的信息;
-u指定用户。
```
### 参数
进程或作业识别号:指定要删除的进程或作业。
### 实例
列出所有信号名称:
```
kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
```
只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略, **下面是常用的信号:**
```
HUP 1 终端断线
INT 2 中断(同 Ctrl + C
QUIT 3 退出(同 Ctrl + \
TERM 15 终止
KILL 9 强制终止
CONT 18 继续与STOP相反 fg/bg命令
STOP 19 暂停(同 Ctrl + Z
```
先用ps查找进程然后用kill杀掉
```
ps -ef | grep vim
root 3268 2884 0 16:21 pts/1 00:00:00 vim install.log
root 3370 2822 0 16:21 pts/0 00:00:00 grep vim
kill 3268
kill 3268
-bash: kill: (3268) - 没有那个进程
```
## systemctl
系统服务管理器指令
### 补充说明
**systemctl命令** 是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。
<table>
<tbody>
<tr>
<td>任务</td>
<td>旧指令</td>
<td>新指令</td>
</tr>
<tr>
<td>使某服务自动启动</td>
<td>chkconfig --level 3 httpd on</td>
<td>systemctl enable httpd.service</td>
</tr>
<tr>
<td>使某服务不自动启动</td>
<td>chkconfig --level 3 httpd off</td>
<td>systemctl disable httpd.service</td>
</tr>
<tr>
<td>检查服务状态</td>
<td>service httpd status</td>
<td>systemctl status httpd.service (服务详细信息) systemctl is-active httpd.service (仅显示是否 Active)</td>
</tr>
<tr>
<td>显示所有已启动的服务</td>
<td>chkconfig --list</td>
<td>systemctl list-units --type=service</td>
</tr>
<tr>
<td>启动某服务</td>
<td>service httpd start</td>
<td>systemctl start httpd.service</td>
</tr>
<tr>
<td>停止某服务</td>
<td>service httpd stop</td>
<td>systemctl stop httpd.service</td>
</tr>
<tr>
<td>重启某服务</td>
<td>service httpd restart</td>
<td>systemctl restart httpd.service</td>
</tr>
</tbody>
</table>
### 实例
1.启动nfs服务
```
systemctl start nfs-server.service
```
2.设置开机自启动
```
systemctl enable nfs-server.service
```
3.停止开机自启动
```
systemctl disable nfs-server.service
```
4.查看服务当前状态
```
systemctl status nfs-server.service
```
5.重新启动某服务
```
systemctl restart nfs-server.service
```
6.查看所有已启动的服务
```
systemctl list -units --type=service
```
开启防火墙22端口
```
iptables -I INPUT -p tcp --dport 22 -j accept
```
如果仍然有问题就可能是SELinux导致的
关闭SElinux
修改`/etc/selinux/config`文件中的`SELINUX=””`为disabled然后重启。
彻底关闭防火墙:
```
sudo systemctl status firewalld.service
sudo systemctl stop firewalld.service          
sudo systemctl disable firewalld.service
```
## service
控制系统服务的实用工具
### 补充说明
**service命令** 是Redhat Linux兼容的发行版中用来控制系统服务的实用工具它以启动、停止、重新启动和关闭系统服务还可以显示所有系统服务的当前状态。
### 语法
```
service(选项)(参数)
```
### 选项
```
-h显示帮助信息
--status-all显示所服务的状态。
```
### 参数
* 服务名:自动要控制的服务名,即`/etc/init.d`目录下的脚本文件名;
* 控制命令:系统服务脚本支持的控制命令。
### 实例
当修改了主机名、ip地址等信息时经常需要把网络重启使之生效。
```
service network status
配置设备:
lo eth0
当前的活跃设备:
lo eth0
service network restart
正在关闭接口 eth0 [ 确定 ]
关闭环回接口: [ 确定 ]
设置网络参数: [ 确定 ]
弹出环回接口: [ 确定 ]
弹出界面 eth0 [ 确定 ]
```
重启mysql
```
service mysqld status
mysqld (pid 1638) 正在运行...
service mysqld restart
停止 MySQL [ 确定 ]
启动 MySQL [ 确定 ]
```
## crontab
提交和管理用户的需要周期性执行的任务
### 补充说明
**crontab命令** 被用来提交和管理用户的需要周期性执行的任务与windows下的计划任务类似当安装完成操作系统后默认会安装此服务工具并且会自动启动crond进程crond进程每分钟会定期检查是否有要执行的任务如果有要执行的任务则自动执行该任务。
### 语法
```
crontab(选项)(参数)
```
### 选项
```
-e编辑该用户的计时器设置
-l列出该用户的计时器设置
-r删除该用户的计时器设置
-u<用户名称>:指定要设定计时器的用户名称。
```
### 参数
crontab文件指定包含待执行任务的crontab文件。
### 知识扩展
Linux下的任务调度分为两类 **系统任务调度****用户任务调度**
**系统任务调度:** 系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在`/etc`目录下有一个crontab文件这个就是系统任务调度的配置文件。
`/etc/crontab`文件包括下面几行:
```
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""HOME=/
# run-parts
51 * * * * root run-parts /etc/cron.hourly
24 7 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
```
前四行是用来配置crond任务运行的环境变量第一行SHELL变量指定了系统要使用哪个shell这里是bash第二行PATH变量指定了系统执行命令的路径第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户如果MAILTO变量的值为空则表示不发送任务执行信息给用户第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。
**用户任务调度:** 用户定期要执行的工作比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在`/var/spool/cron`目录中。其文件名与用户名一致,使用者权限文件如下:
```
/etc/cron.deny 该文件中所列用户不允许使用crontab命令
/etc/cron.allow 该文件中所列用户允许使用crontab命令
/var/spool/cron/ 所有用户crontab文件存放的目录,以用户名命名
```
crontab文件的含义用户所建立的crontab文件中每一行都代表一项任务每行的每个字段代表一项设置它的格式共分为六个字段前五段是时间设定段第六段是要执行的命令段格式如下
```
minute hour day month week command 顺序:分 时 日 月 周
```
其中:
* minute 表示分钟可以是从0到59之间的任何整数。
* hour表示小时可以是从0到23之间的任何整数。
* day表示日期可以是从1到31之间的任何整数。
* month表示月份可以是从1到12之间的任何整数。
* week表示星期几可以是从0到7之间的任何整数这里的0或7代表星期日。
* command要执行的命令可以是系统命令也可以是自己编写的脚本文件。
在以上各个字段中,还可以使用以下特殊字符:
* 星号(*代表所有可能的值例如month字段如果是星号则表示在满足其它字段的制约条件后每月都执行该命令操作。
* 逗号(,可以用逗号隔开的值指定一个列表范围例如“1,2,5,7,8,9”
* 中杠(-可以用整数之间的中杠表示一个整数范围例如“2-6”表示“2,3,4,5,6”
* 正斜线(/可以用正斜线指定时间的间隔频率例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用例如*/10如果用在minute字段表示每十分钟执行一次。
**crond服务**
```
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
```
查看crontab服务状态
```
service crond status
```
手动启动crontab服务
```
service crond start
```
查看crontab服务是否已设置为开机启动执行命令
```
ntsysv
```
加入开机自动启动:
```
chkconfig level 35 crond on
```
### 实例
每1分钟执行一次command
```
* * * * * command
```
每小时的第3和第15分钟执行
```
3,15 * * * * command
```
在上午8点到11点的第3和第15分钟执行
```
3,15 8-11 * * * command
```
每隔两天的上午8点到11点的第3和第15分钟执行
```
3,15 8-11 */2 * * command
```
每个星期一的上午8点到11点的第3和第15分钟执行
```
3,15 8-11 * * 1 command
```
每晚的21:30重启smb 
```
30 21 * * * /etc/init.d/smb restart
```
每月1、10、22日的4 : 45重启smb 
```
45 4 1,10,22 * * /etc/init.d/smb restart
```
每周六、周日的1:10重启smb
```
10 1 * * 6,0 /etc/init.d/smb restart
```
每天18 : 00至23 : 00之间每隔30分钟重启smb 
```
0,30 18-23 * * * /etc/init.d/smb restart
```
每星期六的晚上11:00 pm重启smb 
```
0 23 * * 6 /etc/init.d/smb restart
```
每一小时重启smb 
```
* */1 * * * /etc/init.d/smb restart
```
晚上11点到早上7点之间每隔一小时重启smb
```
* 23-7/1 * * * /etc/init.d/smb restart
```
每月的4号与每周一到周三的11点重启smb 
```
0 11 4 * mon-wed /etc/init.d/smb restart
```
一月一号的4点重启smb
```
0 4 1 jan * /etc/init.d/smb restart
```
每小时执行`/etc/cron.hourly`目录内的脚本
```
01 * * * * root run-parts /etc/cron.hourly
```