目录
(4)bash shell (目前Linux标准的shell)
一、用户类型
1. root 用户:一个特殊的管理账户,也称为超级管理员用户;root已接近完整的系统控制,对系统损害几乎有无限的能力。除非必要,不要登录为root。
2.普通(非特权)用户:权限有限,造成的损害能力比较有限。
PS->Windows中超级用户是administrator,Linux中则是root。
二、终端
终端是早期与计算机系统相连的输入输出设备,用于显示主机输出并接收用户输入,通常为独立物理设备(如显示器+键盘、打印机+打字机)。随着技术发展,终端功能被键盘和显示器整合,不再依赖独立物理设备。现在,Linux 系统中,console(控制台)和 tty(终端)已虚拟化为设备文件(“一切皆文件”),键盘和显示器在概念上可同时作为 console 和 tty 使用,具体角色取决于当前操作场景。
tty 源于电传打字机(Teletypes/teletypewriters),早期通过串行线实现信息输入输出,后被键盘和显示器取代,名称沿用至今。
SUM->终端从独立物理设备演变为虚拟化概念,tty 和 console 的角色由设备文件抽象实现。

(1)终端类型
控制台终端:/dev/console
串行终端:/dev/ttyS#
虚拟终端:tty:teletypewriters,/dev/tty#,tty可有n个,Ctrl+Alt+F#
伪终端:pty:pseudo-tty ,/dev/pts/# 如:SSH远程连接
图形终端:startx, xwindows
(2)查看当前的终端设备
huhao@ubuntu:~$ tty
/dev/pts/1
三、交互式接口
交互式接口:启动终端后,在终端设备附加一个交互式应用程序。
(1)类型
GUI: Graphic User Interface X protocol, window manager, desktop - 图形界面接口
GNOME (C, 图形库gtk)、KDE (C++,图形库qt)、XFCE (轻量级桌面)
CLI: Command Line Interface - 命令行接口
shell 程序
(2)shell
Shell 是Linux系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行 。
shell也被称为Linux的命令解释器,Shell 本身是一个程序。将用户输入的命令行拆解为”命令名“与”参数“。接着,根据命令名找到对应要执行的程序,对被执行的程序进行初始化,然后将刚才解析出来的参数传给该程序并执行。
shell是一种高级程序设计语言,提供了变量,函数,条件判断,循环等开发语言的功能。
由于Shell本身是个程序,所以它可以被任何用户自己开发的各种Shell所代替。
(3)各种shell
sh:Steve Bourne
bash:Bourne-Again Shell,GPL,CentOS 和 Ubuntu 默认使用
csh:c shell , C 语言风格
tcsh
ksh :Korn Shell, AIX 默认 shell
zsh: MacOS默认shell
(4)bash shell (目前Linux标准的shell)
① 显示当前使用的shell
huhao@ubuntu:~$ echo ${SHELL}
/bin/bash
huhao@ubuntu:~$ echo $SHELL
/bin/bash
② 显示当前系统使用的所有shell
huhao@ubuntu:~$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/usr/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/usr/bin/dash
/usr/bin/screen
/usr/bin/tmux
四、设置主机名
#查看主机名
hostname
#临时生效
hostname NAME
#持久生效
hostnamectl set-hostname NAME
注意->
1.修改hostname需要root权限
2.主机名不支持下划线,但支持横线,可使用字母,横线or数字组合
3.有些软件对主机名有特殊要求
4.一般按照组织的要求设置主机名,通常有一定意义的
5.错误的主机名可能会导致某些服务无法启动
五、命令提示符 prompt
登录Linux系统,默认的系统命令提示符毫无个性,无法明显辨别生产和测试环境,而导致误操作。可以通过修改PS1变量实现个性的提示符格式,避免错误。
# 管理员
$ 普通用户
#Rocky提示符
[root@rocky130 ~]#
#Ubuntu默认提示符
huhao@ubuntu:~$
#PS1是Linux系统中用于定义主提示符的环境变量
[root@rocky130 ~]# echo $PS1
[\u@\h \W]\$
(1)PS1变量中的常用选项
⚪ \d #日期,格式为"星期 月 日"
⚪ \H #完整的主机名。如默认主机名"localhost.localdomain"。
⚪ \h #简写的主机名。如默认主机名"localhost"。
⚪ \t #24小时制时间,格式为"HH:MM:SS"。
⚪ \T #12小时制时间,格式为"HH:MM:SS"。
⚪ \A #24小时制时间,格式为"HH:MM"。
⚪ \@ #12小时制时间,格式为"HH:MM am/pm"。
⚪ \u #当前用户名。
⚪ \v #Bash版本信息。
⚪ \w #当前所在目录的完整名称。
⚪ \W #当前所在目录的最后一个目录。
⚪ \# #执行的第几条命令。
⚪ \$ #提示符。如果是 root 用户,则会显示提示符为"#";如果是普通用户,则会显示提示符为"$"。
(2)个性设置
1.PS1中的颜色部分
\033[ #开始位
\033[0m #结束位
#\033 可换成 \e
2.颜色设置
\e[ 颜色m 内容 \e[0m
#颜色后面要用m结束,多个颜色用 ; 分隔,只要一个m
\e[ 颜色;颜色m 内容 \e[0m
① 各颜色表示方式
② 字体、背景颜色设置
#字体
\e[30m黑色\e[0m
...
\e[37m白色\e[0m
#背景
\e[40m黑色\e[0m
...
\e[47m白色\e[0m
#字体背景组合 字体与背景颜色不分先后,因为值不一样
\e[30;41m黑字红底\e[0m
\e[41;30m黑字红底\e[0m
③ 特殊效果
#PS1中的值要单引号引用,如果是双引号,则某些替换符不会被解析
PS1='\e[31m[\u@\h \W]\$\e[0m'
#但需要注意的是 以上均为临时设置
#如果要永久保存 则要写文件
echo "PS1='\e[33m[\u@\h \W]\$\e[0m'" > /etc/profile.d/env.sh
#设置或修改环境变量,使其在当前会话中生效,而无需重新启动shell或登录
source /etc/profile.d/env.sh #执行目录下脚本
#Ubuntu中的PS1
root@ubuntu:~# echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$
#${debian_chroot:+($debian_chroot)} 表示给变量赋值,如果存在
/etc/debian_chroot文件,则该文件中内容会被赋值给变量$debian_chroot
#文件不存在
root@ubuntu:~# ls /etc/debian_chroot
ls: cannot access '/etc/debian_chroot': No such file or directory
#变量为空
root@ubuntu:~# echo $debian_chroot
#设置文件内容
root@ubuntu:~# echo "test" > /etc/debian_chroot
#文件存在
root@ubuntu:~# ls /etc/debian_chroot
/etc/debian_chroot
#查看文件内容
root@ubuntu:~# cat /etc/debian_chroot
test
#重新登录,提示符多左边多了内容,变量也有
(test)root@ubuntu:~# echo $debian_chroot
test
在Ubuntu中,设置PS1,如果要对所有普通用户生效,将PS1定义写在/usr/share/bash-completion/bash_completion最下面,如果需要对每个用户单独定义,写在用户家目录的.bashrc文件最下面。
root@ubuntu:~# nano .bashrc
#在.bashrc文件最下面定义
PS1='\[\e[1;35m\][\u@\h \W]\$\[\e[0m\] '
###
echo "PS1='\[\e[1;35m\][\u@\h \W]\\$\[\e[0m\]'" >> .bashrc
tail -1 .bashrc
六、执行命令
(1)执行命令过程
输入命令后回车,提醒shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来。
(2)shell中可执行的两类命令
内部命令:由shell自带的,而且通过某命令形式提供,用户登录后自动加载并常驻内存中。
外部命令:在文件系统路径下有对应的可执行程序文件,当执行命令时才从磁盘加载至内存中,执行完毕后从内存中删除。
type ls #区分是内部命令还是外部命令
type -t echo #简写,只给出类型,builtin|alias|file|keyword
type -a echo #列出所有,有可能是内部命令,也同时会是外部命令
bash -c help #查看bash中所有内容(不仅仅是内部命令)
help #查看bash中所有内容(不仅仅是内部命令)
enable #查看bash中所有内置命令
help echo #查看内部命令帮助
ANS->有内部命令,又有外部命令,因为不是所有主机都使用标准shell(针对某个命令也不是所有的shell都有),所以常用内部命令会有一个外部命令的备份,防止内部命令执行失败。在命令执行时,shell 先判断是否是内部命令,如果是,则执行内部命令,如果不是,则去特定目录下寻找外部命令。
bash shell 自身就是一个程序,里面有很多小工具,有用户通过终端连接主机,则该终端就有一个bash在后台运行着。
①内部命令相关
help #查看所有内部命令及帮助
enable #查看所有启用的内部命令
enable cmd #启用 cmd 命令
enable -n cmd #禁用内部 cmd 命令
enable -n #查看所有禁用的内部命令
②执行外部命令
#查看外部命令路径
which -a|--skip-alias
whereis
#Rocky中
[root@rocky130 ~]$which ls
alias ls='ls --color=auto'
/usr/bin/ls
#Ubuntu中 - 不显示别名
[root@ubuntu ~]# which ls
/usr/bin/ls
#跳过别名
[root@rocky130 ~]$which --skip-alias ls
/usr/bin/ls
#-a 表示在所有路径中查找匹配的命名,使用该命令时匹配第一个找到的
[root@rocky130 ~]$which -a echo
/usr/bin/echo
[root@ubuntu ~]# which -a echo
/usr/bin/echo
/bin/echo
#因此找外部命令只会在特定的地方去找
#查看path
[root@ubuntu ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
#注意:只会匹配第一个匹配项
#当执行某条命令 我们知道先找内部再找外部命令 内部没有 外部命令去哪找?-> 磁盘
#如果磁盘足够大呢 一个一个去找?-->外部命令只会在特定的地方去找
[root@ubuntu ~]# which ls
/usr/bin/ls
[root@ubuntu ~]# cp /usr/bin/ls /usr/bin/ls22
[root@ubuntu ~]# ls22
[root@ubuntu ~]# type ls22
ls22 is hashed (/usr/bin/ls22)
[root@ubuntu ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
[root@ubuntu ~]# which ls22
/usr/bin/ls22
[root@ubuntu ~]# ls22
[root@ubuntu ~]# mv /usr/bin/ls22 /tmp/ #剪切原来路径到/tmp/
[root@ubuntu ~]# ll /usr/bin/ls22
ls: cannot access '/usr/bin/ls22': No such file or directory
[root@ubuntu ~]# ls22 #PATH下目录找不到命令路径
-bash: /usr/bin/ls22: No such file or directory
[root@ubuntu ~]# /tmp/ls22
[root@ubuntu ~]#
SUM->执行命令:首先去内部命令找,没找到,则硬盘上找,但是只找特定目录($PATH),从第一个特定目录往后找,找到第一个即可。从特定目录找到后,则可以执行;第二次执行,不用重复操作——hash会将执行过的命令的路径保存下来,加快执行过程。
即是内部命令,又是外部命令,这种情况,外部命令是内部命令的备份。
③外部命令搜索路径
(3)Hash缓存表
系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在将执行之,如果不存在,将会去PATH路径下寻找,利用hash缓存表可大大提高命令的调用速率。
hash 只对当前用户的当前终端进程有效,是一组临时数据;切换用户后无效;退出重新登录后会被重置。
#hash命令常见用法
hash #显示当前终端进程中的hash 缓存
hash -l #显示创建此条hash的命令,可作为输入使用
hash -p path name #手动创建hash
hash -t name #输出路径
hash -d name #删除指定hash
hash -r #清空所有hash
#hash
[root@ubuntu ~]# hash
hits command
1 /usr/bin/mv
1 /usr/bin/ls33
2 /usr/local/sbin/ls22
#hash -l
[root@ubuntu ~]# hash -l
builtin hash -p /usr/bin/mv mv
builtin hash -p /usr/bin/ls33 ls33
builtin hash -p /usr/local/sbin/ls22 ls22
#手动创建hash - abcd
[root@ubuntu ~]# hash -p /usr/bin/ls33 abcd
[root@ubuntu ~]# hash
hits command
1 /usr/bin/mv
2 /usr/bin/ls33
2 /usr/local/sbin/ls22
0 /usr/bin/ls33
[root@ubuntu ~]# abcd
[root@ubuntu ~]# hash
hits command
1 /usr/bin/mv
2 /usr/bin/ls33
2 /usr/local/sbin/ls22
1 /usr/bin/ls33
#输出路径
[root@ubuntu ~]# hash -t abcd
/usr/bin/ls33
#删除指定hash
[root@ubuntu ~]# hash -d abcd
[root@ubuntu ~]# abcd
abcd: command not found
#清空所有hash
[root@ubuntu ~]# hash -r
[root@ubuntu ~]# hash
hash: hash table empty
(4)命令别名
对于经常执行的较长的命令,可以将其定义成较短的别名,方便执行。在命令行中定义的别名,仅对当前shell进程有效,如里需要永久有效,则要写配置文件:
- 仅对当前用户:~/.bashrc
- 对所有用户有效:/etc/bashrc, /etc/bash.bashrc(ubuntu)
alias #显示当前shell进程所有可用的命令别名
alias name #查看指定别名
alias NAME='VALUE' #定义别名NAME,其相当于执行命令VALUE
unalias #撤消别名
#列出所有别名
[root@rocky130 ~]$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'
#查看指定别名
[root@rocky130 ~]$alias rm
alias rm='rm -i'
#定义别名
[root@rocky130 ~]$alias cdnet='cd /etc/sysconfig/network-scripts/'
[root@rocky130 ~]$alias
alias cdnet='cd /etc/sysconfig/network-scripts/'
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'
#查看别名
[root@rocky130 ~]$alias cdnet
alias cdnet='cd /etc/sysconfig/network-scripts/'
#查看当前目录
[root@rocky130 ~]$pwd
/root
#调用cdnet并执行
[root@rocky130 ~]$cdnet
[root@rocky130 network-scripts]$pwd
/etc/sysconfig/network-scripts
#撤销别名
[root@rocky130 network-scripts]$unalias cdnet
[root@rocky130 network-scripts]$cdnet
bash: cdnet: 未找到命令...
[root@rocky130 network-scripts]$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 -a
编辑配置文件新加的别名不会立即生效,要退出重新登录或在当前进程中重新读取配置文件。
#如果别名同原命令同名,如果要执行原命令,可使用
\ALIASNAME
“ALIASNAME”
‘ALIASNAME’
command ALIASNAME
/path/commmand #只适用于外部命令
(5)命令优先级
别名 ---> 内部命令 --->hash--->外部命令
SUM->先找别名,别名里面也是命令,根据别名里的命令,先确定是否是内部命令,如果不是,找hash,hash没有,根据path找磁盘,找到执行,再放回hash,找不到,报错。
七、命令格式
COMMAND [OPTIONS...] [ARGUMENTS...]
COMMAND [COMMAND] [COMMAND] ....
COMMAND #命令
OPTIONS #选项,用于启用或关闭命令的某个或某些功能
ARGUMENTS #参数,命令的作用对象,比如:文件名,用户名等
[] #表示里面的内容是可选项,也就是说,一条命令,选项和参数是可以都没有的
... #表示可以有多个值,也就是说,一条命令,可以有多个选项,或多个参数
选项有多种风格:
-短选项:UNIX 风格选项,-c 例如:-l, -h
-长选项:GNU风格选项,--word 例如:--all, --human
-BSD风格选项: 一个字母,例如:a,使用相对较少
注意:
-多个选项以及多参数和命令之间使用空白字符分隔
#ls -al(短选项可以连写,长选项不可以)
#ls -a -l
#- 识别短选项 --识别长选项(单词)
-取消和结束命令执行:Ctrl+c,Ctrl+d
-多个命令可以用 ";" 符号分开
#ls -a -l;echo 123
-一个命令可以用\分成多行
[root@rocky130 ~]$cd \
> /etc\
> /opt
[root@rocky130 ~]$cd /etc/opt
八、常见命令
(1)查看硬件信息
① 查看CPU
lscpu
cat /proc/cpuinfo
② 查看内存大小
free
cat /proc/meminfo
#补充
#以人类可读方式的格式
free -h
free --human
#1秒刷新一次数据(-s/--seconds x :持续刷新输出 表示每x秒刷新一次)
free -hs 1
#刷新2次数据后退出(-c/--count x :刷新x次退出)
free -hc 2
##########
total #系统总的可用物理内存大小
used #已被使用的物理内存大小
free #还有多少物理内存可用
shared #被共享使用的物理内存大小
buff/cache #被 buffer 和 cache 使用的物理内存大小
available #还可以被 应用程序 使用的物理内存大小
##########
#free 是真正尚未被使用的物理内存数量。
#available 是应用程序认为可用内存数量,available = free + buffer + cache (大概的计算方法)
③ 查看硬盘和分区情况
lsblk
cat /proc/partitions
#dm是lvm设备
④ 查看系统版本信息
#查看系统架构
[root@rocky130 opt]$arch
x86_64
#查看内核版本
[root@rocky130 opt]$uname -r
5.14.0-503.14.1.el9_5.x86_64
#查看操作系统发行版本
-centos
[root@rocky130 opt]$cat /etc/os-release
NAME="Rocky Linux"
VERSION="9.5 (Blue Onyx)"
ID="rocky"
ID_LIKE="rhel centos fedora"
VERSION_ID="9.5"
PLATFORM_ID="platform:el9"
PRETTY_NAME="Rocky Linux 9.5 (Blue Onyx)"
ANSI_COLOR="0;32"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:rocky:rocky:9::baseos"
HOME_URL="https://rockylinux.org/"
VENDOR_NAME="RESF"
VENDOR_URL="https://resf.org/"
BUG_REPORT_URL="https://bugs.rockylinux.org/"
SUPPORT_END="2032-05-31"
ROCKY_SUPPORT_PRODUCT="Rocky-Linux-9"
ROCKY_SUPPORT_PRODUCT_VERSION="9.5"
REDHAT_SUPPORT_PRODUCT="Rocky Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="9.5"
[root@rocky130 opt]$cat /etc/redhat-release
Rocky Linux release 9.5 (Blue Onyx)
-ubuntu
[root@ubuntu ~]# cat /etc/os-release
PRETTY_NAME="Ubuntu 25.04"
NAME="Ubuntu"
VERSION_ID="25.04"
VERSION="25.04 (Plucky Puffin)"
VERSION_CODENAME=plucky
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=plucky
LOGO=ubuntu-logo
[root@ubuntu ~]# cat /etc/issue
Ubuntu 25.04 \n \l
[root@ubuntu ~]# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 25.04
Release: 25.04
Codename: plucky
(2)日期和时间
Linux的两种时钟->系统时钟:由Linux内核通过CPU的工作频率进行的、硬件时钟:主板
① date显示和设置系统时间
Usage: date [OPTION]... [+FORMAT]
or: date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
[root@ubuntu ~]# date
Wed May 28 10:37:06 AM UTC 2025
#显示时区信息
[root@ubuntu ~]# date -R
Wed, 28 May 2025 10:38:32 +0000
#时间戳 1970-1-1 0:0:0
[root@ubuntu ~]# date +%s
1748428722
[root@ubuntu ~]# date +%M #当前时间分钟部分
#格式化
[root@ubuntu ~]# date +"%Y/%m/%d"
2025/05/28
[root@ubuntu ~]# date +"%Y/%m/%d %T"
2025/05/28 10:48:06
#date -d @<timestamp>:将指定的 Unix 时间戳转换为可读的日期时间格式 <timestamp>时间戳
#指定日期转换为 Unix 时间戳
[root@ubuntu ~]# date -d "2023-05-08" +%s
1683504000
[root@ubuntu ~]# date -d "2023/05/08" +%s
1683504000
② clock、hwclock显示硬件时钟
clock [function] [option...]
hwclock [function] [option...]
#常用选项
-s|--hctosys #以硬件时钟为准,校正系统时钟
-w|--systohc #以系统时钟为准,校正硬件时钟
[root@centos8 ~]# ll /usr/sbin/clock
lrwxrwxrwx. 1 root root 7 Oct 14 2021 /usr/sbin/clock -> hwclock
#对钟
clock -s
[root@ubuntu2204 ~]# ll /usr/sbin/clock
ls: cannot access '/usr/sbin/clock': No such file or directory
[root@ubuntu2204 ~]# ll /usr/sbin/hwclock
-rwxr-xr-x 1 root root 51704 Feb 21 2022 /usr/sbin/hwclock*
③ 时区
/etc/localtime
PS:CST---中国标准时间->UTC+8、UTC---全球统一时间标准
#设置时区
timedatectl set-timezone
[root@ubuntu ~]# timedatectl set-timezone Asia/Shanghai
[root@ubuntu ~]# timedatectl status
Local time: Wed 2025-05-28 19:12:03…
Universal time: Wed 2025-05-28 11:12:03…
RTC time: Wed 2025-05-28 11:12:03
Time zone: Asia/Shanghai (CST, +08…
System clock synchroniz… yes
NTP service: active
RTC in local TZ: no
[root@ubuntu ~]# ll /etc/localtime
lrwxrwxrwx 1 root root 35 May 28 19:11 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai
cat /etc/timezone
④ 日历
Usage:
cal [options] [[[day] month] year]
cal [options] <timestamp|monthname>
[root@ubuntu ~]# cal
May 2025
Su Mo Tu We Th Fr Sa
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
(3)关机和重启
普通用户无权执行关机/重启命令,会提示权限不足,因此,关机(shutdown)和重启(reboot)操作通常需要特权(root 权限或 sudo 权限)。
#关机
halt
poweroff
init 0
"""
init本质不是关机or重启,它决定了系统的运行级别
0:关机(halt)
1:单用户模式(救援模式)
2:多用户模式(无网络服务,部分系统已废弃)
3:多用户模式(命令行界面,常用)
4:保留(通常未使用)
5:图形界面模式(X11)
6:重启(reboot)
"""
shutdown -h now #立即关机
#重启
reboot
init 6
shutdown -r now #立即重启
#ctrl+alt+delete
#关机或重启:shutdown
shutdown 程序会广播己登录的用户,被看作是安全的关机命令是一个计划关机任务,可撤销。
shutdown [OPTION]... [TIME] [MESSAGE]
shutdown #一分钟后关机
shutdown +10 #10分钟后关机
shutdown 01:02 #1点过两分关机
shutdown -r|--reboot #一分钟后重启
shutdown -r now #现在重启
shutdown -H|--halt #一分钟后调用halt 关机
shutdown -P|--poweroff #一分钟后调用poweroff 关机
shutdown -c #取消关机计划
(4)用户登录信息查看命令
① whoami
#显示当前用户的用户名
whoami
#显示终端登录的用户的用户名 终端 登录时间 来源IP(以某用户开启的终端)
who am i
② who
#显示当前已登录的用户信息
who [选项]... [ 文件 | 参数1 参数2 ]
who #列出在当前主机上所有登录用户
#列出当前主机上所有用户的空闲时间 . 表示最近一分钟还是活跃状态 old 表
示用户己经空闲超过24小时
who -u | --users
who -s | --short #列出在当前主机上所有登录用户,等同于who
who -q | --count #登录用户统计
who -b | --boot #上次系统启动时间
who -a | --all #多选项组合
who -m #who am i
PS:Linux多用户系统、Windows单用户系统。
③ w
#显示当前所有登录用户的具体信息
w [options]
[root@rocky130 huhao]$w
20:59:37 up 4:58, 4 users, load average: 0.20, 0.06, 0.01 #当前系统时间 开机运行时间 用户数
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 20:13 1.00s 0.14s 0.00s w
huhao tty1 20:53 5:52 0.02s 0.02s -bash
huhao@ubuntu:~$ w
15:59:24 up 28 min, 3 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
huhao tty1 - 15:31 27:48 0.03s 0.03s -bash
huhao 192.168.61.1 15:31 27:49 0.00s 0.07s sshd-session
huhao - 15:31 27:49 0.00s 0.14s /usr/lib/sys
#登录名 终端 来源IP 登录时间 空闲时间 当前终端中所有进程使用cpu的时间,不包括后台作业占用的时
间 当前进程使用的cpu的时间
#load average 表示平均负载,最近一分钟,最近五分钟,最近15分钟
#查看特定用户
w root
(5)文本编辑
⚪nano工具-文本编辑
⚪gedit工具-图形工具
(6)会话管理
命令行交互中,用户通过终端窗口输入命令,形成临时交互的“会话”,其特点是窗口与启动的进程绑定:打开窗口即开始会话,关闭窗口则终止会话及其内部进程(无论是否完成)。例如,SSH 登录远程计算机时,若网络断线导致窗口关闭,原会话及其中运行的命令会彻底终止,无法恢复。
为了解决在传统命令行交互中,窗口关闭导致会话及内部进程终止(如 SSH 断线后任务丢失)这一问题,终端复用器通过将会话与窗口分离,实现窗口关闭时会话继续运行,等到后续需要可重新绑定至其他窗口。终端复用器软件就是会话与窗口的"解绑"工具,将它们彻底分离。
1. 它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
2. 它可以让新窗口"接入"已经存在的会话。
3. 它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
4. 它还支持窗口任意的垂直和水平拆分
类似的终端复用器还有Screen,Tmux
① screen
利用screen可以实现会话管理,如:新建会话,共享会话等。
#另外可以实现多个终端进入同一个会话的功能
screen –S [SESSION] #创建新screen会话
screen –x [SESSION] #加入screen会话
screen -r [SESSION] #恢复某screen会话
screen -ls #显示所有已经打开的screen会话
Ctrl+a,d #剥离当前screen会话
exit #退出并关闭screen会话
#[SESSION]:自定义会话名称
② tmux
Tmux 是一个终端复用器(terminal multiplexer),类似 screen,但是更易用,也更强大。Tmux 就是会话与窗口的"解绑"工具,将它们彻底分离,功能如下:
1.它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
2.它可以让新窗口"接入"已经存在的会话。
3.它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
4.它还支持窗口任意的垂直和水平拆分
启动
[root@ubuntu ~]# tmux
退出
exit
#窗格快捷键
Ctrl+b % #划分左右两个窗格
Ctrl+b " #划分上下两个窗格
Ctrl+b <arrow key> #光标切换到其他窗格。<arrow key>是指向要切换到的窗格的方向键,比如
切换到下方窗格,就按方向键↓
Ctrl+b ; #光标切换到上一个窗格
Ctrl+b o #光标切换到下一个窗格。
Ctrl+b { #当前窗格左移
Ctrl+b } #当前窗格右移
Ctrl+b Ctrl+o #当前窗格上移
Ctrl+b Alt+o #当前窗格下移
Ctrl+b x #关闭当前窗格
Ctrl+b ! #将当前窗格拆分为一个独立窗口
Ctrl+b z #当前窗格全屏显示,再使用一次会变回原来大小
Ctrl+b Ctrl+<arrow key> #按箭头方向调整窗格大小
Ctrl+b q #显示窗格编号
#新建会话
#第一个启动的 Tmux 窗口,编号是0,第二个窗口的编号是1,以此类推。这些窗口对应的会话,就是 0
号会话、1 号会话。使用编号区分会话,不太直观,更好的方法是为会话起名。下面命令新建一个指定
名称的会话
tmux new -s <session-name>
#查看当前所有Tmux会话
tumx ls
tumx list-session
#分离会
#在Tmux 窗口中,按下Ctrl+b d或者输入tmux detach命令,就会将当前会话与窗口分离
tmux attach
#接入会话
#命令用于重新接入某个已存在的会话
tmux attach -t <session-name>
#杀死会话
tmux kill-session -t <session-name>
#切换会话
tmux switch -t <session-name>
#可以将窗口分成多个窗格(pane),每个窗格运行不同的命令
#上下分窗格
tmux split-window
ctrl+b,"
#左右分窗格
tmux split-window -h
ctrl+b,%
窗口管理
除了将一个窗口划分成多个窗格,Tmux 也允许新建多个窗口
#新建窗口
tmux new-window
#新建一个指定名称的窗口
tmux new-window -n <window-name>
#切换窗口
tmux select-window
#切换到指定编号的窗口
tmux select-window -t <window-number>
#切换到指定名称的窗口
tmux select-window -t <window-name>
#窗口快捷键
Ctrl+b c #创建一个新窗口,状态栏会显示多个窗口的信息。
Ctrl+b p #切换到上一个窗口(按照状态栏上的顺序)。
Ctrl+b n #切换到下一个窗口。
Ctrl+b <number> #切换到指定编号的窗口,其中的<number>是状态栏上的窗口编号
Ctrl+b w #从列表中选择窗口
Ctrl+b , #窗口重命名
#列出所有快捷键,及其对应的Tmux命令
tmux list-key
#列出所有 Tmux 命令及其参数
tmux list-commands
(7)输出信息echo
① 基本用法
echo 命令可以将后面跟的字符进行输出
功能:显示字符,echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行符。
#语法
echo [-neE] [字符串]
-n #输出完成后不换行
-e #转义特定字符串
-E #不转义,原样输出,默认选项
#启用命令选项-e,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出
\a #发出警告声
\b #退格键
\c #最后不加上换行符号
\e #escape,相当于\033
\n #换行且光标移至行首
\r #回车,即光标移至行首,但不换行
\t #插入tab
\\ #插入\字符
\0nnn #插入nnn(八进制)所代表的ASCII字符
\xHH #插入HH(十六进制)所代表的ASCII数字(man 7 ascii)
② 显示变量
[root@ubuntu ~]# echo $VAR_NAME
(空)
[root@ubuntu ~]# VAR_NAME=hao
#输出变量三种写法
[root@ubuntu ~]# echo $VAR_NAME
hao
[root@ubuntu ~]# echo "$VAR_NAME" #用变量值替换,弱引用
hao
[root@ubuntu ~]# echo ${VAR_NAME}
hao
#单引号不转义
[root@ubuntu ~]# echo '$VAR_NAME' #变量不会替换,强引用
$VAR_NAME
#why?
[root@ubuntu ~]# echo \$PATH
$PATH
#$通常表示一个变量的开始,加上\转义字符,作用是告诉shell不要将后面的字符当作特殊字符处理,而是直接当作普通字符输出
③ 高级用法
在终端中,ANSI定义了用于屏幕显示的Escape屏幕控制码,可以显示具有颜色的字符。
#格式
"\033[字符背景颜色;字体颜色;特效m字符串\033[0m"
\033[30m -- \033[37m #设置前景色
\033[40m -- \033[47m #设置背景色
#字体颜色: 30--37
30: 黑
31: 红
32: 绿
33: 黄
34: 蓝
35: 紫
36: 深绿
37: 白色
##字符背景颜色范围: 40--47
40:黑
41:红
42:绿
43:黄
44:蓝
45:紫
46:深绿
47:白色
#其他控制码
\033[0m #关闭所有属性
\033[1m #设置高亮度
\033[4m #下划线
\033[5m #闪烁
\033[7m #反显
\033[8m #消隐
\033[nA #光标上移n行
\033[nB #光标下移n行
\033[nC #光标右移n列
\033[nD #光标左移n列
\033[x;yH #设置光标位置x行y列
\033[2J #清屏
\033[K #清除从光标到行尾的内容
\033[s #保存光标位置
\033[u #恢复光标位置
\033[?25l #隐藏光标
\033[?25h #显示光标
\033[2J\033[0;0H #清屏且将光标置顶
九、字符集和编码及语言环境
(1)字符集和编码
许多场合下,字符集与编码这两个概念常被混为一谈,但两者是有差别的。字符集与字符集编码是两个不同层面的概念。charset是character set的简写,即字符集,即二进制和字符的对应关系,不关注最终的存储形式,字符集为计算机提供了处理和显示文本的基础,使得不同语言和文化的字符都能在计算机上得到正确的表示。encoding是charset encoding的简写,即字符集编码,简称编码,实现如何将字符转化为实际的二进制进行存储,编码决定了空间的使用的大小。
① ASCII码
计算机内部,所有信息最终都是一个二进制值。上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定,即ASCII码。ASCII 码一共规定了128个字符的编码,占用了一个字节的后面7位,最前面的一位统一规定为 0。
Oct 8进制
Dec 10进制 ascii 编码
Hex 16进制
Bin 2进制
Char 字符
#查看ascii表
man ascii
② Unicode
早期计算机基于ASCII编码仅支持128个字符,难以满足非英语语言(如中文需多字节)的编码需求,因此各国相继推出本地化编码标准(如中国的GB2312、日本的Shift_JIS、韩国的Euc-kr)。然而,这些编码标准因字符集独立且存在重叠,导致多语言混合文本出现乱码问题。为解决全球字符的统一表示,Unicode字符集应运而生,它为每种字符分配唯一编码,覆盖超百万符号,但仅定义字符与二进制代码的映射关系,不涉及具体存储方式。
Unicode编码方案:
- UTF-8: 变长,1到4个字节
- UTF-16:变长,2或4个字节
- UTF-32:固定长度,4个字节
UTF-8 是目前互联网上使用最广泛的一种 Unicode 编码方式,可变长存储。使用 1- 4 个字节表示一个字符,根据字符的不同变换长度。编码规则:
对于单个字节的字符,第一位设为 0,后面的 7 位对应这个字符的 Unicode 码。因此,对于英文中的 0 - 127 号字符,与 ASCII 码完全相同。这意味着 ASCII 码的文档可用 UTF-8 编码打开
对于需要使用 N 个字节来表示的字符(N > 1),第一个字节的前 N 位都设为 1,第 N + 1 位设为0,剩余的 N - 1 个字节的前两位都设为 10,剩下的二进制位则使用这个字符的 Unicode 码来填充。
(2)语言环境
#查看LANG环境变量
[root@rocky130 ~]$echo $LANG
zh_CN.UTF-8
#临时设置
[root@rocky130 ~]$LANG=en_US.UTF-8
[root@rocky130 ~]$echo ${LANG}
en_US.UTF-8
[root@rocky130 ~]$localectl status
System Locale: LANG=zh_CN.UTF-8
VC Keymap: cn
X11 Layout: cn
#列出系统上所有可用的区域设置(语言包)
[root@rocky130 ~]$localectl list-locales
#命令用于列出所有以 lang 开头的软件包
yum list lang*
#安装语言包
例:yum -y install langpacks-zh_CN.noarch
#永久设置
localectl set-locale LANG=zh_CN.utf8 #通用方法
localectl set-locale zh_CN.utf8 #ubuntu Centos7不支持此写法
ubnuntu
[root@ubuntu ~]# localectl status
System Locale: LANG=en_US.UTF-8
VC Keymap: (unset)
X11 Layout: us
X11 Model: pc105
[root@ubuntu ~]# LANG=zh_CN.UTF-8
[root@ubuntu ~]# echo $LANG
zh_CN.UTF-8
[root@ubuntu ~]# localectl status
System Locale: LANG=en_US.UTF-8
VC Keymap: (unset)
X11 Layout: us
X11 Model: pc105
[root@ubuntu ~]# localectl list-locales
C.UTF-8
en_US.UTF-8
[root@ubuntu ~]# apt install language-pack-zh-hans -y
[root@ubuntu ~]# localectl list-locales
C.UTF-8
en_US.UTF-8
zh_CN.UTF-8
zh_SG.UTF-8
十、命令行扩展和被括起来的集合
(1)命令行扩展:` `和$( )
把一个命令的输出打印给另一个命令的参数,放在``中的一定是有输出信息的命令。
$(COMMAND)
`COMMAND`
变量
双引号,弱引用,可以解析内容
单引号,强引用,原样输出
命令
`cmd` 展开
$(cmd) 展开
SUM->单引号:强引用,六亲不认,变量和命令都不识别,都当成了普通的字符串,"最傻"。
双引号:弱引用,不能识别命令,可以识别变量,"半傻不精"。
反向单引号:里面的内容必须是能执行的命令并且有输出信息,变量和命令都识别,并且会将反向单引号的内容当成命令进行执行后,再交给调用反向单引号的命令继续,"最聪明"。
(2)括号扩展:{ }
{ } 可以实现打印重复字符串的简化形式。
{元素1,元素2,元素3} #不连续
{元素1..元素2} #连续,有规律
[root@ubuntu ~]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
[root@ubuntu ~]# echo {5..8}
5 6 7 8
[root@ubuntu ~]# echo file{1,3,5}
file1 file3 file5
[root@ubuntu ~]# echo file{1..5}
file1 file2 file3 file4 file5
[root@ubuntu ~]# cp /etc/issue ./
[root@ubuntu ~]# ls
issue
[root@ubuntu ~]# cp issue issue.bak
[root@ubuntu ~]# ls
issue issue.bak
[root@ubuntu ~]# echo issue{,.bak}
issue issue.bak
#
[root@ubuntu ~]# echo a{1,3,5}
a1 a3 a5
[root@ubuntu ~]# echo a{,5}
a a5
[root@ubuntu ~]# echo a{1..5}
a1 a2 a3 a4 a5
#关闭和启用{ }的扩展功能
[root@ubuntu ~]# echo $-
himBHs
[root@ubuntu ~]# echo {1..5}
1 2 3 4 5
[root@ubuntu ~]# set +B
[root@ubuntu ~]# echo $-
himHs
[root@ubuntu ~]# echo {1..5}
{1..5}
[root@ubuntu ~]# set -B
[root@ubuntu ~]# echo $-
himBHs
[root@ubuntu ~]# echo {1..5}
1 2 3 4 5
十一、tab键补全
tab 键可以实现命令及路径等补全,提高输入效率,避免出错
(1)命令补全
- 内部命令:
- 外部命令:bash根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给定命令名称的文件,第一次找到的命令即为要执行的命令。
- 命令的子命令补全,需要安装 bash-completion
注意:用户给定的字符串只有一条惟一对应的命令,直接补全,否则,再次Tab会给出列表。
(2)路径补全
把用户给出的字符串当做路径开头,并在其指定上级目录下搜索以指定的字符串开头的文件名,如果唯一:则直接补全;否则:再次Tab给出列表。
(3)双击tab键
十二、命令行历史
用户执行的命令会暂存于内存中,正常退出终端后,这些历史记录会被保存到用户家目录下的 .bash_history 文件中;下次登录时,系统会自动加载该文件内容至内存,包括错误的命令。默认记录最近1000条命令,其数量可通过修改 /etc/profile 文件中的 HISTSIZE 字段调整。用户可利用命令历史快速重复执行过往命令,从而提升操作效率。
SUM->假设当前终端 .bash_history 有n条目录,登录后,就把该文件中的n条命令加载出来,即使当前没有输入任何命令,如果在输入command1..command3,退出后,这三条命令就会被追加到文件中,此时n+3条。在登录,n+3又会被加载出来。
#命令history
#用于查看和管理当前 Shell 会话中已执行的命令历史记录
history [-c] [-d offset] [n]
history -anrw [filename]
history -ps arg [arg...]
#常用选项
-c #清空命令历史
-d offset #删除历史中指定的第offset个命令
n #显示最近的n条历史
-a #追加本次会话新执行的命令历史列表至历史文件
-r #读历史文件附加到历史列表
-w #保存历史列表到指定的历史文件
-n #读历史文件中未读过的行到历史列表
-p #展开历史参数成多行,但不存在历史列表中
-s #展开历史参数成一行,附加在历史列表后
注意:写在家目录 .bashrc 中只对当前用户生效,如果想对所有用户生效写在 /etc/profile
#作用:快速重用历史命令
!n #(n为序列号) 执行序列号为n的命令
!! #重复执行上一条命令
!string #从下往上执行最近一条以 "string" 开头的命令
(1)命令历史相关环境变量
SUP->文件中同样的变量写了n次,程序从上执行,生效的永远是最后一个。
#[root@ubuntu ~]# nano .bashrc
HISTSIZZE #命令历史记录的条数
HISTFILE #指定历史文件,默认为~/.bash_history
HISTFILESIZE #命令历史文件记录历史的条数
HISTTIMEFORMAT="%F %T `whoami` " #显示时间和用户
HISTIGNORE="str1:str2*:…" #忽略str1命令,str2开头的历史
HISTCONTROL=ignoredups|ignorespace|ignoreboth|erasedups #控制命令历史的记录方式
#ignoredups #是默认值,可忽略重复的命令,连续且相同为“重复”
#ignorespace #忽略所有以空白开头的命令
#ignoreboth #相当于ignoredups, ignorespace的组合
#erasedups #删除重复命令
(2)持久保存变量
#上述变量可以 export 变量名="值" 形式存放在 /etc/profile 或 ~/.bash_profile
[root@ubuntu ~]# cat .profile
# ~/.profile: executed by Bourne-compatible login shells.
if [ "$BASH" ]; then
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
fi
[root@ubuntu ~]# mesg n 2> /dev/null | true
[root@ubuntu ~]# PATH=$PATH:$HOME/bin
[root@ubuntu ~]# export PATH
[root@ubuntu ~]# export HISTCONTROL=ignoreboth
[root@ubuntu ~]# export HISTTIMEFORMAT="%F %T "
[root@ubuntu ~]# history
30 2025-06-01 15:42:04 cd /etc/profile
31 2025-06-01 15:42:17 ll /etc/profile
32 2025-06-01 15:42:39 nmcli
33 2025-06-01 15:42:43 history
34 2025-06-01 15:43:24 history -s
35 2025-06-01 15:43:33 history
36 2025-06-01 15:44:29 ls -a
37 2025-06-01 15:44:36 history
38 2025-06-01 15:51:27 cat .profile
39 2025-06-01 16:02:04 mesg n 2> /dev/null | true
40 2025-06-01 16:02:22 PATH=$PATH:$HOME/bin
41 2025-06-01 16:02:27 export PATH
42 2025-06-01 16:02:44 export HISTCONTROL=ignoreboth
43 2025-06-01 16:03:10 export HISTTIMEFORMAT="%F %T "
44 2025-06-01 16:03:14 history
十三、调用命令行历史
#重复前一个命令方法
1.使用上方向键,并回车执行
2.!!,回车执行
3.!-1,回车执行
4.Ctrl+p,回车执行
!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 + # #提示输入指定字符后,重复显示该字符#次
十五、登陆提示
(1)登陆前提示
在命令行模式下本地终端(tty1~tty6)登录界面,会有几行提示文字,这些文字都保存在/etc/issue文件中,可以自行修改。
/etc/issue
/etc/issue.d/
#issue 支持转义字符,全部可用的转义字符可以通过 man agetty 查看,这里列出常用的
\d #显示当前系统日期
\S #显示操作系统名称
\m #显示硬件体系结构,如i386、i686等
\n #显示主机名
\o #显示域名
\r #显示内核版本
\t #显示当前系统时间
\u #显示当前登录用户的序列号
ubuntu
[root@ubuntu ~]# cat /etc/issue
Ubuntu 25.04 \n \l
[root@ubuntu ~]# nano /etc/issue
Centos
[root@rocky130 ~]$cat /etc/issue
\S
Kernel \r on an \m
[root@rocky130 ~]$nano /etc/issue
[root@rocky130 ~]$cat /etc/issue
\S
Kernel \r on an \m
----------welcome to Linux----------
#[root@rocky130 ~]$cat /etc/issue.d/cockpit.issue
Activate the web console with: systemctl enable --now cockpit.socket
如果是远程终端ssh 登录,则其登录前信息,可以放在/etc/issue.net 中,但是该文件中的内容不支持转义;如果要使用远程终端ssh 登录前的提示信息,还需要修改sshd的相关配置文件。
[root@ubuntu ~]# nano /etc/ssh/sshd_config
#修改:如下图所示
#重启sshd服务
[root@ubuntu ~]# systemctl restart sshd
#之前的转义字符在远程登录中则不会生效
#处于安全考虑,不会再远程连接建立之前暴露敏感信息
[root@ubuntu ~]# nano /etc/issue.net
(2)登陆后提示
motd:message of the day
当用户从终端登录时,此文件的内容将会显示在终端上,如果shell工具支持中文,也可显示。内容由使用者定制,经常用于通告信息,欢迎提示等。但是,此文件只适用于命令行界面,如果是图形界面登录,将不显示此文件内容。
/etc/motd
/etc/motd.d/
[root@rocky130 ~]$ls
anaconda-ks.cfg Documents Music Public test.txt
Desktop Downloads Pictures Templates Videos
[root@rocky130 ~]$rz -E
rz waiting to receive.
[root@rocky130 ~]$ls
anaconda-ks.cfg Documents motd_peiqi Pictures Templates Videos
Desktop Downloads Music Public test.txt
[root@rocky130 ~]$cat motd_peiqi
[{+?]
~++++{.
!{{{{[}}{{{{{_. .{++++{ {{}{
{++++++{++++++?}]++?{{_++{ -{++++}
{+rr+r\+{+++++{$$ +++++++[{<<+++++{
}++++++{+++++++{<{}+{$k {+++++}}{^
}{++[{++++++++++++++{ _++++++++{,
{++++++++++++++++++]}?+++++++++++{
{{++++++++++++++++++++++++++++++}
{{+++++++++++++++++++++++_++++{
{+++++++++++++++++++}}}}}}}++I
{+++++++++++++++++++[}}}}}}}_+{
[]++vY+++++++++++++++}}}}}}}}++{
{++++X$X|+++++++++++++}}}}}[+++{
{_++++X%$$qXXv\|XXX)++++++++++-^
. :{++++++XX$$$$$qXv++++++++++++{
l-++++++++++++++++++++++++++{
I{++++++++++++++++++++++++{
C0{}++++++++++++++++++-{0C
COOOOO0{{[+++++++++_{{0OOO0C
COOOOOOOOOOOOOOUCOOOOOOOOOOOOn<<<"
"<<CLOOOOOOOOOOOOOOOOOOOOOOOOOOOOC ;<<<<<<
<<<. COOOOOOOOOOOOOOOOOOOOOOOOOOOOOOC <<<<
!<<. COOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOCz
<;!> COOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOC
{QOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOL '
COOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOY"< <
COOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOC<<<<<<`
'COOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOC
[COOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOC
]CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<< ^<^
<< ^<^
<< ^<^
$$$$$$$$> O$$$$$$$z
小猪佩琪
[root@rocky130 ~]$mv motd_peiqi /etc/motd
mv: overwrite '/etc/motd'? y
[root@rocky130 ~]$
logout
Connection closed.
Disconnected from remote host(192.168.61.130:22) at 19:31:05.
Type `help' to learn how to use Xshell prompt.
[C:\~]$ ssh root@192.168.61.130
Connecting to 192.168.61.130:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
[{+?]
~++++{.
!{{{{[}}{{{{{_. .{++++{ {{}{
{++++++{++++++?}]++?{{_++{ -{++++}
{+rr+r\+{+++++{$$ +++++++[{<<+++++{
}++++++{+++++++{<{}+{$k {+++++}}{^
}{++[{++++++++++++++{ _++++++++{,
{++++++++++++++++++]}?+++++++++++{
{{++++++++++++++++++++++++++++++}
{{+++++++++++++++++++++++_++++{
{+++++++++++++++++++}}}}}}}++I
{+++++++++++++++++++[}}}}}}}_+{
[]++vY+++++++++++++++}}}}}}}}++{
{++++X$X|+++++++++++++}}}}}[+++{
{_++++X%$$qXXv\|XXX)++++++++++-^
. :{++++++XX$$$$$qXv++++++++++++{
l-++++++++++++++++++++++++++{
I{++++++++++++++++++++++++{
C0{}++++++++++++++++++-{0C
COOOOO0{{[+++++++++_{{0OOO0C
COOOOOOOOOOOOOOUCOOOOOOOOOOOOn<<<"
"<<CLOOOOOOOOOOOOOOOOOOOOOOOOOOOOC ;<<<<<<
<<<. COOOOOOOOOOOOOOOOOOOOOOOOOOOOOOC <<<<
!<<. COOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOCz
<;!> COOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOC
{QOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOL '
COOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOY"< <
COOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOC<<<<<<`
'COOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOC
[COOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOC
]CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<< ^<^
<< ^<^
<< ^<^
$$$$$$$$> O$$$$$$$z
小猪佩琪
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Sun Jun 1 19:30:39 2025 from 192.168.61.1
#ubuntu中无该文件,可自行创建
[root@ubuntu ~]# ls /etc/motd
ls: cannot access '/etc/motd': No such file or directory
#登录后的提示来自于此目录下不同文件,如果不需要默认提示,可以将该目录清空
[root@ubuntu ~]# ls /etc/update-motd.d/
00-header 90-updates-available 97-overlayroot
10-help-text 91-contract-ua-esm-status 98-fsck-at-reboot
50-landscape-sysinfo 91-release-upgrade 98-reboot-required
50-motd-news 92-unattended-upgrades
85-fwupd 95-hwe-eol
#将该目录移除会发生什么登陆后提示全无
[root@ubuntu ~]# mkdir /tmp/abc
[root@ubuntu ~]# mv /etc/update-motd.d/* /tmp/abc
[root@ubuntu ~]#
logout
Connection closed.
Disconnected from remote host(192.168.61.129:22) at 19:50:39.
Type `help' to learn how to use Xshell prompt.
[C:\~]$ ssh root@192.168.61.129
Connecting to 192.168.61.129:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Ubuntu 25.04
----------Welcome to Linux----------
Last login: Sun Jun 1 17:39:08 2025 from 192.168.61.1
[root@ubuntu ~]#
十六、获得帮助
(1)whatis & whereis
whatis 使用数据库来显示命令的简短描述,以及对应的man手册的章节。刚装完系统此命令不可用,其数据要进行初始化.如果要立即使用,则可手动初始化。
[root@ubuntu ~]# whatis ls
ls (1) - list directory contents
[root@ubuntu ~]# whatis echo
echo (1) - display a line of text
[root@rocky130 ~]$whatis ls
ls (1) - list directory contents
ls (1p) - list directory contents
[root@rocky130 ~]$whatis echo
echo (1) - display a line of text
echo (1p) - write arguments to standard output
#刚装完系统如果没有该命令 - mandb
#centos 7版本之后
mandb
#centos 6版本之前
makewhatis
whereis 可以列出命令或系统文件路径,以及其对应的man 手册中的文档路径。
[root@ubuntu ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
[root@rocky130 ~]$whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
(2)查看命令的帮助
① 内部命令帮助
help COMMAND
#直接help,查看所有内部命令帮助
help
#内部命令都在bash中,包括一些全局变量,可以在man手册中查看全部bash信息
man bash
② 外部命令及软件帮助
COMMAND --help|-h (-h不普适)
man COMMAND #更详细
info COMMAND
(3)外部命令的 --help 或 -h 选项
显示用法总结和参数列表,大多数命令使用,但并非所有的。
[root@rocky130 ~]$cal --help
[root@rocky130 ~]$ls --help
[root@rocky130 ~]$date --help
[root@rocky130 ~]$cal -h
[root@rocky130 ~]$ls -h
anaconda-ks.cfg Documents motd_dota2 Music Public test.txt
Desktop Downloads motd-keyboard Pictures Templates Videos
[root@rocky130 ~]$date -h
date: invalid option -- 'h'
Try 'date --help' for more information.
(4)man命令
man 是单词 manual 的简写,是Linux系统中的帮助手册和文档。man 是一个外部命令,其本质就是读取特定文件,进行输出,其读取的文件一般位于/usr/share/man/ 目录下。新安装一个软件或程序后,对应的man手册也会放到/usr/share/man/目录下,几乎每个命令都有man的 “页面”。
#安装
yum install man-pages
Linux 在线手册页https://man7.org/linux/man-pages/index.htmlLinux 手册页:按字母顺序排列所有页面的列表
https://man7.org/linux/man-pages/dir_all_alphabetic.html
① man页面分组
不同类型的帮助称为不同的“章节”,统称为Linux手册。man COMMAND默认第一个。例:man man ->man 1 man。
② man命令的配置文件的路径
#CentOS 6 之前版 man 的配置文件
/etc/man.config
#CentOS 7 之后版 man 的配置文件
/etc/man_db.conf
#ubuntu man 的配置文件
/etc/manpath.config
③ man命令用法
#man[选项...] [章节] 手册页...
man passwd #默认打开第一章帮助
man 5 passwd #指定第五章帮助
man 9 passwd #总共9个章节,中间的数字不能超过9,如果要找的章节里面没有对应的内容,则会提示没有
man 10 passwd #总共9个章节,中间的数字不能超过9,如果是数字大于9,则直接定位到最小的章
man -a passwd #打开所有帮助
man -f passwd #显示passwd 相关的章节,相当于 whatis passwd
man -k passwd #在man 手册中搜索所有与passwd 相关的内容,使用whatis 数据库
man -w ls #显示ls的man 文件路径
man -aw passwd #显示所有跟passwd有关的man文件路径
man -w 5 passwd #显示第5章的passwd的man文件路径
man -M /usr/local/share/man/zh_CN #显示中文man 的内容
#常用快捷键
e|ctrl+E|j|ctrl+J|enter|往下方向键 往下一行
y|ctrl+Y|k|ctrl+K|ctrl+P|往上方向键 往上一行
z|f|ctrl+F|ctrl+V|space 往下一屏
w|b|ctrl+B|esc+v 往上一屏
d|ctrl+D 往下半屏
u|ctrl+U 往上半屏
1G 回到首行
G 跳转至结尾
/abc 向下搜索abc 按n向下跳转,按N向上跳转
?abc 向上搜索abc 按n向下跳转,按N向上跳转
q 退出
#常用关键字及格式
[] 可选项
<> 必选项
a|b 二选一
... 同一内容可出现多次
{ } 分组
#段落说明
NAME #名称及说明
DESCRIPTION #详细说明
SYNOPSIS #使用格式
FILES #相关文件
OPTIONS #选项
AUTHOR #作者
REPORTING BUGS #相关bug信息
COPYRIGHT #版权及开源协议信息
EXAMPLES #使用示例
SEE ALSO #可参考其它部份
#其他命令
#显示man手册文件路径
manpath
#指定man手册文件路径
manpath /path/dir
#在指定位置下搜索,自定义安装的软件,用man查看帮助时,可以指定man文件地址
man -M /path/dir/ COMMAND
[root@rocky130 ~]$man /usr/share/man/man1/ls.1.gz
[root@rocky130 ~]$man 1 man
[root@rocky130 ~]$man man
#直接打开man的帮助文件
[root@rocky130 ~]$man -w ls
/usr/share/man/man1/ls.1.gz
[root@rocky130 ~]$file /usr/share/man/man1/ls.1.gz
/usr/share/man/man1/ls.1.gz: gzip compressed data, max compression, from Unix, original size modulo 2^32 8047
(5)info命令
info 是自由软件基金会的GNU项目,是GNU的超文本帮助系统,整个结构类似于一个网站,有导航,支持链接跳转,不带参数,默认进入的是首页。
#info [OPTION]... [MENU-ITEM...]
#常用快捷键
向上方向键 #上移一行
向下方向键 #下移一行
PgUp #向上一屏
PgDn #向下一屏
Tab #在链接间滚动
Enter #进入链接查看具体内容
s|/ #搜索
n/p/u/l #进入下/前/上一层/最后一个链接
q #退出
(6)TLDR命令
当我们在使用一个不熟悉的命令时,可以使用 -h 或 --help 选项来查看帮助,或者使用 man 手册来查看更详细的文档,但这两种方式,会列出所有选项,而有些选项很少使用,根据二八原则,只有一小部份选项才是最常用的,如是基于此,有人开发了一个开源的查看命令工具,此工具只列出命令的常用选项的帮助。
项目:https://github.com/tldr-pages/tldr
#安装
apt install python3-pip
#pipx是一个专门用于安装和管理Python应用程序的工具,它会自动为每个应用创建独立的虚拟环境,避免污染系统环境
sudo apt install pipx
pipx install tldr
nano /etc/hosts
185.199.109.133 raw.githubusercontent.com
#范例:
[root@ubuntu ~]# tldr ls
ls
List directory contents.
More information: https://www.gnu.org/software/coreutils/manual/html_node/ls-invocation.html.
- List files one per line:
ls -1
- List all files, including hidden files:
ls --all
- List files with a trailing symbol to indicate file type (directory/, symbolic_link@, executable*, ...):
ls --classify
- List all files in [l]ong format (permissions, ownership, size, and modification date):
ls -l --all
- List files in [l]ong format with size displayed using human-readable units (KiB, MiB, GiB):
ls -l --human-readable
- List files in [l]ong format, sorted by [S]ize (descending) recursively:
ls -lS --recursive
- List files in [l]ong format, sorted by [t]ime the file was modified and in reverse order (oldest first):
ls -lt --reverse
- Only list directories:
ls --directory */
系统及第三方应用官方文档
#通过发行版官方的文档光盘或网站可以获得安装指南、部署指南、虚拟化指南等
http://www.redhat.com/docs
http://kbase.redhat.com
http://access.redhat.com
https://help.ubuntu.com/lts/serverguide/index.html
http://tldp.org
#通过在线文档获取帮助
http://www.github.com
https://www.kernel.org/doc/html/latest/
http://httpd.apache.org
http://www.nginx.org
https://mariadb.com/kb/en
https://dev.mysql.com/doc/
http://tomcat.apache.org
https://jenkins.io/zh/doc/
https://kubernetes.io/docs/home/
https://docs.openstack.org/train/
http://www.python.org
http://php.net