*Linux - 基础 (笔记)

目录

一、用户类型

 二、终端 

(1)终端类型

(2)查看当前的终端设备

三、交互式接口

(1)类型

(2)shell

(3)各种shell

(4)bash shell (目前Linux标准的shell)

① 显示当前使用的shell

② 显示当前系统使用的所有shell

四、设置主机名

五、命令提示符 prompt

(1)PS1变量中的常用选项

(2)个性设置

1.PS1中的颜色部分

2.颜色设置

① 各颜色表示方式

② 字体、背景颜色设置

③ 特殊效果

六、执行命令

(1)执行命令过程

(2)shell中可执行的两类命令

①内部命令相关

②执行外部命令

③外部命令搜索路径

(3)Hash缓存表

(4)命令别名

(5)命令优先级

七、命令格式

八、常见命令

(1)查看硬件信息

① 查看CPU

② 查看内存大小

③ 查看硬盘和分区情况

④ 查看系统版本信息

(2)日期和时间

① date显示和设置系统时间

② clock、hwclock显示硬件时钟

③ 时区

④ 日历

(3)关机和重启

(4)用户登录信息查看命令

① whoami

② who

③ w

(5)文本编辑

(6)会话管理

① screen

② tmux

(7)输出信息echo

① 基本用法

② 显示变量

③ 高级用法

九、字符集和编码及语言环境

(1)字符集和编码

① ASCII码

 ② Unicode

(2)语言环境

十、命令行扩展和被括起来的集合

(1)命令行扩展:` `和$( )

(2)括号扩展:{ }

十一、tab键补全

(1)命令补全

(2)路径补全

(3)双击tab键

十二、命令行历史

(1)命令历史相关环境变量

(2)持久保存变量

十三、调用命令行历史

十四、bash的快捷键

十五、登陆提示

(1)登陆前提示

(2)登陆后提示

十六、获得帮助

(1)whatis & whereis

(2)查看命令的帮助

① 内部命令帮助

② 外部命令及软件帮助

(3)外部命令的 --help 或 -h 选项

(4)man命令

① man页面分组

② man命令的配置文件的路径

③ man命令用法

(5)info命令

(6)TLDR命令

系统及第三方应用官方文档


一、用户类型

        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工具-图形工具

关于计算机的ascii艺术字,自定义Spring Boot 计算机 banner下载,各种有意思的banner、ascii图案,还有中文文字banner,作为Spring Boot和终端命令行banner会让项目更有意思。-bootschool.nethttps://www.bootschool.net/ascii-art/computers

(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值