第二天
root 553214
wang 123456
rocky/centos
root可以直接登录
普通用户与管理员的区别:
普通用户 --$
root用户--#
Ubuntu
不可以直接登录,只能用命令切换root账户,但一般也不建议直接利用root登录,生产环境还是有比较大的风险的。
切换root:
sudo -i
命令:
ip a
hostname -I #显示的就是你自己本机的ip地址,可以用xshell链接了
查看当前的终端设备
tty
who
显示当前所有登陆用户的信息
whoami
打印当前有效的用户ID对应的名称
date
查看时间
Ubuntu的默认时间是UTC,如果要修改:
timedatectl set-timezone Asia/Shanghai
date
查看内存空间
free -h
init切换运行级别
init 3
扩展
#0 停机(千万不能把initdefault 设置为0)
#1 单用户模式
#2 多用户,没有 NFS(和级别3相似,会停止部分服务)
#3 完全多用户模式
#4 没有用到
#5 x11(Xwindow)
#6 重新启动(千万不要把initdefault 设置为6)
各种shell
sh:Steve Bourne
bash:Bourne-Again Shell,GPL,CentOS 和 Ubuntu 默认使用
csh:c shell , C 语言风格
tcsh
ksh :Korn Shell, AIX 默认 shell
zsh: MacOS默认shell
总结:就是把你的命令解释给计算机然后完成指令
显示当前系统所有的shell
echo ${SHELL}
cat etc/shells
查看主机名字
hostname
注意:主机名不支持下划线,支持横线
修改主机名
hostnamectl
查询或更改系统主机名
补充说明
hostnamectl可用于查询和更改系统主机名和相关设置。
语法
hostnamectl [选项...] 指令 ...
指令
status 显示当前主机名设置
set-hostname NAME 设置系统主机名
set-icon-name NAME 设置主机的图标名称
set-chassis NAME 设置主机的机箱类型
set-deployment NAME 设置主机的部署环境
set-location NAME 设置主机位置
选项
-h --help 显示此帮助
--version 显示包的版本
--no-ask-password 不提示输入密码
-H --host=[USER@]HOST 在远程主机上操作
-M --machine=CONTAINER 在本地容器上执行操作。指定要连接到的容器名称。
--transient, --static, --pretty
如果调用了status(或者没有给出显式命令)并且指定了其中一个开关,hostnamectl将只打印出这个选定的主机名。
实例
显示主机名设置
$ hostnamectl status
改变主机名(永久修改,不用重启哦~)
$ sudo hostnamectl set-hostname newname
在rocky系统上安装邮件服务
yum -y install postfix
安装完完成之后启用他
systemctl restart postfix
查看状态
systemctl status postfix
这里可以看到,他已经启动了,在运行了
提示符
Prompt
#CentOS默认提示符
[root@localhost ~]#
#Ubuntu默认提示符
root@ubuntu1804:~#
# 管理员
$ 普通用户
格式
[root@localhost ~]# echo $PS1
[\u@\h \W]\$
root@ubuntu2204:~# echo j$PS1
j\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$
修改提示符颜色
PS1="\[\e[1;5;41;30m\][\u@\h \W]\\$\[\e[0m\]"
PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\
[\e[0m\]\\$"
想要文件生效,就必须写到文件里
centos/rocky
nano /etc/profile 或者nano etc/bashrc
ubuntu
nano .bashrc
贴到最后一行---ctrl+x---y---enter--重启生效
执行命令的过程
内部命令--系统自带
外部命令--外部程序
如何查看内外部命令
type COMMAND
范例
[10:42:32 root@localhost ~][#type -a echo
echo is a shell builtin
echo is /usr/bin/echo
查看内部命令的全部
help
[10:42:44 root@localhost ~][#help
GNU bash, version 5.1.8(1)-release (x86_64-redhat-linux-gnu)
These shell commands are defined internally. Type `help' to see this list.
Type `help name' to find out more about the function `name'.
Use `info bash' to find out more about the shell in general.
Use `man -k' or `info' to find out more about commands not in this list.
A star (*) next to a name means that the command is disabled.
job_spec [&] history [-c] [-d offset] [n] or history -anrw [fi>
(( expression )) if COMMANDS; then COMMANDS; [ elif COMMANDS; then>
. filename [arguments] jobs [-lnprs] [jobspec ...] or jobs -x command [a>
: kill [-s sigspec | -n signum | -sigspec] pid | jo>
[ arg... ] let arg [arg ...]
[[ expression ]] local [option] name[=value] ...
alias [-p] [name[=value] ... ] logout [n]
bg [job_spec ...] mapfile [-d delim] [-n count] [-O origin] [-s cou>
bind [-lpsvPSVX] [-m keymap] [-f filename] [-q nam> popd [-n] [+N | -N]
break [n] printf [-v var] format [arguments]
builtin [shell-builtin [arg ...]] pushd [-n] [+N | -N | dir]
caller [expr] pwd [-LP]
case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]> read [-ers] [-a array] [-d delim] [-i text] [-n n>
cd [-L|[-P [-e]] [-@]] [dir] readarray [-d delim] [-n count] [-O origin] [-s c>
command [-pVv] command [arg ...] readonly [-aAf] [name[=value] ...] or readonly -p
compgen [-abcdefgjksuv] [-o option] [-A action] [-> return [n]
complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] > select NAME [in WORDS ... ;] do COMMANDS; done
compopt [-o|+o option] [-DEI] [name ...] set [-abefhkmnptuvxBCHP] [-o option-name] [--] [a>
continue [n] shift [n]
coproc [NAME] command [redirections] shopt [-pqsu] [-o] [optname ...]
declare [-aAfFgiIlnrtux] [-p] [name[=value] ...] source filename [arguments]
dirs [-clpv] [+N] [-N] suspend [-f]
disown [-h] [-ar] [jobspec ... | pid ...] test [expr]
echo [-neE] [arg ...] time [-p] pipeline
enable [-a] [-dnps] [-f filename] [name ...] times
eval [arg ...] trap [-lp] [[arg] signal_spec ...]
exec [-cl] [-a name] [command [argument ...]] [red> true
exit [n] type [-afptP] name [name ...]
export [-fn] [name[=value] ...] or export -p typeset [-aAfFgiIlnrtux] [-p] name[=value] ...
false ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]
fc [-e ename] [-lnr] [first] [last] or fc -s [pat=> umask [-p] [-S] [mode]
fg [job_spec] unalias [-a] name [name ...]
for NAME [in WORDS ... ] ; do COMMANDS; done unset [-f] [-v] [-n] [name ...]
for (( exp1; exp2; exp3 )); do COMMANDS; done until COMMANDS; do COMMANDS; done
function name { COMMANDS ; } or name () { COMMANDS> variables - Names and meanings of some shell vari>
getopts optstring name [arg ...] wait [-fn] [-p var] [id ...]
hash [-lr] [-p pathname] [-dt] [name ...] while COMMANDS; do COMMANDS; done
help [-dms] [pattern ...] { COMMANDS ; }
注意:help只能看内部命令的帮助
查看外部命令的全部-对应文件夹
[10:46:31 root@localhost ~][#echo $PATH
/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
#全都是外部命令的文件夹
如何查看外部命令的路径
语法:
which -a |--skip-alias
whereis
范例:
[10:49:48 root@localhost ~][#which hostname
/usr/bin/hostname
[10:51:55 root@localhost ~][#which install
/usr/bin/install
Hash缓存表
系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的
路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在将执行之,如果不存在,将会去PATH路径下寻找,
利用hash缓存表可大大提高命令的调用速率
hash 命令常见用法
hash 显示hash缓存
hash -l 显示hash缓存,可作为输入使用
hash -p path name 将命令全路径path起别名为name
hash -t name 打印缓存中name的路径
hash -d name 清除name缓存
hash -r 清除缓存
范例:
[10:36:43 root@ubuntu2004 ~][#hash
hits command
1 /usr/bin/mesg
1 /usr/bin/nano
[root@ubuntu2204 ~]#hash
hits command
1 /usr/bin/mesg
2 /usr/bin/nano
[10:52:06 root@localhost ~][#hash
hits command
2 /usr/bin/nano
别名
alias
别名也可以理解为小名
对于经常执行的较长的命令,可以将其定义成较短的别名,以方便执行
语法:
alias NAME='VALUE'
查看系统的别名
[10:46:51 root@localhost ~][#alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias xzegrep='xzegrep --color=auto'
alias xzfgrep='xzfgrep --color=auto'
alias xzgrep='xzgrep --color=auto'
alias zegrep='zegrep --color=auto'
alias zfgrep='zfgrep --color=auto'
alias zgrep='zgrep --color=auto'
范例:
取消别名
unalias
unalias [-a] name [name……]
unalias -a #取消所有别名
如果别名同原命令同名,如果要执行原命令,可使用
\ALIASNAME
“ALIASNAME”
‘ALIASNAME’
command ALIASNAME
/path/commmand #只适用于外部命令
范例:
[10:59:26 root@localhost ~][#ls /
afs boot etc lib media opt root sbin sys usr
bin dev home lib64 mnt proc run srv tmp var
[10:59:29 root@localhost ~][#\ls /
afs boot etc lib media opt root sbin sys usr
bin dev home lib64 mnt proc run srv tmp var
如下图
如何想让别名永久生效可以这样做
如果想永久有效,要定义在配置文件中
仅对当前用户:~/.bashrc
对所有用户有效:/etc/bashrc
编辑配置给出的新配置不会立即生效,bash进程重新读取配置文件
source /path/to/config_file
. /path/to/config_file
范例
[11:02:18 root@localhost ~][#vi .bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific environment
if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]]
then
PATH="$HOME/.local/bin:$HOME/bin:$PATH"
fi
export PATH
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# 如果你想要定义别名,直接在这后面加就可以
注意:
这个里面涉及到vi编辑器的操作
i 插入模式 # 就是你可以直接编辑了
esc 正常模式 # 就是你只能看,不能编辑
此时在这个正常模式下输入:wq # 保存并退出了
还有一个关键点 想让文件生效,要么重启或者直接让他生效
. .bashrc 或者 source .bashrc # 这一步操作就是让文件生效
ls
显示目录内容列表
选项
-C # 多列输出,纵向排序。
-F # 每个目录名加 "/" 后缀,每个 FIFO 名加 "|" 后缀, 每个可运行名加“ * ”后缀。
-R # 递归列出遇到的子目录。
-a # 列出所有文件,包括以 "." 开头的隐含文件。
-c # 使用“状态改变时间”代替“文件修改时间”为依据来排序(使用“-t”选项时)或列出(使用“-l”选项时)。
-d # 将目录名像其它文件一样列出,而不是列出它们的内容。
-i # 输出文件前先输出文件系列号(即 i 节点号: i-node number)。 -l 列出(以单列格式)文件模式
# (file mode),文件的链接数,所有者名,组名,文件大小(以字节为单位),时间信息,及文件名。
# 缺省时,时间信息显示最近修改时间;可以以选项“-c”和“-u”选择显示其它两种时间信息。对于设备文件,
# 原先显示文件大小的区域通常显示的是主要和次要的信号(majorand minor device numbers)。
-q # 将文件名中的非打印字符输出为问号。(对于到终端的输出这是缺省的。)
-r # 逆序排列。
-t # 按时间信息排序。
-u # 使用最近访问时间代替最近修改时间为依据来排序(使用“-t”选项时)或列出(使用“-l”选项时)。
-1 # 单列输出。
-1, --format=single-column # 一行输出一个文件(单列输出)。如标准输出不是到终端,此选项就是缺省选项。
-a, --all # 列出目录中所有文件,包括以“.”开头的文件。
-b, --escape # 把文件名中不可输出的字符用反斜杠加字符编号(就像在 C 语言里一样)的形式列出。
-c, --time=ctime, --time=status
# 按文件状态改变时间(i节点中的ctime)排序并输出目录内
# 容。如采用长格式输出(选项“-l”),使用文件的状态改
# 变时间取代文件修改时间。【译注:所谓文件状态改变(i节
# 点中以ctime标志),既包括文件被修改,又包括文件属性( 如所有者、组、链接数等等)的变化】
-d, --directory
# 将目录名像其它文件一样列出,而不是列出它们的内容。
-f # 不排序目录内容;按它们在磁盘上存储的顺序列出。同时启 动“ -a ”选项,如果在“ -f ”之前存在“ -l”、
# “ - -color ”或“ -s ”,则禁止它们。
-g # 忽略,为兼容UNIX用。
-i, --inode
# 在每个文件左边打印 i 节点号(也叫文件序列号和索引号: file serial number and index num‐
# ber)。i节点号在每个特定的文件系统中是唯一的。
-k, --kilobytes
# 如列出文件大小,则以千字节KB为单位。
-l, --format=long, --format=verbose
# 输出的信息从左到右依次包括文件名、文件类型、权限、硬链接数、所有者名、组名、大小(byte)
# 、及时间信息(如未指明是其它时间即指修改时间)。对于6个月以上的文件或超出未来
# 1小时的文件,时间信息中的时分将被年代取代。
# 每个目录列出前,有一行“总块数”显示目录下全部文件所占的磁盘空间。块默认是1024字节;
# 如果设置了 POSIXLY_CORRECT 的环境变量,除非用“-k”选项,则默认块大小是 512 字节。
# 每一个硬链接都计入总块数(因此可能重复计数),这无 疑是个缺点。
# 列出的权限类似于以符号表示(文件)模式的规范。但是 ls
# 在每套权限的第三个字符中结合了多位( multiple bits ) 的信息,如下: s 如果设置了 setuid
# 位或 setgid 位,而且也设置了相应的可执行位。 S 如果设置了 setuid 位或 setgid
# 位,但是没有设置相应的可执行位。 t 如果设置了 sticky 位,而且也设置了相应的可执行位。 T
# 如果设置了 sticky 位,但是没有设置相应的可执行位。 x
# 如果仅仅设置了可执行位而非以上四种情况。 - 其它情况(即可执行位未设置)。
-m, --format=commas
# 水平列出文件,每行尽可能多,相互用逗号和一个空格分隔。
-n, --numeric-uid-gid
# 列出数字化的 UID 和 GID 而不是用户名和组名。
-o # 以长格式列出目录内容,但是不显示组信息。等于使用“ --format=long --no-group
# ”选项。提供此选项是为了与其它版本的 ls 兼容。
-p # 在每个文件名后附上一个字符以说明该文件的类型。类似“ -F ”选项但是不 标示可执行文件。
-q, --hide-control-chars
# 用问号代替文件名中非打印的字符。这是缺省选项。
-r, --reverse
# 逆序排列目录内容。
-s, --size
# 在每个文件名左侧输出该文件的大小,以 1024 字节的块为单位。如果设置了 POSIXLY_CORRECT
# 的环境变量,除非用“ -k ”选项,块大小是 512 字节。
-t, --sort=time
# 按文件最近修改时间( i 节点中的 mtime )而不是按文件名字典序排序,新文件 靠前。
-u, --time=atime, --time=access, --time=use
# 类似选项“ -t ”,但是用文件最近访问时间( i 节点中的 atime )取代文件修
# 改时间。如果使用长格式列出,打印的时间是最近访问时间。
-w, --width cols
# 假定屏幕宽度是 cols ( cols 以实际数字取代)列。如未用此选项,缺省值是这
# 样获得的:如可能先尝试取自终端驱动,否则尝试取自环境变量 COLUMNS (如果设
# 置了的话),都不行则取 80 。
-x, --format=across, --format=horizontal
# 多列输出,横向排序。
-A, --almost-all
# 显示除 "." 和 ".." 外的所有文件。
-B, --ignore-backups
# 不输出以“ ~ ”结尾的备份文件,除非已经在命令行中给出。
-C, --format=vertical
# 多列输出,纵向排序。当标准输出是终端时这是缺省项。使用命令名 dir 和 d 时, 则总是缺省的。
-D, --dired
# 当采用长格式(“-l”选项)输出时,在主要输出后,额外打印一行: //DIRED// BEG1 END1 BEG2
# END2 ...
# BEGn 和 ENDn 是无符号整数,记录每个文件名的起始、结束位置在输出中的位置(
# 字节偏移量)。这使得 Emacs 易于找到文件名,即使文件名包含空格或换行等非正
# 常字符也无需特异的搜索。
#
# 如果目录是递归列出的(“ -R ”选项),每个子目录后列出类似一行:
# //SUBDIRED// BEG1 END1 ... 【译注:我测试了 TurboLinux4.0 和 RedHat6.1 ,发现它们都是在 “
# //DIRED// BEG1... ”之后列出“ //SUBDIRED// BEG1 ... ”,也即只有一个
# 而不是在每个子目录后都有。而且“ //SUBDIRED// BEG1 ... ”列出的是各个子目 录名的偏移。】
-F, --classify, --file-type
# 在每个文件名后附上一个字符以说明该文件的类型。“ * ”表示普通的可执行文件; “ / ”表示目录;“
# @ ”表示符号链接;“ | ”表示FIFOs;“ = ”表示套接字 (sockets) ;什么也没有则表示普通文件。
-G, --no-group
# 以长格式列目录时不显示组信息。
-I, --ignorepattern
# 除非在命令行中给定,不要列出匹配shell文件名匹配式(pattern ,不是指一般
# 表达式)的文件。在shell中,文件名以"."起始的不与在文件名匹配式(pattern)
# 开头的通配符匹配。
-L, --dereference
# 列出符号链接指向的文件的信息,而不是符号链接本身。
-N, --literal
# 不要用引号引起文件名。
-Q, --quote-name
# 用双引号引起文件名,非打印字符以 C 语言的方法表示。
-R, --recursive
# 递归列出全部目录的内容。
-S, --sort=size
# 按文件大小而不是字典序排序目录内容,大文件靠前。
-T, --tabsize cols
# 假定每个制表符宽度是 cols 。缺省为 8。为求效率, ls 可能在输出中使用制表符。 若 cols 为
0,则不使用制表符。
-U, --sort=none
# 不排序目录内容;按它们在磁盘上存储的顺序列出。(选项“-U”和“-f”的不
# 同是前者不启动或禁止相关的选项。)这在列很大的目录时特别有用,因为不加排序
# 能显著地加快速度。
-X, --sort=extension
# 按文件扩展名(由最后的 "." 之后的字符组成)的字典序排序。没有扩展名的先列 出。
--color[=when]
# 指定是否使用颜色区别文件类别。环境变量 LS_COLORS 指定使用的颜色。如何设置 这个变量见 dir‐
# colors(1) 。 when 可以被省略,或是以下几项之一:
none # 不使用颜色,这是缺省项。
# auto 仅当标准输出是终端时使用。 always 总是使用颜色。指定 --color 而且省略 when 时就等同于
# --color=always 。
--full-time
# 列出完整的时间,而不是使用标准的缩写。格式如同 date(1) 的缺省格式;此格式
# 是不能改变的,但是你可以用 cut(1) 取出其中的日期字串并将结果送至命令 “ date -d ”。
# 输出的时间包括秒是非常有用的。( Unix 文件系统储存文件的时间信息精确到秒,
# 因此这个选项已经给出了系统所知的全部信息。)例如,当你有一个 Makefile 文件
# 不能恰当地生成文件时,这个选项会提供帮助。
实例
$ ls # 仅列出当前目录可见文件
$ ls -l # 列出当前目录可见文件详细信息
$ ls -hl # 列出详细信息并以可读大小显示文件大小
$ ls -al # 列出所有文件(包括隐藏)的详细信息
$ ls --human-readable --size -1 -S --classify # 按文件大小排序
$ du -sh * | sort -h # 按文件大小排序(同上)
范例:
ls -l
root@ubuntu2204:~# ls -l
total 8
-rw-r--r-- 1 root root 2 Feb 23 10:53 bashrc
drwx------ 3 root root 4096 Feb 23 2024 snap
[11:13:53 root@localhost ~][#ls -l
total 8
-rw-------. 1 root root 1082 Feb 23 06:57 anaconda-ks.cfg
-rw-r--r--. 1 root root 1 Feb 23 11:02 bashrc
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 axo pid,comm,pcpu # 查看进程的PID、名称以及CPU 占用率
ps aux | sort -rnk 4 # 按内存资源的使用量对进程进行排序
ps aux | sort -nk 3 # 按 CPU 资源的使用量对进程进行排序
ps -A # 显示所有进程信息
ps -u root # 显示指定用户信息
ps -efL # 查看线程数
ps -e -o "%C : %p :%z : %a"|sort -k5 -nr # 查看进程并按内存使用大小排列
ps -ef # 显示所有进程信息,连同命令行
ps -ef | grep ssh # ps 与grep 常用组合用法,查找特定进程
ps -C nginx # 通过名字或命令搜索进程
ps aux --sort=-pcpu,+pmem # CPU或者内存进行排序,-降序,+升序
ps -f --forest -C nginx # 用树的风格显示进程的层次关系
ps -o pid,uname,comm -C nginx # 显示一个父进程的子进程
ps -e -o pid,uname=USERNAME,pcpu=CPU_USAGE,pmem,comm # 重定义标签
ps -e -o pid,comm,etime # 显示进程运行的时间
ps -aux | grep named # 查看named进程详细信息
ps -o command -p 91730 | sed -n 2p # 通过进程id获取服务名称
范例
[11:13:56 root@localhost ~][#ps
PID TTY TIME CMD
2181 pts/0 00:00:00 bash
2296 pts/0 00:00:00 ps
[11:15:55 root@localhost ~][#ps -a
PID TTY TIME CMD
1413 tty1 00:00:00 dbus-run-sessio
1414 tty1 00:00:00 dbus-daemon
1415 tty1 00:00:00 gnome-session-b
1503 tty1 00:00:02 gnome-shell
1662 tty1 00:00:00 at-spi-bus-laun
1667 tty1 00:00:00 dbus-daemon
1671 tty1 00:00:00 Xwayland
1681 tty1 00:00:00 xdg-permission-
1740 tty1 00:00:00 gjs
1742 tty1 00:00:00 at-spi2-registr
1750 tty1 00:00:00 gsd-sharing
1751 tty1 00:00:00 gsd-wacom
1755 tty1 00:00:00 gsd-color
1757 tty1 00:00:00 gsd-keyboard
1759 tty1 00:00:00 gsd-print-notif
1760 tty1 00:00:00 gsd-rfkill
1762 tty1 00:00:00 gsd-smartcard
1764 tty1 00:00:00 gsd-datetime
1766 tty1 00:00:00 gsd-media-keys
1768 tty1 00:00:00 gsd-screensaver
1775 tty1 00:00:00 gsd-sound
1780 tty1 00:00:00 gsd-a11y-settin
1781 tty1 00:00:00 gsd-housekeepin
1782 tty1 00:00:00 gsd-power
1879 tty1 00:00:00 gsd-printer
1960 tty1 00:00:00 gjs
1964 tty1 00:00:00 ibus-daemon
1971 tty1 00:00:00 ibus-dconf
1976 tty1 00:00:00 ibus-x11
1983 tty1 00:00:00 ibus-portal
1990 tty1 00:00:00 ibus-engine-sim
2297 pts/0 00:00:00 ps
[11:16:00 root@localhost ~][#ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.9 106836 16456 ? Ss 09:57 0:00 /usr/lib/systemd/systemd rhgb --switched
root 2 0.0 0.0 0 0 ? S 09:57 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 09:57 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< 09:57 0:00 [rcu_par_gp]
root 5 0.0 0.0 0 0 ? I< 09:57 0:00 [slub_flushwq]
root 6 0.0 0.0 0 0 ? I< 09:57 0:00 [netns]
root 8 0.0 0.0 0 0 ? I< 09:57 0:00 [kworker/0:0H-events_highpri]
root 10 0.0 0.0 0 0 ? I< 09:57 0:00 [mm_percpu_wq]
root 12 0.0 0.0 0 0 ? I 09:57 0:00 [rcu_tasks_kthre]
root 13 0.0 0.0 0 0 ? I 09:57 0:00 [rcu_tasks_rude_]
root 14 0.0 0.0 0 0 ? I 09:57 0:00 [rcu_tasks_trace]
root 15 0.0 0.0 0 0 ? S 09:57 0:00 [ksoftirqd/0]
root 16 0.0 0.0 0 0 ? S 09:57 0:00 [pr/tty0]
root 17 0.0 0.0 0 0 ? I 09:57 0:00 [rcu_preempt]
root 18 0.0 0.0 0 0 ? S 09:57 0:00 [migration/0]
root 19 0.0 0.0 0 0 ? S 09:57 0:00 [idle_inject/0]
root 21 0.0 0.0 0 0 ? S 09:57 0:00 [cpuhp/0]
root 22 0.0 0.0 0 0 ? S 09:57 0:00 [cpuhp/1]
root 23 0.0 0.0 0 0 ? S 09:57 0:00 [idle_inject/1]
root 24 0.0 0.0 0 0 ? S 09:57 0:00 [migration/1]
root 25 0.0 0.0 0 0 ? S 09:57 0:00 [ksoftirqd/1]
root 27 0.0 0.0 0 0 ? I< 09:57 0:00 [kworker/1:0H-events_highpri]
root 29 0.0 0.0 0 0 ? S 09:57 0:00 [kdevtmpfs]
root 30 0.0 0.0 0 0 ? I< 09:57 0:00 [inet_frag_wq]
root 31 0.0 0.0 0 0 ? S 09:57 0:00 [kauditd]
root 33 0.0 0.0 0 0 ? S 09:57 0:00 [khungtaskd]
root 35 0.0 0.0 0 0 ? S 09:57 0:00 [oom_reaper]
root 36 0.0 0.0 0 0 ? I< 09:57 0:00 [writeback]
root 37 0.0 0.0 0 0 ? S 09:57 0:00 [kcompactd0]
root 38 0.0 0.0 0 0 ? SN 09:57 0:00 [ksmd]
root 39 0.0 0.0 0 0 ? SN 09:57 0:00 [khugepaged]
root 40 0.0 0.0 0 0 ? I< 09:57 0:00 [cryptd]
root 41 0.0 0.0 0 0 ? I< 09:57 0:00 [kintegrityd]
root 42 0.0 0.0 0 0 ? I< 09:57 0:00 [kblockd]
root 43 0.0 0.0 0 0 ? I< 09:57 0:00 [blkcg_punt_bio]
root 44 0.0 0.0 0 0 ? I< 09:57 0:00 [tpm_dev_wq]
root 45 0.0 0.0 0 0 ? I< 09:57 0:00 [md]
root 46 0.0 0.0 0 0 ? I< 09:57 0:00 [edac-poller]
root 47 0.0 0.0 0 0 ? S 09:57 0:00 [watchdogd]
root 49 0.0 0.0 0 0 ? I< 09:57 0:00 [kworker/0:1H-kblockd]
root 50 0.0 0.0 0 0 ? S 09:57 0:00 [kswapd0]
root 55 0.0 0.0 0 0 ? I< 09:57 0:00 [kthrotld]
root 62 0.0 0.0 0 0 ? S 09:57 0:00 [irq/24-pciehp]
root 63 0.0 0.0 0 0 ? S 09:57 0:00 [irq/25-pciehp]
root 64 0.0 0.0 0 0 ? S 09:57 0:00 [irq/26-pciehp]
root 65 0.0 0.0 0 0 ? S 09:57 0:00 [irq/27-pciehp]
root 66 0.0 0.0 0 0 ? S 09:57 0:00 [irq/28-pciehp]
root 67 0.0 0.0 0 0 ? S 09:57 0:00 [irq/29-pciehp]
root 68 0.0 0.0 0 0 ? S 09:57 0:00 [irq/30-pciehp]
root 69 0.0 0.0 0 0 ? S 09:57 0:00 [irq/31-pciehp]
root 70 0.0 0.0 0 0 ? S 09:57 0:00 [irq/32-pciehp]
root 71 0.0 0.0 0 0 ? S 09:57 0:00 [irq/33-pciehp]
root 72 0.0 0.0 0 0 ? S 09:57 0:00 [irq/34-pciehp]
root 73 0.0 0.0 0 0 ? S 09:57 0:00 [irq/35-pciehp]
root 74 0.0 0.0 0 0 ? S 09:57 0:00 [irq/36-pciehp]
root 75 0.0 0.0 0 0 ? S 09:57 0:00 [irq/37-pciehp]
root 76 0.0 0.0 0 0 ? S 09:57 0:00 [irq/38-pciehp]
root 77 0.0 0.0 0 0 ? S 09:57 0:00 [irq/39-pciehp]
root 78 0.0 0.0 0 0 ? S 09:57 0:00 [irq/40-pciehp]
root 79 0.0 0.0 0 0 ? S 09:57 0:00 [irq/41-pciehp]
root 80 0.0 0.0 0 0 ? S 09:57 0:00 [irq/42-pciehp]
root 81 0.0 0.0 0 0 ? S 09:57 0:00 [irq/43-pciehp]
root 82 0.0 0.0 0 0 ? S 09:57 0:00 [irq/44-pciehp]
root 83 0.0 0.0 0 0 ? S 09:57 0:00 [irq/45-pciehp]
root 84 0.0 0.0 0 0 ? S 09:57 0:00 [irq/46-pciehp]
root 85 0.0 0.0 0 0 ? S 09:57 0:00 [irq/47-pciehp]
root 86 0.0 0.0 0 0 ? S 09:57 0:00 [irq/48-pciehp]
root 87 0.0 0.0 0 0 ? S 09:57 0:00 [irq/49-pciehp]
root 88 0.0 0.0 0 0 ? S 09:57 0:00 [irq/50-pciehp]
root 89 0.0 0.0 0 0 ? S 09:57 0:00 [irq/51-pciehp]
root 90 0.0 0.0 0 0 ? S 09:57 0:00 [irq/52-pciehp]
root 91 0.0 0.0 0 0 ? S 09:57 0:00 [irq/53-pciehp]
root 92 0.0 0.0 0 0 ? S 09:57 0:00 [irq/54-pciehp]
root 93 0.0 0.0 0 0 ? S 09:57 0:00 [irq/55-pciehp]
root 94 0.0 0.0 0 0 ? I< 09:57 0:00 [acpi_thermal_pm]
root 95 0.0 0.0 0 0 ? I< 09:57 0:00 [kmpath_rdacd]
root 96 0.0 0.0 0 0 ? I< 09:57 0:00 [kaluad]
root 97 0.0 0.0 0 0 ? I< 09:57 0:00 [mld]
root 98 0.0 0.0 0 0 ? I< 09:57 0:00 [ipv6_addrconf]
root 108 0.0 0.0 0 0 ? I< 09:57 0:00 [kstrp]
root 120 0.0 0.0 0 0 ? I< 09:57 0:00 [zswap-shrink]
root 237 0.0 0.0 0 0 ? I< 09:57 0:00 [kworker/u257:0]
root 291 0.0 0.0 0 0 ? I 09:57 0:00 [kworker/1:2-cgroup_destroy]
root 293 0.0 0.0 0 0 ? I< 09:57 0:00 [kworker/1:1H-xfs-log/dm-0]
root 434 0.0 0.0 0 0 ? I< 09:57 0:00 [ata_sff]
root 435 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_0]
root 436 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_0]
root 437 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_1]
root 438 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_1]
root 445 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_2]
root 446 0.0 0.0 0 0 ? I< 09:57 0:00 [nvme-wq]
root 448 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_2]
root 450 0.0 0.0 0 0 ? I< 09:57 0:00 [nvme-reset-wq]
root 451 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_3]
root 452 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_3]
root 453 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_4]
root 455 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_4]
root 457 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_5]
root 458 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_5]
root 461 0.0 0.0 0 0 ? I< 09:57 0:00 [nvme-delete-wq]
root 462 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_6]
root 464 0.0 0.0 0 0 ? I< 09:57 0:00 [nvme-auth-wq]
root 465 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_6]
root 467 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_7]
root 468 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_7]
root 471 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_8]
root 472 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_8]
root 473 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_9]
root 474 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_9]
root 475 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_10]
root 476 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_10]
root 477 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_11]
root 478 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_11]
root 479 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_12]
root 480 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_12]
root 481 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_13]
root 482 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_13]
root 483 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_14]
root 485 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_14]
root 486 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_15]
root 487 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_15]
root 488 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_16]
root 489 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_16]
root 490 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_17]
root 491 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_17]
root 492 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_18]
root 493 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_18]
root 494 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_19]
root 495 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_19]
root 496 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_20]
root 497 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_20]
root 499 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_21]
root 500 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_21]
root 501 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_22]
root 502 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_22]
root 503 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_23]
root 504 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_23]
root 505 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_24]
root 506 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_24]
root 507 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_25]
root 508 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_25]
root 509 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_26]
root 510 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_26]
root 511 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_27]
root 512 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_27]
root 513 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_28]
root 514 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_28]
root 515 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_29]
root 516 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_29]
root 517 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_30]
root 518 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_30]
root 519 0.0 0.0 0 0 ? S 09:57 0:00 [scsi_eh_31]
root 520 0.0 0.0 0 0 ? I< 09:57 0:00 [scsi_tmf_31]
root 543 0.0 0.0 0 0 ? I 09:57 0:00 [kworker/u256:27-flush-253:0]
root 547 0.0 0.0 0 0 ? I 09:57 0:00 [kworker/u256:30-events_unbound]
root 552 0.0 0.0 0 0 ? S 09:57 0:00 [irq/16-vmwgfx]
root 553 0.0 0.0 0 0 ? I< 09:57 0:00 [ttm]
root 626 0.0 0.0 0 0 ? I< 09:57 0:00 [kdmflush/253:0]
root 633 0.0 0.0 0 0 ? I< 09:57 0:00 [kdmflush/253:1]
root 651 0.0 0.0 0 0 ? I< 09:57 0:00 [xfsalloc]
root 652 0.0 0.0 0 0 ? I< 09:57 0:00 [xfs_mru_cache]
root 653 0.0 0.0 0 0 ? I< 09:57 0:00 [xfs-buf/dm-0]
root 654 0.0 0.0 0 0 ? I< 09:57 0:00 [xfs-conv/dm-0]
root 655 0.0 0.0 0 0 ? I< 09:57 0:00 [xfs-reclaim/dm-]
root 656 0.0 0.0 0 0 ? I< 09:57 0:00 [xfs-blockgc/dm-]
root 657 0.0 0.0 0 0 ? I< 09:57 0:00 [xfs-inodegc/dm-]
root 658 0.0 0.0 0 0 ? I< 09:57 0:00 [xfs-log/dm-0]
root 659 0.0 0.0 0 0 ? I< 09:57 0:00 [xfs-cil/dm-0]
root 660 0.0 0.0 0 0 ? S 09:57 0:00 [xfsaild/dm-0]
root 730 0.0 0.5 35420 10460 ? Ss 09:57 0:00 /usr/lib/systemd/systemd-journald
root 746 0.0 0.1 85104 2312 ? Ssl 09:57 0:00 vmware-vmblock-fuse /run/vmblock-fuse -o
root 749 0.0 0.7 35984 13236 ? Ss 09:57 0:00 /usr/lib/systemd/systemd-udevd
root 787 0.0 0.0 0 0 ? I< 09:57 0:00 [kdmflush/253:2]
root 789 0.0 0.0 0 0 ? S 09:57 0:00 [irq/76-vmw_vmci]
root 790 0.0 0.0 0 0 ? S 09:57 0:00 [irq/77-vmw_vmci]
root 791 0.0 0.0 0 0 ? S 09:57 0:00 [irq/78-vmw_vmci]
root 824 0.0 0.0 0 0 ? I< 09:57 0:00 [xfs-buf/nvme0n1]
root 825 0.0 0.0 0 0 ? I< 09:57 0:00 [xfs-conv/nvme0n]
root 826 0.0 0.0 0 0 ? I< 09:57 0:00 [xfs-reclaim/nvm]
root 827 0.0 0.0 0 0 ? I< 09:57 0:00 [xfs-blockgc/nvm]
root 828 0.0 0.0 0 0 ? I< 09:57 0:00 [xfs-inodegc/nvm]
root 829 0.0 0.0 0 0 ? I< 09:57 0:00 [xfs-buf/dm-2]
root 830 0.0 0.0 0 0 ? I< 09:57 0:00 [xfs-conv/dm-2]
root 831 0.0 0.0 0 0 ? I< 09:57 0:00 [xfs-reclaim/dm-]
root 832 0.0 0.0 0 0 ? I< 09:57 0:00 [xfs-blockgc/dm-]
root 833 0.0 0.0 0 0 ? I< 09:57 0:00 [xfs-inodegc/dm-]
root 834 0.0 0.0 0 0 ? I< 09:57 0:00 [xfs-log/nvme0n1]
root 835 0.0 0.0 0 0 ? I< 09:57 0:00 [xfs-cil/nvme0n1]
root 836 0.0 0.0 0 0 ? I< 09:57 0:00 [xfs-log/dm-2]
root 837 0.0 0.0 0 0 ? I< 09:57 0:00 [xfs-cil/dm-2]
root 838 0.0 0.0 0 0 ? S 09:57 0:00 [xfsaild/nvme0n1]
root 839 0.0 0.0 0 0 ? S 09:57 0:00 [xfsaild/dm-2]
root 845 0.0 0.2 91824 4464 ? S<sl 09:57 0:00 /sbin/auditd
root 847 0.0 0.1 7780 3264 ? S< 09:57 0:00 /usr/sbin/sedispatch
dbus 868 0.0 0.2 10948 4704 ? Ss 09:57 0:00 /usr/bin/dbus-broker-launch --scope syst
dbus 869 0.0 0.2 9044 4516 ? S 09:57 0:00 dbus-broker --log 4 --controller 9 --mac
avahi 870 0.0 0.3 15532 6212 ? Ss 09:57 0:00 avahi-daemon: running [linux.local]
root 873 0.0 0.1 79268 2940 ? Ssl 09:57 0:00 /usr/sbin/irqbalance --foreground
libstor+ 874 0.0 0.0 2704 972 ? Ss 09:57 0:00 /usr/bin/lsmd -d
root 875 0.0 0.1 2804 1832 ? Ss 09:57 0:00 /usr/sbin/mcelog --daemon --foreground
polkitd 876 0.0 1.6 2578164 29596 ? Ssl 09:57 0:00 /usr/lib/polkit-1/polkitd --no-debug
root 877 0.0 0.4 452116 8832 ? Ssl 09:57 0:00 /usr/libexec/power-profiles-daemon
rtkit 878 0.0 0.0 154108 1580 ? SNsl 09:57 0:00 /usr/libexec/rtkit-daemon
root 879 0.0 0.6 525672 11408 ? Ssl 09:57 0:00 /usr/libexec/accounts-daemon
root 882 0.0 0.4 448280 8636 ? Ssl 09:57 0:00 /usr/libexec/switcheroo-control
root 885 0.0 0.6 20432 11212 ? Ss 09:57 0:00 /usr/lib/systemd/systemd-logind
root 887 0.0 0.7 395064 13500 ? Ssl 09:57 0:00 /usr/libexec/udisks2/udisksd
chrony 892 0.0 0.1 84380 3436 ? S 09:57 0:00 /usr/sbin/chronyd -F 2
root 894 0.0 0.4 448892 8756 ? Ssl 09:57 0:00 /usr/libexec/upowerd
root 898 0.0 0.5 232512 9908 ? Ss 09:57 0:00 /usr/bin/VGAuthService -s
root 899 0.1 0.7 456388 13164 ? Ssl 09:57 0:05 /usr/bin/vmtoolsd
avahi 906 0.0 0.0 15264 860 ? S 09:57 0:00 avahi-daemon: chroot helper
root 909 0.0 0.0 4712 1696 ? SNs 09:57 0:00 /usr/sbin/alsactl -s -n 19 -c -E ALSA_CO
root 922 0.0 0.6 391452 12284 ? Ssl 09:57 0:00 /usr/sbin/ModemManager
root 923 0.0 2.4 351400 43360 ? Ssl 09:57 0:00 /usr/bin/python3 -s /usr/sbin/firewalld
root 1065 0.0 1.2 474780 22932 ? Ssl 09:57 0:00 /usr/sbin/NetworkManager --no-daemon
root 1090 0.0 0.5 247356 10500 ? Ss 09:57 0:00 /usr/sbin/cupsd -l
root 1091 0.0 0.5 15792 9084 ? Ss 09:57 0:00 sshd: /usr/sbin/sshd -D [listener] 0 of
root 1163 0.0 0.3 161584 6336 ? Ssl 09:57 0:00 /usr/sbin/rsyslogd -n
root 1169 0.0 0.0 4668 1524 ? Ss 09:57 0:00 /usr/sbin/atd -f
root 1172 0.0 0.1 223912 3496 ? Ss 09:57 0:00 /usr/sbin/crond -n
root 1173 0.0 0.7 453236 13032 ? Ssl 09:57 0:00 /usr/sbin/gdm
root 1208 0.0 0.7 386960 13288 ? Sl 09:57 0:00 gdm-session-worker [pam/gdm-launch-envir
gdm 1243 0.0 0.7 22568 13976 ? Ss 09:57 0:00 /usr/lib/systemd/systemd --user
gdm 1260 0.0 0.3 26292 5784 ? S 09:57 0:00 (sd-pam)
gdm 1391 0.0 0.4 374304 7972 tty1 Ssl+ 09:57 0:00 /usr/libexec/gdm-wayland-session --regis
gdm 1393 0.0 0.2 10528 4092 ? Ss 09:57 0:00 /usr/bin/dbus-broker-launch --scope user
gdm 1411 0.0 0.0 4864 1380 ? S 09:57 0:00 dbus-broker --log 4 --controller 9 --mac
gdm 1413 0.0 0.0 6596 1572 tty1 S+ 09:57 0:00 dbus-run-session -- gnome-session --auto
gdm 1414 0.0 0.4 15796 7348 tty1 S+ 09:57 0:00 dbus-daemon --nofork --print-address 4 -
gdm 1415 0.0 1.2 734880 22560 tty1 Sl+ 09:57 0:00 /usr/libexec/gnome-session-binary --auto
gdm 1503 0.0 10.7 3741720 190900 tty1 Sl+ 09:57 0:02 /usr/bin/gnome-shell
gdm 1662 0.0 0.4 308536 7664 tty1 Sl+ 09:57 0:00 /usr/libexec/at-spi-bus-launcher
gdm 1667 0.0 0.3 15348 6880 tty1 S+ 09:57 0:00 /usr/bin/dbus-daemon --config-file=/usr/
gdm 1671 0.0 3.8 191824 69084 tty1 S+ 09:57 0:00 /usr/bin/Xwayland :1024 -rootless -nores
gdm 1681 0.0 0.4 448240 7128 tty1 Sl+ 09:57 0:00 /usr/libexec/xdg-permission-store
gdm 1695 0.0 0.6 259580 11792 ? S<sl 09:57 0:00 /usr/bin/pipewire
gdm 1696 0.0 1.0 472960 18556 ? S<sl 09:57 0:00 /usr/bin/wireplumber
gdm 1697 0.0 0.5 242596 9312 ? S<sl 09:57 0:00 /usr/bin/pipewire-pulse
root 1712 0.0 0.3 15264 5708 ? Ss 09:57 0:00 /usr/sbin/wpa_supplicant -c /etc/wpa_sup
root 1721 0.0 1.6 481120 28420 ? Ssl 09:57 0:00 /usr/libexec/packagekitd
gdm 1740 0.0 1.5 2731056 28352 tty1 Sl+ 09:57 0:00 /usr/bin/gjs /usr/share/gnome-shell/org.
gdm 1742 0.0 0.4 161700 7188 tty1 Sl+ 09:57 0:00 /usr/libexec/at-spi2-registryd --use-gno
gdm 1750 0.0 0.8 677956 14684 tty1 Sl+ 09:57 0:00 /usr/libexec/gsd-sharing
gdm 1751 0.0 1.5 591196 27756 tty1 Sl+ 09:57 0:00 /usr/libexec/gsd-wacom
gdm 1755 0.0 1.6 740228 28788 tty1 Sl+ 09:57 0:00 /usr/libexec/gsd-color
gdm 1757 0.0 1.5 590560 27200 tty1 Sl+ 09:57 0:00 /usr/libexec/gsd-keyboard
gdm 1759 0.0 0.8 467032 15036 tty1 Sl+ 09:57 0:00 /usr/libexec/gsd-print-notifications
gdm 1760 0.0 0.4 669844 8312 tty1 Sl+ 09:57 0:00 /usr/libexec/gsd-rfkill
gdm 1762 0.0 0.7 603136 13564 tty1 Sl+ 09:57 0:00 /usr/libexec/gsd-smartcard
gdm 1764 0.0 1.1 594564 20792 tty1 Sl+ 09:57 0:00 /usr/libexec/gsd-datetime
gdm 1766 0.0 1.7 735520 30416 tty1 Sl+ 09:57 0:00 /usr/libexec/gsd-media-keys
gdm 1768 0.0 0.4 448244 8152 tty1 Sl+ 09:57 0:00 /usr/libexec/gsd-screensaver-proxy
gdm 1775 0.0 0.7 530876 13188 tty1 Sl+ 09:57 0:00 /usr/libexec/gsd-sound
gdm 1780 0.0 0.4 522340 8532 tty1 Sl+ 09:57 0:00 /usr/libexec/gsd-a11y-settings
gdm 1781 0.0 0.5 524904 9784 tty1 Sl+ 09:57 0:00 /usr/libexec/gsd-housekeeping
gdm 1782 0.0 1.7 665860 30800 tty1 Sl+ 09:57 0:00 /usr/libexec/gsd-power
gdm 1879 0.0 1.2 598136 21696 tty1 Sl+ 09:57 0:00 /usr/libexec/gsd-printer
colord 1941 0.0 0.7 530556 13592 ? Ssl 09:57 0:00 /usr/libexec/colord
gdm 1960 0.0 1.4 2796592 26352 tty1 Sl+ 09:57 0:00 /usr/bin/gjs /usr/share/gnome-shell/org.
gdm 1964 0.0 0.7 526744 13528 tty1 Sl 09:57 0:00 ibus-daemon --panel disable -r --xim
gdm 1971 0.0 0.5 449220 9032 tty1 Sl 09:57 0:00 /usr/libexec/ibus-dconf
gdm 1976 0.0 3.3 593804 59644 tty1 Sl 09:57 0:00 /usr/libexec/ibus-x11 --kill-daemon
gdm 1983 0.0 0.6 449148 11256 tty1 Sl+ 09:57 0:00 /usr/libexec/ibus-portal
gdm 1990 0.0 0.5 375364 9084 tty1 Sl 09:57 0:00 /usr/libexec/ibus-engine-simple
root 2018 0.0 0.7 22388 13804 ? Ss 09:57 0:00 /usr/lib/systemd/systemd --user
root 2022 0.0 0.3 26484 5892 ? S 09:57 0:00 (sd-pam)
root 2134 0.0 0.0 0 0 ? I 10:17 0:00 [kworker/u256:0-events_unbound]
root 2151 0.0 0.0 0 0 ? I 10:27 0:00 [kworker/1:1-events_freezable]
root 2164 0.0 0.6 19104 11580 ? Ss 10:28 0:00 sshd: root [priv]
root 2169 0.0 0.4 18956 7136 ? R 10:28 0:00 sshd: root@pts/0
root 2181 0.0 0.3 224096 5600 pts/0 Ss 10:28 0:00 -bash
root 2259 0.0 0.0 0 0 ? I 10:59 0:00 [kworker/0:1-cgroup_destroy]
root 2277 0.0 0.0 0 0 ? I 11:05 0:00 [kworker/0:2-events]
root 2292 0.0 0.0 0 0 ? I 11:12 0:00 [kworker/0:0-events_power_efficient]
root 2293 0.0 0.0 0 0 ? I 11:13 0:00 [kworker/1:0-events_freezable]
root 2298 0.0 0.1 225480 3532 pts/0 R+ 11:16 0:00 ps aux
id
打印真实以及有效的用户和所在组的信息
概要
id [OPTION]... [USER]...
主要用途
没有选项时,打印指定用户ID信息。
选项
-a 兼容性选项,没有实际作用。
-Z, --context 只打印进程的安全上下文。
-g, --group 只打印有效的组ID。
-G, --groups 打印全部组ID。
-u, --user 只打印有效的用户ID。
-z, --zero 使用空字符代替默认的空格来分隔条目。
--help 显示帮助信息并退出。
--version 显示版本信息并退出。
只有在使用 -u -g -G 选项中一到多个时,以下选项可以使用:
-n, --name 打印名称而不是数字。
-r, --real 打印真实ID而不是有效ID。
参数
user(可选):可以为一到多个,默认为当前用户。
返回值
返回0表示成功,返回非0值表示失败。
例子
[root@localhost ~]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
解释:用户root的UID号码 = 0,GID号码 = 0。用户root是下面组的成员:
root组GID号是:0
bin组GID号是:1
daemon组GID号是:2
sys组GID号是:3
adm组GID号是:4
disk组GID号是:6
wheel组GID号是:10
打印用户名、UID 和该用户所属的所有组,要这么做,我们可以使用 -a 选项:
[root@localhost ~]# id -a
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
输出所有不同的组ID ,有效的,真实的和补充的,我们可以使用 -G 选项来实现:
[root@localhost ~]# id -G
0 1 2 3 4 6 10
结果只会显示GID号。你可以和/etc/group文件比较。下面是/etc/group文件的示例内容:
只输出有效的组ID,通过使用 -g 选项来只输出有效组ID:
[root@localhost ~]# id -g
0
输出特定用户信息,我们可以输出特定的用户信息相关的UID和GID。只需要在id命令后跟上用户名:
[root@localhost ~]# id www
uid=500(www) gid=500(www) groups=500(www)
注意
该命令可以显示真实有效的用户ID(UID)和组ID(GID)。UID 是对一个用户的单一身份标识。组ID(GID)则对应多个UID;一些程序可能需要UID/GID来运行。id 使我们更加容易地找出用户的UID以及GID,而不必在 /etc/group 文件中搜寻。
该命令是GNU coreutils包中的命令,相关的帮助信息请查看man -s 1 id,info coreutils 'id invocation'。
想要知道一个命令是做什么的?不好意思问别人怎么办?
whatis
查询一个命令执行什么功能
补充说明
whatis命令 是用于查询一个命令执行什么功能,并将查询结果打印到终端上。
whatis命令在用catman -w命令创建的数据库中查找command参数指定的命令、系统调用、库函数或特殊文件名。whatis命令显示手册部分的页眉行。然后可以发出man命令以获取附加的信息。whatis命令等同于使用man -f命令。
语法
whatis
实例
[root@localhost ~]# whatis ls
ls (1) - list directory contents
ls (1p) - list directory contents
[root@localhost ~]# whatis cp
cp (1) - copy files and directories
cp (1p) - copy files
[root@localhost ~]# whatis chown
chown (1) - change file owner and group
chown (1p) - change the file ownership
chown (2) - change ownership of a file
chown (3p) - change owner and group of a file
[root@localhost ~]# whatis man
man (1) - format and display the on-line manual pages
man (1p) - display system documentation
man (7) - macros to format man pages
man (rpm) - A set of documentation tools: man, apropos and whatis.
man-pages (rpm) - Man (manual) pages from the Linux Documentation Project.
man.config [man] (5) - configuration data for man
[11:22:57 root@localhost ~][#whatis rm
rm (1) - remove files or directories
rm (1p) - remove directory entries
将交互式的操作变成非交互操作(自动化执行),可以提高执行效率
可以吧多个命令写在一行
范例
[11:23:03 root@localhost ~][#hostname ;who ;history
localhost.localdomain
root pts/0 2024-02-23 10:28 (10.0.0.1)
1 init 3
2 init 6
3 hostname
4 hostname -I
5 yum -y install postfix
6 systemctl re start postfix
7 systemctl restart postfix
8 systemctl status postfix
9 lscpu
10 echo $PS1
11 nano /etc/profile
12 exit
13 nano /etc/profile
14 nano /etc/bashrc
15 type -a
16 type -a echo
17 help
18 echo @PATH
19 echo $PATH
20 alias
21 which hostname
22 which install
23 hash
24 ls
25 \ls
26 ls
27 ls /
28 \ls /
29 vi bashrc
30 vi .bashrc
31 test
32 . .bashrc
33 test
34 vi .bashrc
35 ls
36 ls -l
37 ps
38 ps -a
39 ps aux
40 whatis
41 whatis install
42 whatis rm
43 hostname ;who ;history
设置执行命令的时间
mesg n 2> /dev/null || true
HISTTIMEFORMAT='%F %T'
外部命令的****--help 或 -h 选项
显示用法总结和参数列表,大多数命令使用,但并非所有的
[root@centos8 ~]#date --help
Usage: date [OPTION]... [+FORMAT]
or: date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Display the current time in the given FORMAT, or set the system date.
[root@centos8 ~]#cal -h
Usage:
cal [options] [[[day] month] year]
cal [options] <timestamp|monthname>
[root@centos8 ~]#strace --help
strace: invalid option -- '-'
Try 'strace -h' for more information.
[root@centos8 ~]#openssl --help
Invalid command '--help'; type "help" for a list.
[root@centos8 ~]#date -h
date: invalid option -- 'h'
Try 'date --help' for more information.
[root@centos8 ~]#shutdown -h
Shutdown scheduled for Fri 2020-03-20 08:26:27 CST, use 'shutdown -c' to cancel.
man
就是手册的意思
查看Linux中的指令帮助
补充说明
man命令 是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息。
语法
man(选项)(参数)
选项
-a:在所有的man帮助手册中搜索;
-f:等价于whatis指令,显示给定关键字的简短描述信息;
-P:指定内容时使用分页程序;
-M:指定man手册搜索的路径。
参数
数字:指定从哪本man手册中搜索帮助;
关键字:指定要搜索帮助的关键字。
数字代表内容
1:用户在shell环境可操作的命令或执行文件;
2:系统内核可调用的函数与工具等
3:一些常用的函数(function)与函数库(library),大部分为C的函数库(libc)
4:设备文件说明,通常在/dev下的文件
5:配置文件或某些文件格式
6:游戏(games)
7:惯例与协议等,如Linux文件系统,网络协议,ASCII code等说明
8:系统管理员可用的管理命令
9:跟kernel有关的文件
实例
我们输入man ls,它会在最左上角显示“LS(1)”,在这里,“LS”表示手册名称,而“(1)”表示该手册位于第一节章,同样,我们输man ifconfig它会在最左上角显示“IFCONFIG(8)”。也可以这样输入命令:“man [章节号] 手册名称”。
man是按照手册的章节号的顺序进行搜索的,比如:
man sleep
只会显示sleep命令的手册,如果想查看库函数sleep,就要输入:
man 3 sleep
[11:43:47 root@localhost ~][#man 3 sleep
sleep(3) Library Functions Manual sleep(3)
NAME
sleep - sleep for a specified number of seconds
LIBRARY
Standard C library (libc, -lc)
SYNOPSIS
#include <unistd.h>
unsigned int sleep(unsigned int seconds);
DESCRIPTION
sleep() causes the calling thread to sleep either until the number of real-time seconds specified
in seconds have elapsed or until a signal arrives which is not ignored.
RETURN VALUE
Zero if the requested time has elapsed, or the number of seconds left to sleep, if the call was
interrupted by a signal handler.
ATTRIBUTES
For an explanation of the terms used in this section, see attributes(7).
┌──────────────────────────────────────────────────┬───────────────┬─────────────────────────────┐
│Interface │ Attribute │ Value │
├──────────────────────────────────────────────────┼───────────────┼─────────────────────────────┤
│sleep() │ Thread safety │ MT-Unsafe sig:SIGCHLD/linux │
└──────────────────────────────────────────────────┴───────────────┴─────────────────────────────┘
VERSIONS
On Linux, sleep() is implemented via nanosleep(2). See the nanosleep(2) man page for a discus?
sion of the clock used.
On some systems, sleep() may be implemented using alarm(2) and SIGALRM (POSIX.1 permits this);
mixing calls to alarm(2) and sleep() is a bad idea.
STANDARDS
POSIX.1-2008.
HISTORY
POSIX.1-2001.
CAVEATS
Using longjmp(3) from a signal handler or modifying the handling of SIGALRM while sleeping will
cause undefined results.
SEE ALSO
sleep(1), alarm(2), nanosleep(2), signal(2), signal(7)
Linux man-pages 6.04 2023-03-30 sleep(3)
命令自身提供的官方使用指南
/usr/share/doc
date的玩法
11:32:04 root@localhost ~][#date Fri 23 Feb 11:39:38 GMT 2024 [11:39:38 root@localhost ~][#date +%F
2024-02-23
[11:39:47 root@localhost ~][#date +%T 11:39:52 [11:39:52 root@localhost ~][#date +%F +%T
date: extra operand ‘+%T’
Try 'date --help' for more information.
[11:40:00 root@localhost ~][#date +'%F %T'
2024-02-23 11:40:26
[11:40:26 root@localhost ~][#date -d 'yesterday'
Thu 22 Feb 11:42:18 GMT 2024
[11:42:18 root@localhost ~][#date -d 'yesterday' +'%F %T'
2024-02-22 11:43:16
[11:43:16 root@localhost ~][#date -d '-2 day' +'%F %T'
2024-02-21 11:43:47
#其中-2就是昨天 所以它显示的是昨天
lscpu
显示有关CPU架构的信息
补充说明
lscpu命令 是显示有关CPU架构的信息。
语法
lscpu [选项]
选项
-a, --all # 打印在线和离线CPU(默认为-e)
-b, --online # 仅打印在线CPU(-p的默认值)
-c, --offline # 打印离线CPU
-e, --extended[=<list>] # 打印出一个扩展的可读格式
-p, --parse[=<list>] # 打印出可解析的格式
-s, --sysroot <dir> # 将指定的目录用作系统根目录
-x, --hex # 打印十六进制掩码,而不是CPU列表
-h, --help # 显示此帮助并退出
-V, --version # 输出版本信息并退出
参数
可用列:
CPU 逻辑CPU编号
CORE 逻辑核心号码
SOCKET 逻辑套接字号
NODE 逻辑NUMA节点号
BOOK 逻辑书号
CACHE 显示了如何在CPU之间共享高速缓存
POLARIZATION 虚拟硬件上的CPU调度模式
ADDRESS CPU的物理地址
CONFIGURED 显示管理程序是否分配了CPU
ONLINE 显示Linux是否正在使用CPU
例子
[root@localhost ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 30
Model name: Intel(R) Xeon(R) CPU X3430 @ 2.40GHz
Stepping: 5
CPU MHz: 2394.055
BogoMIPS: 4788.11
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 8192K
NUMA node0 CPU(s): 0-3
范例:
[11:53:34 root@localhost ~][#lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Address sizes: 45 bits physical, 48 bits virtual
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Vendor ID: GenuineIntel
BIOS Vendor ID: GenuineIntel
Model name: 12th Gen Intel(R) Core(TM) i5-12400F
BIOS Model name: 12th Gen Intel(R) Core(TM) i5-12400F
CPU family: 6
Model: 151
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 2
Stepping: 2
BogoMIPS: 4992.00
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mm
x fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good
nopl xtopology tsc_reliable nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3
fma cx16 sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c r
drand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp ibrs_enhanced fsgs
base tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb s
ha_ni xsaveopt xsavec xgetbv1 xsaves avx_vnni arat umip pku ospke gfni vaes vpclmu
lqdq rdpid movdiri movdir64b fsrm md_clear serialize flush_l1d arch_capabilities
Virtualization features:
Hypervisor vendor: VMware
Virtualization type: full
Caches (sum of all):
L1d: 96 KiB (2 instances)
L1i: 64 KiB (2 instances)
L2: 2.5 MiB (2 instances)
L3: 36 MiB (2 instances)
NUMA:
NUMA node(s): 1
NUMA node0 CPU(s): 0,1
Vulnerabilities:
Gather data sampling: Not affected
Itlb multihit: KVM: Mitigation: VMX unsupported
L1tf: Not affected
Mds: Not affected
Meltdown: Not affected
Mmio stale data: Not affected
Retbleed: Not affected
Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl
Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Spectre v2: Mitigation; Enhanced / Automatic IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS
SW sequence
Srbds: Not affected
Tsx async abort: Not affected
还有一个查看cpu的信息的方法
cat /proc/cpuinfo
[11:56:56 root@localhost ~][#cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 151
model name : 12th Gen Intel(R) Core(TM) i5-12400F
stepping : 2
microcode : 0x25
cpu MHz : 2496.001
cache size : 18432 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 32
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology tsc_reliable nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves avx_vnni arat umip pku ospke gfni vaes vpclmulqdq rdpid movdiri movdir64b fsrm md_clear serialize flush_l1d arch_capabilities
bugs : spectre_v1 spectre_v2 spec_store_bypass swapgs itlb_multihit eibrs_pbrsb
bogomips : 4992.00
clflush size : 64
cache_alignment : 64
address sizes : 45 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 151
model name : 12th Gen Intel(R) Core(TM) i5-12400F
stepping : 2
microcode : 0x25
cpu MHz : 2496.001
cache size : 18432 KB
physical id : 2
siblings : 1
core id : 0
cpu cores : 1
apicid : 2
initial apicid : 2
fpu : yes
fpu_exception : yes
cpuid level : 32
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology tsc_reliable nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves avx_vnni arat umip pku ospke gfni vaes vpclmulqdq rdpid movdiri movdir64b fsrm md_clear serialize flush_l1d arch_capabilities
bugs : spectre_v1 spectre_v2 spec_store_bypass swapgs itlb_multihit eibrs_pbrsb
bogomips : 4992.00
clflush size : 64
cache_alignment : 64
address sizes : 45 bits physical, 48 bits virtual
power management:
lsblk
列出块设备信息
补充说明
lsblk命令 用于列出所有可用块设备的信息,而且还能显示他们之间的依赖关系,但是它不会列出RAM盘的信息。块设备有硬盘,闪存盘,cd-ROM等等。lsblk命令包含在util-linux-ng包中,现在该包改名为util-linux。这个包带了几个其它工具,如dmesg。要安装lsblk,请在此处下载util-linux包。Fedora用户可以通过命令sudo yum install util-linux-ng来安装该包。
选项
-a, --all # 显示所有设备。
-b, --bytes # 以bytes方式显示设备大小。
-d, --nodeps # 不显示 slaves 或 holders。
-D, --discard # print discard capabilities。
-e, --exclude <list> # 排除设备 (default: RAM disks)。
-f, --fs # 显示文件系统信息。
-h, --help # 显示帮助信息。
-i, --ascii # use ascii characters only。
-m, --perms # 显示权限信息。
-l, --list # 使用列表格式显示。
-n, --noheadings # 不显示标题。
-o, --output <list> # 输出列。
-P, --pairs # 使用key="value"格式显示。
-r, --raw # 使用原始格式显示。
-t, --topology # 显示拓扑结构信息。
实例
lsblk命令默认情况下将以树状列出所有块设备。打开终端,并输入以下命令:
lsblk
NAME MAJ:MIN rm SIZE RO type mountpoint
sda 8:0 0 232.9G 0 disk
├─sda1 8:1 0 46.6G 0 part /
├─sda2 8:2 0 1K 0 part
├─sda5 8:5 0 190M 0 part /boot
├─sda6 8:6 0 3.7G 0 part [SWAP]
├─sda7 8:7 0 93.1G 0 part /data
└─sda8 8:8 0 89.2G 0 part /personal
sr0 11:0 1 1024M 0 rom
7个栏目名称如下:
NAME :这是块设备名。
MAJ:MIN :本栏显示主要和次要设备号。
RM :本栏显示设备是否可移动设备。注意,在本例中设备sdb和sr0的RM值等于1,这说明他们是可移动设备。
SIZE :本栏列出设备的容量大小信息。例如298.1G表明该设备大小为298.1GB,而1K表明该设备大小为1KB。
RO :该项表明设备是否为只读。在本案例中,所有设备的RO值为0,表明他们不是只读的。
TYPE :本栏显示块设备是否是磁盘或磁盘上的一个分区。在本例中,sda和sdb是磁盘,而sr0是只读存储(rom)。
MOUNTPOINT :本栏指出设备挂载的挂载点。
默认选项不会列出所有空设备。要查看这些空设备,请使用以下命令:
lsblk -a
lsblk命令也可以用于列出一个特定设备的拥有关系,同时也可以列出组和模式。可以通过以下命令来获取这些信息:
范例
root@ubuntu2204:~# lsblk -a
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 40.4M 1 loop /snap/snapd/20671
loop1 7:1 0 63.9M 1 loop /snap/core20/2182
loop2 7:2 0 63.9M 1 loop /snap/core20/2105
loop3 7:3 0 87M 1 loop /snap/lxd/27037
loop4 7:4 0 0B 0 loop
loop5 7:5 0 0B 0 loop
loop6 7:6 0 0B 0 loop
loop7 7:7 0 0B 0 loop
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 198G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 99G 0 lvm /
sr0 11:0 1 2G 0 rom
lsblk -m
该命令也可以只获取指定设备的信息。这可以通过在提供给lsblk命令的选项后指定设备名来实现。例如,你可能对了解以字节显示你的磁盘驱动器大小比较感兴趣,那么你可以通过运行以下命令来实现:
范例
root@ubuntu2204:~# lsblk -a
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 40.4M 1 loop /snap/snapd/20671
loop1 7:1 0 63.9M 1 loop /snap/core20/2182
loop2 7:2 0 63.9M 1 loop /snap/core20/2105
loop3 7:3 0 87M 1 loop /snap/lxd/27037
loop4 7:4 0 0B 0 loop
loop5 7:5 0 0B 0 loop
loop6 7:6 0 0B 0 loop
loop7 7:7 0 0B 0 loop
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 198G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 99G 0 lvm /
sr0 11:0 1 2G 0 rom
root@ubuntu2204:~# lsblk -m
NAME SIZE OWNER GROUP MODE
loop0 40.4M root disk brw-rw----
loop1 63.9M root disk brw-rw----
loop2 63.9M root disk brw-rw----
loop3 87M root disk brw-rw----
sda 200G root disk brw-rw----
├─sda1 1M root disk brw-rw----
├─sda2 2G root disk brw-rw----
└─sda3 198G root disk brw-rw----
└─ubuntu--vg-ubuntu--lv 99G root disk brw-rw----
sr0 2G root cdrom brw-rw----
lsblk -b /dev/sda
等价于
lsblk --bytes /dev/sda
你也可以组合几个选项来获取指定的输出。例如,你也许想要以列表格式列出设备,而不是默认的树状格式。你可能也对移除不同栏目名称的标题感兴趣。可以将两个不同的选项组合,以获得期望的输出,命令如下:
范例
root@ubuntu2204:~# lsblk -b /dev/sda
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 214748364800 0 disk
├─sda1 8:1 0 1048576 0 part
├─sda2 8:2 0 2147483648 0 part /boot
└─sda3 8:3 0 212597735424 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 106296246272 0 lvm /
lsblk -nl
要获取SCSI设备的列表,你只能使用-S选项。该选项是大写字母S,不能和-s选项混淆,该选项是用来以颠倒的顺序打印依赖的。
lsblk -S
lsblk列出SCSI设备,而-s是逆序选项(将设备和分区的组织关系逆转过来显示),其将给出如下输出。输入命令:
lsblk -s
范例
root@ubuntu2204:~# lsblk -s
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 40.4M 1 loop /snap/snapd/20671
loop1 7:1 0 63.9M 1 loop /snap/core20/2182
loop2 7:2 0 63.9M 1 loop /snap/core20/2105
loop3 7:3 0 87M 1 loop /snap/lxd/27037
sda1 8:1 0 1M 0 part
└─sda 8:0 0 200G 0 disk
sda2 8:2 0 2G 0 part /boot
└─sda 8:0 0 200G 0 disk
sr0 11:0 1 2G 0 rom
ubuntu--vg-ubuntu--lv 253:0 0 99G 0 lvm /
└─sda3 8:3 0 198G 0 part
└─sda 8:0 0 200G 0 disk
范例
[12:01:39 root@localhost ~][#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sr0 11:0 1 9.8G 0 rom
nvme0n1 259:0 0 200G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 199G 0 part
├─rl-root 253:0 0 70G 0 lvm /
├─rl-swap 253:1 0 2G 0 lvm [SWAP]
└─rl-home 253:2 0 127G 0 lvm /home
如何看内核
uname
打印系统信息
概要
uname [OPTION]...
主要用途
打印机器和操作系统的信息。
当没有选项时,默认启用 -s 选项。
如果给出多个选项或 -a 选项时,输出信息按以下字段排序:内核名称 主机名称 内核release 内核版本 机器名称 处理器 硬件平台 操作系统。
选项
-a, --all 按顺序打印全部信息,如果 -p 和 -i 的信息是未知,那么省略。
-s, --kernel-name 打印内核名称。
-n, --nodename 打印网络节点主机名称。
-r, --kernel-release 打印内核release。
-v, --kernel-version 打印内核版本。
-m, --machine 打印机器名称。
-p, --processor 打印处理器名称。
-i, --hardware-platform 打印硬件平台名称。
-o, --operating-system 打印操作系统名称。
--help 显示帮助信息并退出。
--version 显示版本信息并退出。
返回值
返回0表示成功,返回非0值表示失败。
例子
# 单独使用uname命令时相当于uname -s
[root@localhost ~]# uname
Linux
# 查看全部信息
[root@localhost ~]# uname -a
Linux localhost 2.6.18-348.6.1.el5 #1 SMP Tue May 21 15:34:22 EDT 2013 i686 i686 i386 GNU/Linux
# 分别列出信息
[root@localhost ~]# uname -m
i686
[root@localhost ~]# uname -n
localhost
[root@localhost ~]# uname -r
2.6.18-4-686 #内核信息
[root@localhost ~]# uname -s
Linux
[root@localhost ~]# uname -v
#1 SMP Tue May 21 15:34:22 EDT 2013
[root@localhost ~]# uname -p
i686
[root@localhost ~]# uname -i
i386
[root@localhost ~]# uname -o
GNU/Linux
注意
该命令是GNU coreutils包中的命令,相关的帮助信息请查看man -s 1 uname,info coreutils 'uname invocation'。
cal
显示当前日历或指定日期的日历
补充说明
cal命令 用于显示当前日历,或者指定日期的日历,如果没有指定参数,则显示当前月份。
一个单一的参数指定要显示的年份 (1 - 9999) ; 注意年份必须被完全地指定: cal 89 不会 显示1989年的日历. 两个参数表示月份 (1 - 12) 和年份. 如果没有指定参数, 则显示当前月份的日历.
一年从Jan 1 (1 月 1 日) 开始.
格里高利历法改革(Gregorian Reformation)被认为发生于 1752 年 9 月 3 日. 在此之前, 多数国家已经认可这项改革(尽管有一些直到 20 世纪初才认可它). 那天之后的 10 天在这项改革被略去了, 所以那个月的日历有点不太寻常.
语法
cal [ -mjy ] [ 月份 ] [ 年份 ]
选项
-l # 显示单月输出;
-3 # 显示临近三个月的日历;
-s # 将星期日作为月的第一天;
-m # 显示星期一作为一周的第一天.. (缺省为星期日.)
-j # 显示儒略历的(Julian)日期 (以 1 为基的天数, 从 1 月 1 日开始计数) .
-y # 显示当前年份的日历..
参数
月:指定月份;
年:指定年份。
实例
单独执行cal命令会打印出日历:
[root@localhost ~]# cal
十二月 2013
日 一 二 三 四 五 六
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
[root@localhost ~]# cal -j
十二月 2013
日 一 二 三 四 五 六
335 336 337 338 339 340 341
342 343 344 345 346 347 348
349 350 351 352 353 354 355
356 357 358 359 360 361 362
363 364 365
[root@localhost ~]# cal -3
十一月 2013 十二月 2013 一月 2014
日 一 二 三 四 五 六 日 一 二 三 四 五 六 日 一 二 三 四 五 六
1 2 1 2 3 4 5 6 7 1 2 3 4
3 4 5 6 7 8 9 8 9 10 11 12 13 14 5 6 7 8 9 10 11
10 11 12 13 14 15 16 15 16 17 18 19 20 21 12 13 14 15 16 17 18
17 18 19 20 21 22 23 22 23 24 25 26 27 28 19 20 21 22 23 24 25
24 25 26 27 28 29 30 29 30 31 26 27 28 29 30 31
uptime
查看Linux系统负载信息
补充说明
uptime命令 能够打印系统总共运行了多长时间和系统的平均负载。uptime命令可以显示的信息显示依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。
语法
uptime(选项)
选项
-V:显示指令的版本信息。
实例
使用uptime命令查看系统负载:
[root@LinServ-1 ~]# uptime -V #显示uptime命令版本信息
procps version 3.2.7
[root@LinServ-1 ~]# uptime
15:31:30 up 127 days, 3:00, 1 user, load average: 0.00, 0.00, 0.00
显示内容说明:
15:31:30 # 系统当前时间
up 127 days, 3:00 # 主机已运行时间,时间越大,说明你的机器越稳定。
1 user # 用户连接数,是总连接数而不是用户数
load average: 0.00, 0.00, 0.00 # 系统平均负载,统计最近1,5,15分钟的系统平均负载
那么什么是系统平均负载呢? 系统平均负载是指在特定时间间隔内运行队列中的平均进程数。
如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能是良好的。如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题。
如果你的linux主机是1个双核CPU的话,当Load Average 为6的时候说明机器已经被充分使用了。
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"
screen
用于命令行终端切换
补充说明
Screen 是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。
会话恢复
只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。
多窗口
在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。 会话共享 Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。
GNU's Screen 官方站点:http://www.gnu.org/software/screen/
语法
# screen -AmRvx -[ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]
选项
-A 将所有的视窗都调整为目前终端机的大小。
-d <作业名称> 将指定的screen作业离线。
-h <行数> 指定视窗的缓冲区行数。
-m 即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r <作业名称> 恢复离线的screen作业。
-R 先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s 指定建立新视窗时,所要执行的shell。
-S <作业名称> 指定screen作业的名称。
-v 显示版本信息。
-x 恢复之前离线的screen作业。
-ls或--list 显示目前所有的screen作业。
-wipe 检查目前所有的screen作业,并删除已经无法使用的screen作业。
常用screen参数
screen -S yourname -> 新建一个叫yourname的session
screen -ls -> 列出当前所有的session
screen -r yourname -> 回到yourname这个session
screen -d yourname -> 远程detach某个session
screen -d -r yourname -> 结束当前session并回到yourname这个session
在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始。
C-a ? -> 显示所有键绑定信息
C-a c -> 创建一个新的运行shell的窗口并切换到该窗口
C-a n -> Next,切换到下一个 window
C-a p -> Previous,切换到前一个 window
C-a 0..9 -> 切换到第 0..9 个 window
Ctrl+a [Space] -> 由视窗0循序切换到视窗9
C-a C-a -> 在两个最近使用的 window 间切换
C-a x -> 锁住当前的 window,需用用户密码解锁
C-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。
C-a z -> 把当前session放到后台执行,用 shell 的 fg 命令则可回去。
C-a w -> 显示所有窗口列表
C-a t -> time,显示当前时间,和系统的 load
C-a k -> kill window,强行关闭当前的 window
C-a -> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 [vi 一样
C-b Backward,PageUp
C-f Forward,PageDown
H(大写) High,将光标移至左上角
L Low,将光标移至左下角
0 移到行首
$ 行末
w forward one word,以字为单位往前移
b backward one word,以字为单位往后移
Space 第一次按为标记区起点,第二次按为终点
Esc 结束 copy mode
C-a ] -> paste,把刚刚在 copy mode 选定的内容贴上
使用 screen
安装screen
流行的Linux发行版(例如Red Hat Enterprise Linux)通常会自带screen实用程序,如果没有的话,可以从GNU screen的官方网站下载。
[root@TS-DEV ~]# yum install screen
[root@TS-DEV ~]# rpm -qa|grep screen
screen-4.0.3-4.el5
[root@TS-DEV ~]#
创建一个新的窗口
安装完成后,直接敲命令screen就可以启动它。但是这样启动的screen会话没有名字,实践上推荐为每个screen会话取一个名字,方便分辨:
[root@TS-DEV ~]# screen -S david
screen启动后,会创建第一个窗口,也就是窗口No. 0,并在其中打开一个系统默认的shell,一般都会是bash。所以你敲入命令screen之后,会立刻又返回到命令提示符,仿佛什么也没有发生似的,其实你已经进入Screen的世界了。当然,也可以在screen命令之后加入你喜欢的参数,使之直接打开你指定的程序,例如:
[root@TS-DEV ~]# screen vi david.txt
screen创建一个执行vi david.txt的单窗口会话,退出vi 将退出该窗口/会话。
查看窗口和窗口名称
打开多个窗口后,可以使用快捷键C-a w列出当前所有窗口。如果使用文本终端,这个列表会列在屏幕左下角,如果使用X环境下的终端模拟器,这个列表会列在标题栏里。窗口列表的样子一般是这样:
0$ bash 1-$ bash 2*$ bash
这个例子中我开启了三个窗口,其中*号表示当前位于窗口2,-号表示上一次切换窗口时位于窗口1。
Screen默认会为窗口命名为编号和窗口中运行程序名的组合,上面的例子中窗口都是默认名字。练习了上面查看窗口的方法,你可能就希望各个窗口可以有不同的名字以方便区分了。可以使用快捷键C-a A来为当前窗口重命名,按下快捷键后,Screen会允许你为当前窗口输入新的名字,回车确认。
会话分离与恢复
你可以不中断screen窗口中程序的运行而暂时断开(detach)screen会话,并在随后时间重新连接(attach)该会话,重新控制各窗口中运行的程序。例如,我们打开一个screen窗口编辑/tmp/david.txt文件:
[root@TS-DEV ~]# screen vi /tmp/david.txt
之后我们想暂时退出做点别的事情,比如出去散散步,那么在screen窗口键入C-a d,Screen会给出detached提示:
暂时中断会话
半个小时之后回来了,找到该screen会话:
[root@TS-DEV ~]# screen -ls
重新连接会话:
[root@TS-DEV ~]# screen -r 12865
一切都在。
当然,如果你在另一台机器上没有分离一个Screen会话,就无从恢复会话了。这时可以使用下面命令强制将这个会话从它所在的终端分离,转移到新的终端上来:
清除dead 会话
如果由于某种原因其中一个会话死掉了(例如人为杀掉该会话),这时screen -list会显示该会话为dead状态。使用screen -wipe命令清除该会话:
关闭或杀死一个Screen会话
正常情况下,当你退出一个窗口中最后一个程序(通常是bash)后,这个窗口就关闭了。另一个关闭窗口的方法是使用ctrl+a 键,然后按下k键,最后当提示你是否要杀死这个会话时按下y键,这个快捷键会杀死当前的窗口,同时也将杀死这个窗口中正在运行的进程。
如果一个Screen会话中最后一个窗口被关闭了,那么整个Screen会话也就退出了,screen进程会被终止。
除了依次退出/杀死当前Screen会话中所有窗口这种方法之外,还可以使用快捷键C-a :,然后输入quit命令退出Screen会话。需要注意的是,这样退出会杀死所有窗口并退出其中运行的所有程序。其实C-a :这个快捷键允许用户直接输入的命令有很多,包括分屏可以输入split等,这也是实现Screen功能的一个途径,不过个人认为还是快捷键比较方便些。
此外,这里再介绍另外一种快速杀死一个Screen会话的命令:
[root@TS-DEV ~]# screen -ls #列出存在的会话
[root@TS-DEV ~]# screen -XS "会话id或者名称" quit
示例:
[root@TS-DEV ~]# screen -ls
There are screens on:
11235.test (01/25/2021 03:35:31 PM) (Detached)
1 Sockets in /run/screen/S-root.
[root@TS-DEV ~]# screen -XS 11235 quit
#或者
[root@TS-DEV ~]# screen -XS test quit
screen 高级应用
会话共享
还有一种比较好玩的会话恢复,可以实现会话共享。假设你在和朋友在不同地点以相同用户登录一台机器,然后你创建一个screen会话,你朋友可以在他的终端上命令:
[root@TS-DEV ~]# screen -x
这个命令会将你朋友的终端Attach到你的Screen会话上,并且你的终端不会被Detach。这样你就可以和朋友共享同一个会话了,如果你们当前又处于同一个窗口,那就相当于坐在同一个显示器前面,你的操作会同步演示给你朋友,你朋友的操作也会同步演示给你。当然,如果你们切换到这个会话的不同窗口中去,那还是可以分别进行不同的操作的。
会话锁定与解锁
Screen允许使用快捷键C-a s锁定会话。锁定以后,再进行任何输入屏幕都不会再有反应了。但是要注意虽然屏幕上看不到反应,但你的输入都会被Screen中的进程接收到。快捷键C-a q可以解锁一个会话。
也可以使用C-a x锁定会话,不同的是这样锁定之后,会话会被Screen所属用户的密码保护,需要输入密码才能继续访问这个会话。
发送命令到screen会话
在Screen会话之外,可以通过screen命令操作一个Screen会话,这也为使用Screen作为脚本程序增加了便利。关于Screen在脚本中的应用超出了入门的范围,这里只看一个例子,体会一下在会话之外对Screen的操作:
[root@TS-DEV ~]# screen -S sandy -X screen ping www.baidu.com
这个命令在一个叫做sandy的screen会话中创建一个新窗口,并在其中运行ping命令。
屏幕分割
现在显示器那么大,将一个屏幕分割成不同区域显示不同的Screen窗口显然是个很酷的事情。可以使用快捷键C-a S将显示器水平分割,Screen 4.00.03版本以后,也支持垂直分屏,快捷键是C-a |。分屏以后,可以使用C-a 在各个区块间切换,每一区块上都可以创建窗口并在其中运行进程。
可以用C-a X快捷键关闭当前焦点所在的屏幕区块,也可以用C-a Q关闭除当前区块之外其他的所有区块。关闭的区块中的窗口并不会关闭,还可以通过窗口切换找到它。
C/P模式和操作
screen的另一个很强大的功能就是可以在不同窗口之间进行复制粘贴了。使用快捷键C-a 或者C-a [可以进入copy/paste模式,这个模式下可以像在vi中一样移动光标,并可以使用空格键设置标记。其实在这个模式下有很多类似vi的操作,譬如使用/进行搜索,使用y快速标记一行,使用w快速标记一个单词等。关于C/P模式下的高级操作,其文档的这一部分有比较详细的说明。
一般情况下,可以移动光标到指定位置,按下空格设置一个开头标记,然后
hexdump
显示文件十六进制格式
补充说明
hexdump命令 一般用来查看“二进制”文件的十六进制编码,但实际上它能查看任何文件,而不只限于二进制文件。
语法
hexdump [选项] [文件]...
选项
-n length 只格式化输入文件的前length个字节。
-C 输出规范的十六进制和ASCII码。
-b 单字节八进制显示。
-c 单字节字符显示。
-d 双字节十进制显示。
-o 双字节八进制显示。
-x 双字节十六进制显示。
-s 从偏移量开始输出。
-e 指定格式字符串,格式字符串包含在一对单引号中,格式字符串形如:'a/b "format1" "format2"'。
每个格式字符串由三部分组成,每个由空格分隔,第一个形如a/b,b表示对每b个输入字节应用format1格式,a表示对每a个输入字节应用format2格式,一般a>b,且b只能为1,2,4,另外a可以省略,省略则a=1。format1和format2中可以使用类似printf的格式字符串,如:
%02d:两位十进制
%03x:三位十六进制
%02o:两位八进制
%c:单个字符等
还有一些特殊的用法:
%_ad:标记下一个输出字节的序号,用十进制表示。
%_ax:标记下一个输出字节的序号,用十六进制表示。
%_ao:标记下一个输出字节的序号,用八进制表示。
%_p:对不能以常规字符显示的用 . 代替。
同一行如果要显示多个格式字符串,则可以跟多个-e选项。
实例
hexdump -e '16/1 "%02X " " | "' -e '16/1 "%_p" "\n"' test
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | ................
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F | ................
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F | !"#$%&'()*+,-./
范例二
[12:32:40 root@localhost ~][#nano f1.txt
[12:33:01 root@localhost ~][#cat f1.txt
abvfgsdfndf
drgsdrh
[12:33:10 root@localhost ~][#hexdump -C f1.txt
00000000 61 62 76 66 67 73 64 66 6e 64 66 0a 64 72 67 73 |abvfgsdfndf.drgs|
00000010 64 72 68 0a 0a |drh..|
00000015
touch
创建新的空文件
补充说明
touch命令 有两个功能:一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;二是用来创建新的空文件。
语法
touch(选项)(参数)
选项
-a:或--time=atime或--time=access或--time=use 只更改存取时间;
-c:或--no-create 不建立任何文件;
-d:<时间日期> 使用指定的日期时间,而非现在的时间;
-f:此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题;
-m:或--time=mtime或--time=modify 只更该变动时间;
-r:<参考文件或目录> 把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同;
-t:<日期时间> 使用指定的日期时间,而非现在的时间;
--help:在线帮助;
--version:显示版本信息。
参数
文件:指定要设置时间属性的文件列表。
实例
touch ex2
在当前目录下建立一个空文件ex2,然后,利用ls -l命令可以发现文件ex2的大小为0,表示它是空文件。
调用命令行历史
#重复前一个命令方法
重复前一个命令使用上方向键,并回车执行
按 !! 并回车执行
输入!-1 并回车执行
按 Ctrl+p 并回车执行
!:0 执行前一条命令(去除参数)
!n 执行history命令输出对应序号n的命令
!-n 执行history历史中倒数第n个命令
!string 重复前一个以“string”开头的命令
!?string 重复前一个包含string的命令
!string:p 仅打印命令历史,而不执行
!$:p 打印输出 !$ (上一条命令的最后一个参数)的内容
!*:p 打印输出 !*(上一条命令的所有参数)的内容
^string 删除上一条命令中的第一个string
^string1^string2 将上一条命令中的第一个string1替换为string2
!:gs/string1/string2 将上一条命令中所有的string1都替换为 string2
使用up(向上)和down(向下)键来上下浏览从前输入的命令
ctrl-r来在命令历史中搜索命令
(reverse-i-search)`’:
Ctrl+g:从历史搜索模式退出
#要重新调用前一个命令中最后一个参数
!$ 表示前一个命令中最后一个参数
Esc, . 点击Esc键后松开,然后点击 . 键
Alt+ . 按住Alt键的同时点击 . 键
command !^ 利用上一个命令的第一个参数做command的参数
command !$ 利用上一个命令的最后一个参数做command的参数
command !* 利用上一个命令的全部参数做command的参数
command !:n 利用上一个命令的第n个参数做command的参数
command !n:^ 调用第n条命令的第一个参数
command !n:$ 调用第n条命令的最后一个参数
command !n:m 调用第n条命令的第m个参数
command !n:* 调用第n条命令的所有参数
command !string:^ 从命令历史中搜索以 string 开头的命令,并获取它的第一个参数
command !string:$ 从命令历史中搜索以 string 开头的命令,并获取它的最后一个参数
command !string:n 从命令历史中搜索以 string 开头的命令,并获取它的第n个参数
command !string:* 从命令历史中搜索以 string 开头的命令,并获取它的所有参数
范例:
bash****的快捷键
Ctrl + l 清屏,相当于clear命令
Ctrl + o 执行当前命令,并重新显示本命令
Ctrl + s 阻止屏幕输出,锁定
Ctrl + q 允许屏幕输出,解锁
Ctrl + c 终止命令
Ctrl + z 挂起命令
Ctrl + a 光标移到命令行首,相当于Home
Ctrl + e 光标移到命令行尾,相当于End
Ctrl + f 光标向右移动一个字符
Ctrl + b 光标向左移动一个字符
Ctrl + xx 光标在命令行首和光标之间移动
ctrl+ > 光标向右移动一个单词尾,相当于 Alt + f
ctrl+ < 光标向左移动一个单词首,相当于 Alt + b
Ctrl + u 从光标处删除至命令行首
Ctrl + k 从光标处删除至命令行尾
Alt + r 删除当前整行
Ctrl + w 从光标处向左删除至单词首
Alt + d 从光标处向右删除至单词尾
Alt + Backspace 删除左边单词
Ctrl + d 删除光标处的一个字符
Ctrl + h 删除光标前的一个字符
Ctrl + y 将删除的字符粘贴至光标后
Alt + c 从光标处开始向右更改为首字母大写的单词
Alt + u 从光标处开始,将右边一个单词更改为大写
Alt + l 从光标处开始,将右边一个单词更改为小写
Ctrl + t 交换光标处和之前的字符位置
Alt + t 交换光标处和之前的单词位置
Alt + # 提示输入指定字符后,重复显示该字符#次
注意:Alt 组合快捷键经常和其它软件冲突
范例:xshell中启动 alt 键
$$
$$
查看系统的版本
cat /etc/os-release
范例:
root@ubuntu2204:~# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.4 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
[12:05:17 root@localhost ~][#cat /etc/os-release
NAME="Rocky Linux"
VERSION="9.3 (Blue Onyx)"
ID="rocky"
ID_LIKE="rhel centos fedora"
VERSION_ID="9.3"
PLATFORM_ID="platform:el9"
PRETTY_NAME="Rocky Linux 9.3 (Blue Onyx)"
ANSI_COLOR="0;32"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:rocky:rocky:9::baseos"
HOME_URL="https://rockylinux.org/"
BUG_REPORT_URL="https://bugs.rockylinux.org/"
SUPPORT_END="2032-05-31"
ROCKY_SUPPORT_PRODUCT="Rocky-Linux-9"
ROCKY_SUPPORT_PRODUCT_VERSION="9.3"
REDHAT_SUPPORT_PRODUCT="Rocky Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="9.3"
范例:比较 “ ” ,‘ ’, ``三者区别
[root@centos8 ~]#echo "echo $HOSTNAME"
echo centos8.localdomain
[root@centos8 ~]#echo 'echo $HOSTNAME'
echo $HOSTNAME
[root@centos8 ~]#echo `echo $HOSTNAME`
centos8.localdomain
\#结论:
单引号:强引用,六亲不认,变量和命令都不识别,都当成了普通的字符串,"最傻"
双引号:弱引用,不能识别命令,可以识别变量,"半傻不精"
反向单引号:里面的内容必须是能执行的命令并且有输出信息,变量和命令都识别,并且会将反向单引号的内
容当成命令进行执行后,再交给调用反向单引号的命令继续,"最聪明“
tab 键补全
tab 键可以实现命令及路径等补全,提高输入效率,避免出错
范例:
[12:50:22 root@localhost ~][#host host hostid hostname hostnamectl [12:50:22 root@localhost ~][#hostname
hostname hostnamectl
[12:50:22 root@localhost ~][#hostname hostname hostnamectl [12:50:22 root@localhost ~][#hostnamectl
chassis deployment hostname icon-name location status
[12:50:22 root@localhost ~][#hostnamectl
路径补全
把用户给出的字符串当做路径开头,并在其指定上级目录下搜索以指定的字符串开头的文件名
如果惟一:则直接补全
否则:再次Tab给出列表
双击Tab键
command 2Tab 所有子命令或文件补全
string2Tab 以string开头命令
/2Tab 显示所有根目录下一级目录,包括隐藏目录
./2Tab 当前目录下子目录,包括隐藏目录
*2Tab 当前目录下子目录,不包括隐藏目录
~2Tab 所有用户列表
$2Tab 所有变量
@2Tab /etc/hosts记录 (centos7 不支持)
=2Tab 相当于ls –A (centos7不支持)
安装区别系统开头
Ubuntu----apt -y install 软件名
centos-----yum -y install 软件名
文件管理
常见的文件系统目录功能
/boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录
/bin:所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
/sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序
/lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
/lib64:专用于x86_64系统上的辅助共享库文件存放位置
/etc:配置文件目录
/home/USERNAME:普通用户家目录
/root:管理员的家目录
/media:便携式移动设备挂载点
/mnt:临时文件系统挂载点
/dev:设备文件及特殊文件存储位置
b: block device,随机访问
c: character device,线性访问
/opt:第三方应用程序的安装位置
/srv:系统上运行的服务用到的数据
/tmp:临时文件存储位置
/usr: universal shared, read-only data
bin: 保证系统拥有完整功能而提供的应用程序
sbin:
lib:32位使用
lib64:只存在64位系统
include: C程序的头文件(header files)
share:结构化独立的数据,例如doc, man等
local:第三方应用程序的安装位置
bin, sbin, lib, lib64, etc, share
/var: variable data files
cache: 应用程序缓存数据目录
lib: 应用程序状态信息数据
local:专用于为/usr/local下的应用程序存储可变数据
lock: 锁文件
log: 日志目录及文件
opt: 专用于为/opt下的应用程序存储可变数据
run: 运行中的进程相关数据,通常用于存储进程pid文件
spool: 应用程序数据池
tmp: 保存系统两次重启之间产生的临时数据
/proc: 用于输出内核与进程信息相关的虚拟文件系统
/sys:用于输出当前系统上硬件设备相关信息虚拟文件系统
/selinux: security enhanced Linux,selinux相关的安全策略等信息的存储位置
应用程序的组成部分
二进制程序:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin
库文件:/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64
配置文件:/etc, /etc/DIRECTORY, /usr/local/etc
帮助文件:/usr/share/man, /usr/share/doc, /usr/local/share/man,
/usr/local/share/doc
重点
命令
who
whoami
who am i
tty
hostname
hostnamectl set-hostname xxx
timedatectl set-timezone Asia/Shanghai
date
ps
ip a
nano
vi
echo $PS1
一个命令CMD1想调用另一个命令CMD2的执行结果,就需要将CMD2放在反向引号中 `CMD2`
范例:
[12:48:09 root@localhost ~][#touch `uname -r`.log
[12:49:56 root@localhost ~][#ls
2024-02-23.log 5.14.0-362.8.1.el9_3.x86_64.log anaconda-ks.cfg a.txt bashrc f1.txt
[12:49:58 root@localhost ~][#rm 5.14.0-362.8.1.el9_3.x86_64.log
rm: remove regular empty file '5.14.0-362.8.1.el9_3.x86_64.log'? y
[12:50:20 root@localhost ~][#ls
2024-02-23.log anaconda-ks.cfg a.txt bashrc f1.txt
touch date +"\%F".log
这个命令在Bash shell中是正确的,它会根据当前系统日期创建一个日志文件,并将文件名设置为形如 `2023-02-24.log` 的格式。这里的 `\%F` 是对特殊字符 `%` 进行转义,确保 `date` 命令正确解析 `%F` 作为日期格式而非shell的特殊含义。
执行此命令后,将会生成一个以当前日期命名的日志文件,例如:
```bash
touch "$(date +"\%F").log"
```
运行上述命令后,如果今天是2023年2月24日,则会在当前目录下创建一个名为 `2023-02-24.log` 的空文件。
命令补全
CentOS/Rocky
yum -y install bash-completio
Ubuntu
apt -y install bash-completion
问题
安装screen遇到了问题
无法安装
在CentOS或RHEL系统中,如果你使用的是较新版本(如CentOS 8/RHEL 8及更高版本),默认的软件包管理器已经从yum
变更为dnf
。因此,你需要用dnf
命令来安装screen
工具:
sudo dnf install screen -y
若你确实正在使用旧版的基于yum
的系统,并且出现上述错误信息,可能是因为你的系统仓库配置不正确或者screen
软件包未包含在当前的系统仓库中。为了解决这个问题,请尝试以下步骤:
-
更新你的仓库缓存:
sudo yum makecache fast
-
如果是EPEL(Extra Packages for Enterprise Linux)仓库中的软件包,在安装
screen
之前需要先安装EPEL仓库(对于支持EPEL的系统):sudo yum install epel-release -y
-
安装完成后再次尝试安装
screen
:sudo yum install screen -y
如果问题仍然存在,确认你的系统是否支持screen
软件包,或者检查是否有其他可用的第三方仓库可以提供该软件包。