From 4d91940625ab4817964ad7800c94c6d8e06284d8 Mon Sep 17 00:00:00 2001 From: Zhang Peng Date: Wed, 28 Feb 2018 09:43:42 +0800 Subject: [PATCH] =?UTF-8?q?:memo:=20linux=20=E7=B3=BB=E7=BB=9F=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=91=BD=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/SUMMARY.md | 7 +- docs/linux/commands/linux-cmd-system.md | 638 ------------------ docs/linux/commands/系统管理/README.md | 4 + .../系统管理/用户和工作组管理.md | 253 ++++++- .../commands/系统管理/系统操作.md | 168 +++++ .../commands/系统管理/系统设置.md | 332 +++++++++ .../系统管理/进程和作业管理.md | 631 +++++++++++++++++ 7 files changed, 1393 insertions(+), 640 deletions(-) delete mode 100644 docs/linux/commands/linux-cmd-system.md create mode 100644 docs/linux/commands/系统管理/系统操作.md create mode 100644 docs/linux/commands/系统管理/系统设置.md create mode 100644 docs/linux/commands/系统管理/进程和作业管理.md diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index 329d364..73ad29b 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -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) diff --git a/docs/linux/commands/linux-cmd-system.md b/docs/linux/commands/linux-cmd-system.md deleted file mode 100644 index 6b12cf6..0000000 --- a/docs/linux/commands/linux-cmd-system.md +++ /dev/null @@ -1,638 +0,0 @@ -# Linux 常用命令-系统设置 - -## useradd 命令 - -> useradd 命令用于建立用户帐号。 -> -> useradd 可用来建立用户帐号。帐号建好之后,再用 passwd 设定帐号的密码。使用 useradd 指令所建立的帐号,实际上是保存在 `/etc/passwd` 文本文件中。 -> -> userdel 可用来删除帐号。 - -### 语法 - -``` -useradd [-mMnr][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s ][-u ][用户帐号] -``` - -或 - -``` -useradd -D [-b][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s ] -``` - -**参数说明**: - -- -c<备注>  加上备注文字。备注文字会保存在passwd的备注栏位中。 -- -d<登入目录>  指定用户登入时的启始目录。 -- -D  变更预设值. -- -e<有效期限>  指定帐号的有效期限。 -- -f<缓冲天数>  指定在密码过期后多少天即关闭该帐号。 -- -g<群组>  指定用户所属的群组。 -- -G<群组>  指定用户所属的附加群组。 -- -m  自动建立用户的登入目录。 -- -M  不要自动建立用户的登入目录。 -- -n  取消建立以用户名称为名的群组. -- -r  建立系统帐号。 -- -s   指定用户登入后所使用的shell。 -- -u  指定用户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 ][-u ][用户帐号] -``` - -**参数说明**: - -- -c<备注>  修改用户帐号的备注文字。 -- -d登入目录>  修改用户登入时的目录。 -- -e<有效期限>  修改帐号的有效期限。 -- -f<缓冲天数>  修改在密码过期后多少天即关闭该帐号。 -- -g<群组>  修改用户所属的群组。 -- -G<群组>  修改用户所属的附加群组。 -- -l<帐号名称>  修改用户帐号名称。 -- -L  锁定用户密码,使密码无效。 -- -s  修改用户登入后所使用的shell。 -- -u  修改用户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] [] -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 -``` \ No newline at end of file diff --git a/docs/linux/commands/系统管理/README.md b/docs/linux/commands/系统管理/README.md index c2244ba..c9a6d6e 100644 --- a/docs/linux/commands/系统管理/README.md +++ b/docs/linux/commands/系统管理/README.md @@ -1,2 +1,6 @@ # linux 常用命令-系统管理 +* [linux 常用命令-系统操作](系统操作.md) +* [linux 常用命令-系统设置](系统设置.md) +* [linux 常用命令-用户和工作组管理](用户和工作组管理.md) +* [linux 常用命令-进程和作业管理](进程和作业管理.md) diff --git a/docs/linux/commands/系统管理/用户和工作组管理.md b/docs/linux/commands/系统管理/用户和工作组管理.md index a97c220..3200ded 100644 --- a/docs/linux/commands/系统管理/用户和工作组管理.md +++ b/docs/linux/commands/系统管理/用户和工作组管理.md @@ -8,6 +8,65 @@ tags: - command --- + + +- [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) + + + # linux 常用命令-用户和工作组管理 ## groupadd @@ -423,4 +482,196 @@ su root -f ``` su -test -``` \ No newline at end of file +``` + +## sudo + +以其他身份来执行命令 + +### 补充说明 + +**sudo命令** 用来以其他身份来执行命令,预设的身份为root。在`/etc/sudoers`中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。 + +### 语法 + +``` +sudo(选项)(参数) +``` + +### 选项 + +``` +-b:在后台执行指令; +-h:显示帮助; +-H:将HOME环境变量设为新身份的HOME环境变量; +-k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;。 +-l:列出目前用户可执行与无法执行的指令; +-p:改变询问密码的提示符号; +-s:执行指定的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后面的命令,或者被检查后再传递的,比如:PATH,HOME,SHELL等。当然,你也可以通过sudoers来配置这些环境变量。 diff --git a/docs/linux/commands/系统管理/系统操作.md b/docs/linux/commands/系统管理/系统操作.md new file mode 100644 index 0000000..c6124e6 --- /dev/null +++ b/docs/linux/commands/系统管理/系统操作.md @@ -0,0 +1,168 @@ +--- +title: linux 常用命令-系统操作 +date: 2018/02/28 +categories: +- linux +tags: +- linux +- command +--- + + + +- [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) + + + +# 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 " + 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自己进行; +-r:shutdown之后重新启动; +-t<秒数>:送出警告信息和删除信息之间要延迟多少秒。 +``` + +### 参数 + +* [时间]:设置多久时间后执行shutdown指令; +* [警告信息]:要传送给所有登入用户的信息。 + +### 实例 + +指定现在立即关机: + +``` +shutdown -h now +``` + +指定5分钟后关机,同时送出警告信息给登入用户: + +``` +shutdown +5 "System will shutdown after 5 minutes" +``` \ No newline at end of file diff --git a/docs/linux/commands/系统管理/系统设置.md b/docs/linux/commands/系统管理/系统设置.md new file mode 100644 index 0000000..164faea --- /dev/null +++ b/docs/linux/commands/系统管理/系统设置.md @@ -0,0 +1,332 @@ +--- +title: linux 常用命令-系统设置 +date: 2018/02/28 +categories: +- linux +tags: +- linux +- command +--- + + + +- [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) + + + +# linux 常用命令-系统设置 + +## date + +显示或设置系统时间与日期 + +### 补充说明 + +**date命令** 是显示或设置系统时间与日期。 + +很多shell脚本里面需要打印不同格式的时间或日期,以及要根据时间和日期执行操作。延时通常用于脚本执行过程中提供一段等待的时间。日期可以以多种格式去打印,也可以使用命令设置固定的格式。在类UNIX系统中,日期被存储为一个整数,其大小为自世界标准时间(UTC)1970年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 分(00~59) +%p 显示出上午或下午 +%r 时间,12小时制 +%s 从1970年1月1日0点到目前经历的秒数 +%S 秒(00~59) +%T 时间(24小时制)(hh:mm:ss) +%X 显示时间的格式(%H时%M分%S秒) +%Z 按字母表排序的时区缩写 +%a 星期名缩写 +%A 星期名全称 +%b 月名缩写 +%B 月名全称 +%c 日期和时间 +%d 按月计的日期(01~31) +%D 日期(mm/dd/yy) +%h 和%b选项相同 +%j 一年的第几天(001~366) +%m 月份(01~12) +%w 一个星期的第几天(0代表星期天) +%W 一年的第几个星期(00~53,星期一为第一天) +%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 +``` diff --git a/docs/linux/commands/系统管理/进程和作业管理.md b/docs/linux/commands/系统管理/进程和作业管理.md new file mode 100644 index 0000000..1be9534 --- /dev/null +++ b/docs/linux/commands/系统管理/进程和作业管理.md @@ -0,0 +1,631 @@ +--- +title: linux 常用命令-进程和作业管理 +date: 2018/02/28 +categories: +- linux +tags: +- linux +- command +--- + + + +- [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) + + + +# 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 这两个命令组合到一起。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
任务旧指令新指令
使某服务自动启动chkconfig --level 3 httpd onsystemctl enable httpd.service
使某服务不自动启动chkconfig --level 3 httpd offsystemctl disable httpd.service
检查服务状态service httpd statussystemctl status httpd.service (服务详细信息) systemctl is-active httpd.service (仅显示是否 Active)
显示所有已启动的服务chkconfig --listsystemctl list-units --type=service
启动某服务service httpd startsystemctl start httpd.service
停止某服务service httpd stopsystemctl stop httpd.service
重启某服务service httpd restartsystemctl restart httpd.service
+ +### 实例 + +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 +``` \ No newline at end of file