Linux 基础命令

1 Linux 基础

1.1 用户类型

1.2 终端 Terminal


设备终端:键盘,鼠标,显示器

1.2.1 终端类型

1.2.2 查看当前的终端设备

tty 命令可以查看当前所在的终端
范例:

# tty 可以查看当前所在的终端
$ tty
/dev/pts/1
$ who am i
root     pts/1        2022-05-03 01:37 (120.229.46.163)
$ who
root     pts/0        2022-05-03 01:30 (120.229.46.163)
root     pts/1        2022-05-03 01:37 (120.229.46.163)
$ w01:47:52 up 4 days, 14:35,  2 users,  load average: 0.04, 0.08, 0.06
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    120.229.46.163   01:30    8.00s 14:17   0.02s vim /etc/hostna
root     pts/1    120.229.46.163   01:37    0.00s  0.02s  0.00s w

1.3 交互式接口

交互式接口:启动终端后,在终端设备附加一个交互式应用程序

1.3.1 交互式接口类型

1.3.2 什么是shell


硬件:计算机设备的硬件,例如:处理器,内存,存储等等硬件设备;
内核:即是操作系统的核心;内核是操作系统最基本的部分,但不是操作系统的全部。内核负责管理系统的进程、内存、设备驱动程序,文件和网络系统,决定着系统的性能和稳定性。而操作系统一般包括内核、驱动程序、接口库等等组成部分。
系统调用:用户想要使用操作系统是需要通过接口来访问的,这些接口就是系统调用。
Shell 是 Linux 系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。Shell 也被称为 Linux 的命令解释器(Command Interpreter)Shell 是一种高级程序设计语言。
Shell本身就是一个程序,将用户输入的命令行拆解为"命令名" 与 “参数”。接着,根据命令名找到对应要执行的程序,对被执行的程序进行初始化,然后将刚才解析出来的参数传递给该程序并执行
Shell 是一种高级程序设计语言,提供了变量,函数,条件判断,循环等开发语言的功能
由于Shell 本身是个程序,所以它可以被任何用户自己开发的各种Shell所代替。

1.3.3 各种Shell

1.3.4 Bash Shell

GNU Bourne-Agent Shell(bash)是GNU计划中最重要的工具软件之一,目前也是Linux标准的shell,与sh 兼容。
显示当前使用的shell

echo $SHELL

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

cat /etc/shells
# 安装shell
yum install -y csh # 可以在/etc/shells中查看新安装shell

1.4 设置主机名

# 临时生效,可以生效,但是系统重启后无法持久保存
hostname NAME# 持久生效,支持CentOS7和Ubuntu18.04以上的版本使用
hostnamectl set-hostname NAME

范例:

$ hostnamectl set-hostname bj-yz-k8s-node01-100-10.kubesphere.com# 主机名不要使用下划线
$ hostname centos7_3.kubesphere.io
hostname: the specified hostname is invalid

注意:
范例:

$ hostnamectl set-hostname docker.kubesphere.io
# 主机名保存的配置文件
$ cat /etc/hostname
docker.kubesphere.io# 当使用非法的主机名时,可能会导致某些服务启动失败的情况
$ hostname centos8.1 # 主机名不支持小数点
$ systemctl restart postfix
Job for postfix.service failed because the control process exited with error code. 
See "systemctl status postfix.service" and "journalctl -xe" for details.

1.5 命令提示符 prompt

登录 Linux 后,默认的系统命令提示符毫无没有个性,无法明显辨别生产和测试回家,而导致误操作,可以通过修改 PS1 变量实现个性的提示符格式,避免这种低级错误发生。
范例:默认的提示符

# CentOS默认的命令提示符
[root@centos8 ~]## Ubuntu默认的命令提示符
root@docker:~##:管理员
$:普通用户

显示操作符格式

[root@centos8 ~]# echo $PS1
[\u@\h \W]\$

修改提示符格式范例

# \[\e[1;5;41;33m\]中 1:代表高亮显示;5:代表闪烁;41;提示符的背景颜色;33:提示符颜色;0m:终止颜色渲染
PS1="\[\e[1;5;41;33m\][\u@\h \W]\\$\[\e[0m\]"PS1="\[\e[1;32m\][\[\e[0m\]\t \[\e[1;33m\]\u\[\e[36m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"

提示符格式说明:
范例:持久保存 PS1 格式

# CentOS系统持久保存提示符格式
echo 'PS1="\[\e[1;32m\][\[\e[0m\]\t \[\e[1;33m\]\u\[\e[36m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$ "' > /etc/profile.d/env.sh
echo 'PS1="\[\e[1;33m\][\u@\h \W]\\$\[\e[0m\] "' > /etc/profile.d/env.sh
source /etc/profile.d/env.sh# Ubuntu系统持久保存提示符格式
echo 'PS1="\[\e[1;32m\][\[\e[0m\]\t \[\e[1;33m\]\u\[\e[36m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$ "' >> .bashrc
echo 'PS1="\[\e[1;33m\][\u@\h \W]\\$\[\e[0m\] "' >> .bashrc
tail -n1 .bashrc

1.6 执行命令

1.6.1 执行命令过程

输入命令后回车,提请 Shell 程序找到键入命令所对应的可执行程序或者代码,并由其分析后提交给内核分配资源将其运行起来。

1.6.2 Shell中可执行的两类命令

区别指定的命令时内部或者外部命令

type COMMAND

范例:查看是否存在对应的内部命令和外部命令

$ type echo
echo is a shell builtin
# 查看是否存在对应的内部命令和外部命令
$ type -a echo
echo is a shell builtin # 内部命令
echo is /usr/bin/echo
$ type -a type
type is a shell builtin # 内部命令
type is /usr/bin/type
$ type -a hostname
hostname is /usr/bin/hostname # 外部命令# 查看内部所有命令,内部命令是集成在Shell中的,不同的Shell集成的内部命令数量不同
$ enable
...
$ enable | wc -l 
61
1.6.2.1 内部命令相关

help 内部命令列表
enable 管理内部命令

$ enable help
# 禁用内部命令
$ enable -n help
$ enable -n
enable -n help
# 启用内部命令
$ enable help
1.6.2.2 执行外部命令

查看外部命令路径:

which -a |--skip-alias
whereis

Hash缓存表 系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在将执行之,如果不存在,将会去PATH路径下寻找,利用hash缓存表可大大提高命令的调用速率。
hash 命令常见用法:

# CentOS系统进行下载firefox
yum install -y firefox
export DISPLAY=10.0.0.1:0.0 # export DISPLAY=<IP网段>:0.0
firefox 
# 可能会需要进行下载相关依赖库
yum provides libGL.so.1 # <库名>
yum install -y libglvnd-glx
firefox # 直接运行即可# 如果使用mobaxterm工具连接CentOS
# 需要安装插件
yum install -y xorg-x11-xauth xorg-x11-fonts-* xorg-x11-font-utils xorg-x11-fonts-Type1 firefox
exit
firefox # 直接运行即可# Ubuntu系统进行下载firefox
apt install -y firefox
firefox # 直接运行即可

1.6.3 命令别名

alias cdnet='cd /etc/sysconfig/network-scripts/'
alias cdyum='cd /etc/yum.repos.d/'
alias nm='systemctl restart NetworkManager'
alias disepel='sed -ri /enabled/s/enabled=1/enabled=0/ /etc/yum.repos.d/base.repo'
alias egrep='egrep --color=auto'
alias epel='sed -ri /enabled/s/enabled=0/enabled=1/ /etc/yum.repos.d/base.repo'
alias fgrep='fgrep --color=auto'
alias i.='ls -d .* --color=auto'
alias lh='ls -lh --color=auto'
alias p='poweroff'
alias restart='systemctl restart '
alias restartnet='systemctlrestart network"
alias scandisk='echo "- - -" > /sys/class/scsi_host/host0/scan;\echo "- - -" > /sys/class/scsi_host/host1/scan;\echo "- - -" > /sys/class/scsi_host/host2/scan'
alias vie0='vim /etc/sysconfig/network-scripts/ifcfg-eth0'
alias vie1='vim /etc/sysconfig/network-scripts/ifcfg-eth1'
alias xzfgrep='xzfgrep --color=auto'
alias xzgrep=' xzgrep --color=auto'
alias yr='yum remove'
alias yy='yum -y install'
alias zegrep='zegrep --color=auto'
alias zfgrep='zfgrep --color=auto'
alias zgrep='zgrep --color=auto'

对于经常执行的较长的命令,可以将其定义成较短的别名,以方便执行
显示当前shell进程所有可用的命令别名 alias
定义别名NAME,其相当于执行命令VALUE

alias NAME='VALUE'

范例:扫描新加的磁盘

alias scandisk='echo "- - -" > /sys/class/scsi_host/host0/scan;\echo "- - -" > /sys/class/scsi_host/host1/scan;\echo "- - -" > /sys/class/scsi_host/host2/scan'
$ type scandisk
scandisk is aliased to `echo "- - -" > /sys/class/scsi_host/host0/scan;\echo "- - -" > /sys/class/scsi_host/host1/scan;\echo "- - -" > /sys/class/scsi_host/host2/scan'

范例:持久保存别名

$ vim ~/.bashrc
alias scandisk='echo "- - -" > /sys/class/scsi_host/host0/scan;\echo "- - -" > /sys/class/scsi_host/host1/scan;\echo "- - -" > /sys/class/scsi_host/host2/scan'

撤销别名:unalias

unalias [-a] name [name ...]
unalias -a  #取消所有别名

注意:在命令行中定义的别名,仅对当前的 Shell 进程有效;
如果想永久有效,要定义在配置文件中
编辑配置给出的新配置不会立刻生效,bash 进程重新读取配置文件

source /path/to/config_file
. /path/to/config_file

如果别名同原命令同名,如果想要执行原命令,可使用:

\ALIASNAME
"ALIASNAME"
'ALIASNAME'
command ALIASNAME
/path/command
$ alias hostname=who
$ hostname
root     pts/5        2022-05-02 13:05 (10.0.0.1)
$ \hostname
CentOS8-Server
$ 'hostname'
CentOS8-Server
# 撤销别名
$ unalias hostname

命令执行过程:命令别名 > 内部命令 > 命令Hash缓存 > 外部命令
第一次执行外部命令优先级:命令别名 > 内部命令 > Hash 缓存表 > 外部命令(查找$PATH路径)。

1.6.4 命令格式

COMMAND [OPTIONS…] [ARGUMENTS…]
COMMAND [COMMAND…] [COMMAND…] …
选项:用于启用或关闭命令的某个或某些功能
参数:命令的作用对象,比如:文件名,用户名等
范例:

$ id -u zzw
1000
$ ls -a | ls --all$ free -h | free --human$ ps aux

注意:

1.7 常用命令

1.7.1 查看硬件信息

1.7.1.1 查看CPU

lscpu 命令可以查看 CPU 信息
cat /proc/cpuinfo 也可以查看到
范例:

$ lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              4 # 4core
# 最多同时开4个同时执行的任务,一个任务占用一个内核
# 一般任务的数量和CPU内核的数量尽可能统一
# 因为,任务如果太多,会产生一个问题就是CPU会进行来回的切换
# CPU的个数就决定了它能同时执行任务的个数
On-line CPU(s) list: 0-3
Thread(s) per core:  1 # 每个core 有几个线程
Core(s) per socket:  2 # 每个槽位有2core
Socket(s):           2 # 服务器面板上有2个CPU槽位
NUMA node(s):        2 # nodes的数量
Vendor ID:           AuthenticAMD
BIOS Vendor ID:      AuthenticAMD
CPU family:          23
Model:               113
Model name:          AMD Ryzen 7 3700X 8-Core Processor
BIOS Model name:     AMD Ryzen 7 3700X 8-Core Processor
Stepping:            0
CPU MHz:             3600.013
BogoMIPS:            7200.02
Hypervisor vendor:   VMware
Virtualization type: full
L1d cache:           32K
L1i cache:           32K
L2 cache:            512K
L3 cache:            16384K
NUMA node0 CPU(s):   0,2,4,6 # 对应的core
NUMA node1 CPU(s):   1,3,5,7# 可以查看单独的CPU的信息
$ cat /proc/cpuinfo
1.7.1.2 查看内存的大小
$ freetotal        used        free      shared  buff/cache   available
Mem:        3799012      532704     1908780       10132     1357528     2967392
Swap:       4194300           0     4194300
# 展示人类可读的输出
$ free -htotal        used        free      shared  buff/cache   available
Mem:          3.6Gi       520Mi       1.8Gi       9.0Mi       1.3Gi       2.8Gi
Swap:         4.0Gi          0B       4.0Gi$ cat /proc/meminfo
MemTotal:        3799012 kB # 内存的总大小
MemFree:         1908852 kB # 内存可用的大小
MemAvailable:    2967464 kB
Buffers:             200 kB
Cached:          1095516 kB
...
1.7.1.3 查看硬盘和分区的情况
$ lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda       8:0    0  500G  0 disk
├─sda1    8:1    0    2G  0 part /boot
├─sda2    8:2    0  100G  0 part /
├─sda3    8:3    0  100G  0 part /data
├─sda4    8:4    0    1K  0 part
└─sda5    8:5    0    4G  0 part [SWAP]$ cat /proc/partitions
major minor  #blocks  name8       16  104857600 sdb8        0  524288000 sda8        1    2097152 sda18        2  104857600 sda28        3  104857600 sda38        4          1 sda48        5    4194304 sda5

1.7.2 查看系统版本信息

1.7.2.1 查看系统架构
$ arch
x86_64# 可以获取全部系统信息
$ getconf -a
$ getconf LONG_BITlscpu | grep Architecture
Architecture:        x86_64
1.7.2.2 查看内核版本
$ uname -r
4.18.0-305.3.1.el8.x86_64$ uname -a
Linux CentOS8-Server 4.18.0-305.3.1.el8.x86_64 
#1 SMP Tue Jun 1 16:14:33 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
1.7.2.3 查看操作系统发行版本
### CentOS查看操作系统发行版本
$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)$ cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"### lsb_release: command not found 解决方法:
$ yum install -y redhat-lsb-core
$ lsb_release -a
LSB Version:    :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description:    CentOS Linux release 7.9.2009 (Core)
Release:        7.9.2009
Codename:       Core### Ubuntu查看操作系统发行版本
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.2 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.2 LTS"
VERSION_ID="20.04"
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"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal$ cat /etc/issue
Ubuntu 20.04.2 LTS \n \l$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.2 LTS
Release:        20.04
Codename:       focal

范例:查看OS版本

$ lsb_release -is
Ubuntu$ lsb_release -cs
focal$ lsb_release -rs
20.04

1.7.3 日期和时间

Linux 的两种时钟:
相关命令:
范例:

$ date +%s
1651555049
$ date -d @`date +%s`
Tue May  3 13:17:45 CST 2022
$ date -d @1651555049
Tue May  3 13:17:29 CST 2022
$ date -d "2020-02-02" +%s
1580572800
$ clock --help
-s, --hctosys        set the system time from the RTC
-w, --systohc        set the RTC from the system time
# RTC:一般指实时时钟,是在主板集成电路芯片上的时间

范例:

$ ls -l /usr/sbin/clock
lrwxrwxrwx. 1 root root 7 Jan 21  2021 /usr/sbin/clock -> hwclock

时区

/etc/localtime### 设置时区
# 列出所有的时区
$ timedatectl list-timezones# 查看当前系统的时区情况
$ timedatectl statusLocal time: Tue 2022-05-03 13:27:34 CSTUniversal time: Tue 2022-05-03 05:27:34 UTCRTC time: Tue 2022-05-03 05:27:39Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: noNTP service: inactiveRTC in local TZ: no# 设置时区
$ timedatectl set-timezone Asia/Shanghai
$ ls -l /etc/localtime
lrwxrwxrwx. 1 root root 35 Jul 11  2021 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai

显示日历

# 显示当前月份的日历
$ cal 
# 显示整一年的日历
$ cal -y

范例:

$ cal 9 1752September 1752
Su Mo Tu We Th Fr Sa1  2 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
# 从1752年9月3日到1752年9月13日的11天并不存在。
# 抹掉这11天是由英国议会做出的决定。所以要计算某年每个月的天数的,除了要考虑是否是闰年以外,还要考虑1752年的9月。

1.7.4 关机和重启

关机:
重启:
关机或者重启:shutdown

shutdown [OPTIONS] ... [TIME] [MESSAGE]

-r : reboot 重启
-h :halt 关机
-c :cancel 取消 shutdown 选项
TIME :无指定,默认相当于 +1(CentOS 7)

$ uptime
13:46:43 up  7:38,  1 user,  load average: 0.00, 0.00, 0.00

1.7.5 用户登录信息查看命令

1.7.6 文本编辑

范例:创建登录提示文件 /etc/motd

$ yum install -y nano$ nano /etc/motd
welcome to kubepshere.docker

参考网站:https://bootschool.net/ascii-art

# 登录后提示信息
$ cat /etc/motd
welcome to kubepshere.docker//                          _ooOoo_                               //
//                         o8888888o                              //
//                         88" . "88                              //
//                         (| ^_^ |)                              //
//                         O\  =  /O                              //
//                      ____/`---'\____                           //
//                    .'  \\|     |//  `.                         //
//                   /  \\|||  :  |||//  \                        //
//                  /  _||||| -:- |||||-  \                       //
//                  |   | \\\  -  /// |   |                       //
//                  | \_|  ''\---/''  |   |                       //
//                  \  .-\__  `-`  ___/-. /                       //
//                ___`. .'  /--.--\  `. . ___                     //
//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
//      ========`-.____`-.___\_____/___.-`____.-'========         //
//                           `=---='                              //
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
//            佛祖保佑       永不宕机     永无BUG                 //# 登录前提示信息
$ cat /etc/issue
\S
Kernel \r on an \m

1.7.7 会话管理

命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称"窗口”),在里面输入命令,用户与计算机的这种临时的交互,称为一次会话”(session)
会话的一个重要特点是,窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完
一个典型的例子就是,SSH登录远程计算机,打开一个远程窗口执行命令。这时,网络突然断线,再次登录的时候,是找不回上一次执行的命令的。因为上一次SSH会话已经终止了,里面的进程也随之消失了。为了解决这个问题,会话与窗口可以’解绑︰窗口关闭时,会活并不终止,而是继续运行,等到以后需要的时候,再让会话^绑定"“其他窗口
终端复用器软件就是会话与窗口的"解绑”"工具,将它们彻底分离。
(1)它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
(2)它可以让新窗口"接入"已经存在的会话。
(3)它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
(4)它还支持窗口任意的垂直和水平拆分。
类似的终端复用器还有Screen,Tmux

1.7.7.1 screen 命令:

利用 screen 可以实现会话管理,如:新建会话,共享会话
注意:CentOS 7来自于 base 源,CentOS 8 来自于 epel 源
范例:安装 screen

# CentOS7 安装 screen 软件
$ yum install -y screen# CentOS8 安装 screen 软件
$ dnf install -y epel-release
$ dnf install -y screen
1.7.7.2 tmux 命令:


Tmux 是一个终端复用器(Terminal Multiplexer),类似 screen,但是要易用,也要强大。
Tmux就是会话与窗口的"解绑""工具,将它们彻底分离,功能如下
安装

# 安装Tmux
$ yum install -y tmux

启动与退出

$ tmux
$ exit
[exited]

Tmux 窗口有大量的快捷键,所有快捷键都要通过前缀唤起。默认的前缀是 Ctrl + B,即先按下 Ctrl + B,快捷键才会生效。帮助命令的快捷键是 Ctrl + B , 然后,按下 Q 键,就可以退出帮助。
新建会话
第一个启动的 Tmux 窗口,编号为 0,第二个窗口的编号为 1,以此类推。这些窗口对应的会话,就是 0 号会话、1 号会话。使用编号区分会话,不太直观,更好的方法是为会话起名。下面命令新建一个指定名称的会话。

tmux new -s <seesion-name>

Tmux ls 或者 Ctrl + B,S 可以查看所有的 Tmux 会话。

tmux ls
tmux list-session

分离会话
在 Tmux 窗口中,按下 Ctrl + B 或者输入 tmux detach 命令,就会将当前会话与窗口分离。

tmux detach

接入会话
tmux attach 命令用于重新接入某个已存在的会话。

tmux attach -t <seesion-name>

范例:

tmux attach -t 0

杀死会话
tmux kill-session 命令用于杀死某个会话。

tmux kill-session -t <session-name>

切换会话
tmux switch 命令用于切换会话。

tmux switch -t <session>

可以将窗口分成多个窗格(pane),每个窗格运行不同的命令
上下分窗格

tmux split-window
Ctrl + B , "

左右分窗格

tmux split-window -h
Ctrl + B , %

窗格快捷键
Ctrl + B %:划分左右两个窗格。
Ctrl + B ":划分上下两个窗格。
Ctrl + B :光标切换到其他窗格。 是指向要切换到下方窗格,就按方向键。
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 + :按箭头方向调整窗格大小。
Ctrl + B q :显示窗格编号。
窗口管理
除了将一个窗口划分成多个窗格,Tmux 也允许新建多个窗口。
新建窗口
tmux new-windows 命令用来创建新窗口。

tmux new-windows

新建一个指定名称的窗口

tmux new-windows -n <windows-name>

切换窗口

tmux select-windows 命令用来切换窗口

切换到指定编号的窗口

tmux select-windows -t <windows-number>

切换到指定名称的窗口

tmux select-windows -t <windows-name>

列出所有快捷键,及其对应的 Tmux 命令

tmux list-keys

列出所有 Tmux 命令及其参数

tmux list-commands

1.7.8 输出信息 echo

1.7.8.1 echo 基本用法

echo 命令可以将后面跟的字符进行输出
功能:显示字符,echo 会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开,并在最后加上换行符号。
语法:
echo [-neE] [字符串]
选项:
显示变量

echo "$VAR_NAME"#变量会替换,弱引用
echo '$VAR_NAME'#变量不会替换,强引用

启用命令选项 -e,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出;
范例:

## 字体颜色
31:红色
32:绿色
33:黄色
34:蓝色
35:粉色
36:浅蓝色
37:白色
# ----- #
## 背景颜色
41:红色背景
42:绿色背景
43:黄色背景
44:蓝色背景
45:粉色背景
46:浅蓝色背景
47:白色背景
# ----- #$ echo -e '\033[43;41;5m magedu \e[0m'
$ echo -e "\E[1;31mwww.kubesphere.com\E[0m"
$ echo -e '\033[31m hello \033[0m'$ echo -e "\033[1;31mWarning\033[0m\a"
Warning
# 闪烁
$ echo -e "\033[1;5;31mWarning\033[0m\a"
Warning# 举例:echo 基本用法
$ echo -e "a\x0Ab"
a
b
$ echo -e "\E[43;31;1;5mwww.kubesphere.com\E[0m"
$ echo -e "\x57\x41\x4E\x47"
WANG$ echo \$PATH
$PATH$ echo \
$ echo \\
$ echo \\\
$ echo \\\\$ echo "$PATH"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
$ echo '$PATH'
$PATH
1.7.8.2 echo 高级用法

在终端中,ANSI 定义了用于屏幕显示的 Escape 屏幕控制码
具有颜色的字符,其格式如下:
“\033[字符背景颜色;字体颜色m字符串\033[0m”
“\E[字符背景颜色;字体颜色m字符串\E[0m”
\033[30m — \033[37m 设置前景色
\033[40m — \033[37m 设置背景色

# 字符背景颜色范围:40 -- 47
40:黑色
41:红色
42:绿色
43:黄色
44:蓝色
45:紫色
46:深绿
47:白色# 字体颜色范围:30 -- 37
30:黑色
31:红色
32:绿色
33:黄色
34:蓝色
35:紫色
36:深绿
37:白色

加颜色只是以下控制码中的一种,下面是常见的一些ANSI 控制码:

033[Om			关闭所有属性
\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			保存光标位置
1033[u			恢复光标位嚣
\033[?25l		隐藏光标
\033[?25h		显示光标
\033[2J\033[0;0H	清屏且将光标置顶

1.8 字符集和编码

许多场合下,字符集与编码这两个概念常被混为一谈,但两者是有差别的。字符集与字符集编码是两个不同是面的概念charset是character set的简写.即字特集,即二进利和字待的对应关系,不关注最终的存储形式
encoding是chaiset encoding的简写,即字将集编码,简称编码、实现如诃将字符转化为实际的二进制进行存佬或相反,编郅决定了空间的使用的大少

1.8.1 ASCII 码

计算机内部,所有信息最终都是一个二进制值。上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一的规定,即ASCII(American Standard Code for Information Interchange)码。ASCII 码一共规定了 128 个字符的编码,占用了一个字节的后面7位,最前面的一位统一规定为0。

范例:查看 ASCII 表

$ yum install -y man-pages
$ man ascii


一个字节由八个二进制组成,一个十六进制由四个二进制组成,一个八进制由三个二进制组成。

# 查看文本文件的格式
$ file test.txt 
test.txt: ASCII text
$ file windows.txt 
windows.txt: ASCII text, with CRLF line terminators# 为了节约计算机空间
$ cat linux.txt 
a
b
c
$ hexdump -C linux.txt
00000000  61 0a 62 0a 63 0a                                 |a.b.c.|
00000006$ cat windows.txt 
a
b
c
$ hexdump -C windows.txt
00000000  61 0d 0a 62 0d 0a 63                              |a..b..c|
00000007# 可以使用工具将windows格式和linux格式进行相互转换
$ yum install -y dos2unix
# windows格式转换为linux格式
$ dos2unix windows.txt 
dos2unix: converting file windows.txt to Unix format ...
$ hexdump -C windows.txt 
00000000  61 0a 62 0a 63                                    |a.b.c|
00000005
# linux格式转换为windows格式
$ unix2dos windows.txt 
unix2dos: converting file windows.txt to DOS format ...
$ hexdump -C windows.txt 
00000000  61 0d 0a 62 0d 0a 63                              |a..b..c|
00000007

1.8.2 Unicode

用于表示世界上所有语言中的所有字符,称为万国码。每一个符号都给予了一个独一无二的编码数字,Unicode 是一个很大的集合,现在的规模可以容纳100多万个符号。Unicode 仅仅只是一共字符集,规定了每个字符对应的二进制代码,至于这个二进制代码如何存储则没有规定。
由于计算机时美国人发明的,因此,最早只有127各字母被编码到计算机里,即ASCII编码,但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。全世界有上百种语言,日本把日文编到了Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准,就会不可避免的出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。
Unicode 编码方案:

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 码来填充。(1个十六进制需要4个二进制表示)
编码转换和查询参考连接:
http://www.chi2ko.com/tool/CJK.htm
https://javawind.net/tools/native2acsii.jsp?action=transform
http://tool.oschina.net/encode
http://home.unicode.org/
https://unicode.yunser.com/unicode
http://web.chacuo.net/charsetescape
https://www.bejson.com/convert/unicode_chinese/
Unicode 和 UTF-8

Unicode 符号范围(十六进制)UTF-8 编码方式(二进制)
0000 0000-0000 007F0xxxxxxx
0000 0080-0000 07FF110xxxxx 10xxxxxx
0000 0800-0000 FFFF1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

范例:Unicode 转换为 UTF-8
“汉”的 Unicode 码 0x6C49(110 110001 001001),需要三个字节存储,格式为:1110xxxx 10xxxxxx 10xxxxxx,从后向前依次填充对应的格式中的x,多出来的 x 用 0 补,得出 UTF-8 编码为 11100110 10110001 10001001。
“马”的 Unicode 码 0x9A6C(1001 101001 101100),需要三个字节存储,格式为:1110xxxx 10xxxxxx 10xxxxxx,从后向前依次填充对应的格式中的x,多出来的 x 用 0 补,得出 UTF-8 编码为 11101001 10101001 10101100。
范例:修改LANG变量实现中文语言提示

$ echo $LANG 
en_US.UTF-8
$ kubesphere
-bash: kubesphere: command not found# 更改系统使用编码
$ LANG=zh_CN.UTF-8
$ kubesphere
-bash: kubesphere: 未找到命令

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

1.9.1 命令行扩展: 和$()

把一个命令的输出打印给另一个命令的参数。
$(COMMAND) 或者 COMMAND
范例:比较 " "、’ ’ 、 三者区别

$ echo "echo $(hostname)"
echo docker.kubesphere.io
$ echo 'echo $(hostname)'
echo $(hostname)
$ echo `echo $(hostname)`
docker.kubesphere.io$ echo "echo $HOSTNAME"
echo docker.kubesphere.io
$ echo 'echo $HOSTNAME'
echo $HOSTNAME
$ echo `echo $HOSTNAME`
docker.kubesphere.io# 结论:
单引号:强引用,六亲不认,变量和命令都不识别,都当成了昔通的字符串,"最傻"
双引号:弱引用,不能识别给令,可以识别度量,"半慢不精"
反向单引号:里面的内容必须是能执行的命令并且有输出信息,变量和命令都识别,并且会将反向单引号的内容当成命令进行执行后,再交抬调用反向单引号的命令继续,"最聪明"

范例:

$ echo "This system"s name is $(hostname)"
This system"s name is docker.kubesphere.io
$ echo "I am `whoami`"
I am root
$ touch $(date +%F).log
$ ls -l
total 0
-rw-r--r-- 1 root root 0 May  3 18:02 2022-05-03.log
$ touch `hostname`-`date +%F`.log
$ ls -l
total 0
-rw-r--r-- 1 root root 0 May  3 18:02 2022-05-03.log
-rw-r--r-- 1 root root 0 May  3 18:02 docker.kubesphere.io-2022-05-03.log
$ touch `date +%F_%H-%M-%S`.log
$ touch `date -d '-1 day' +%F`.log
$ touch `hostname`_`date +%F_%T`.log
$ ls -l
total 0
-rw-r--r-- 1 root root 0 May  3 18:05 2022-05-02.log
-rw-r--r-- 1 root root 0 May  3 18:05 2022-05-03_18-05-18.log
-rw-r--r-- 1 root root 0 May  3 18:02 2022-05-03.log
-rw-r--r-- 1 root root 0 May  3 18:09 docker.kubesphere.io_2022-05-03_18:09:13.log
-rw-r--r-- 1 root root 0 May  3 18:02 docker.kubesphere.io-2022-05-03.log

范例:$() 和

$ ls -l `echo `date +%F`.txt`
-bash: .txt: command not found
ls: cannot access date: No such file or directory
ls: cannot access +%F: No such file or directory$ ls -l $(echo $(date +%F).log)
-rw-r--r-- 1 root root 0 May  3 18:02 2022-05-03.log$ ls -l `echo $(date +%F).log`
-rw-r--r-- 1 root root 0 May  3 18:02 2022-05-03.log$ ls -l $(echo `date +%F`.log)
-rw-r--r-- 1 root root 0 May  3 18:02 2022-05-03.log

1.9.2 括号扩展:{ }

{ } 可以实现打印重复字符串的简化形式
{元素1,元素2,元素3}
{元素1…元素2}
范例:

$ echo file{1,3,5} 结果为:file1 file3 file5
$ rm -rf file{1,3,5}
$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
$ echo {a..z}
$ echo {1..10..2}
1 3 5 7 9
$ echo {000..20..2}
000 002 004 006 008 010 012 014 016 018 020$ ls -l /sys/class/scsi_host/host{0..2}/scan
--w------- 1 root root 4096 May  3 18:25 /sys/class/scsi_host/host0/scan
--w------- 1 root root 4096 May  3 18:25 /sys/class/scsi_host/host1/scan
--w------- 1 root root 4096 May  3 18:25 /sys/class/scsi_host/host2/scan

范例:

$ echo {000..20..2}
000 002 004 006 008 010 012 014 016 018 020
$ cho {a..z..2}
a c e g i k m o q s u w y
$ echo {A..z}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [  ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z
$ echo {A..a}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [  ] ^ _ ` a

范例:关闭和启用 {} 的扩展功能

$ echo $-
himBH
$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
$ set +B
$ echo $-
himH
$ echo {1..10}
{1..10}$ set -B
$ echo $-
himBH

1.10 Tab 键补全

Tab 键可以实现命令及路径等补全,提高输入效率,避免出错;

1.10.1 命令补全

bash-completion
yum install -y bash-completion
注意:用户给定的字符串只有一条唯一对应的命令,直接补全,否则,再次 Tab 会给出列表
范例:

$ nmcli connection 2Tab键
add      clone    delete   down     edit     export   help     
import   load     modify   monitor  reload   show     up

1.10.2 路径补全

把用户给出的字符串当作路径开头,并在其指定的上级目录下搜索以指定的字符串开头的文件名
如果唯一:则直接补全
否则,再次 Tab 会给出列表。

1.10.3 双击Tab键

1.11 命令行历史

当执行命令后,系统默认会在内存记录执行过的命令
当用户正常退出时,会将内存的命令历史存放对应历史文件中,默认是~/.bash_history
登录进 Shell 后新执行的命令只会记录在缓存中
登录进 Shell 后新执行的命令只会记录在内存的缓存区中; 这些命令会用户退出时“追加”至命令文件。
利用命令历史,可以用它来重复执行命令,提高输入效率
命令:history

history [-c] [-d offset] [n]
history -anrw [filename]
history -ps arg [arg...]

常见的选项:

  • -c :清空命令历史
  • -d offset :删除历史中指定的第 offset 个命令
  • n :显示最近的 n 条历史
  • -a :追加本次会话新执行的命令历史列表至命令文件
  • -r :读历史文件附加到指定的历史文件
  • -w :保存历史列表到指定的历史文件
  • -n :读历史文件中未读过的行到历史列表
  • -p :展开历史参数成多行,但是不存在历史列表中
  • -s :展开历史参数成一行,附加在历史列表后

命令历史相关环境变量

  • HISTSIZE:命令历史记录的条数
  • HISTFILE:指定历史文件,默认未 ~/.bash_history
  • HISTILSIZE:命令历史文件记录历史的条数
  • HISTTIMEFORMAT="%F %T ":显示时间
  • HISTGNORE=“str1:str2* …”:忽略 str1 命令,str2 开头的历史
  • HISTCONTROL:控制命令历史的记录方式。
    ignoredups :是默认值,可以忽略重复的命令,连续并且相同为“重复” ;
    ignorespace :忽略所有以空白开头的命令;
    ignoreboth :相当于 ignoredups 和 ignorespace 的组合;
    erasedups :删除重复命令
  • 环境变量的查看使用:man bash 进入手册后使用文本搜索 /history

持久保存变量
范例:

$ cat .bash_profile
# .bash_profile# Get the aliases and functions
if [ -f ~/.bashrc ]; then. ~/.bashrc
fi# User specific environment and startup programsPATH=$PATH:$HOME/binexport PATH
export HISTCONTROL=ignoreboth
export HISTSIZE=100000
export HISTTIMEFORMAT="%F %T "

1.12 调用命令行历史

# 重复前一个命令方法
重复前一个命令使用上方向键,并回车执行;
按!!并回车执行;
输入!-1并回车执行;
按Ctrl + P并回车执行。!:0 :执行前一条命令(去除参数)
Ctrl + n:显示当前历史中的下一条命令,但是不执行
Ctrl + j:执行当前命令
!n:执行history命令输出对应序号n的命令
!-n:执行history历史中倒数第n个命令!string:重复前一个以”string”开头的命令
!?string:重复前一个包含string的命令
! string:p:仅仅打印命令历史,而不执行
!$:p:打印输出!$(上一条命令的最后一个参数)的内容
!*:p:打印输出!*(上一条命令的所有参数)的内容
^string:删除上一条命令中的第一个string
^string1^string:将上一条命令中的第一个string1替换为string2
!:gs/string1/string2:将上一条命令中所有的string1都替换为string2使用up(向上)和down(向下)键来上下浏览从前输入的命令
Ctrl + r来在命令历史中搜索命令:
(revese-i-search)`’:
Ctrl + g:从历史搜索模式退出# 要重新调用前一个命令中的最后一个参数
!$:		:表示
Esc,.	 :(点击Esc键后松开,然后点击.键)
Alt+.	 :(按住Alt键的同时点击.键)# 调用历史参数
Command !^ (利用上一个命令的第一个参数做cmd的参数)
Command !$ (利用上一个命令的最后一个参数做cmd的参数)
Command !* (利用上一个命令的全部参数做cmd的参数)
Command!:n(利用上一个命令的第n个参数做cmd的参数)
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开头的命令,并获取它的所有参数)

1.13 Bash的快捷键

* Ctrl + l	:清屏,相当于clear命令
Ctrl + o		:执行当前命令,并重新显示本命令
* Ctrl + s	:阻止屏幕输出,锁定
* Ctrl + q	:允许屏幕输出
* Ctrl + c	:终止命令
* Ctrl + z	:挂起命令* Ctrl + a	:光标移动到命令行首,相当于Home
* Ctrl + e	:光标移动到命令行尾,相当于End
Ctrl + f		:光标向右移动一个字符
Ctrl + b		:光标向左移动一个字符
Alt + f			:光标向右移动一个单词尾
Alt + b			:光标向左移动一个单词首
Ctrl + xx		:光标在命令行首和光标之间移动* Ctrl + u	:从光标处删除至命令行首
* Ctrl + k	:从光标处删除至命令行尾
* Alt + r		:删除当前整行
Ctrl + w		:从光标处向左删除至单词首
Alt + d			:从光标处向右删除至单词尾
Ctrl + d		:删除光标处的一个字符
Ctrl + h		:删除光标前的一个字符
Ctrl + y		:将删除的字符粘贴至光标后Alt + c			:从光标处开始向右更改为首字母大写的单词
Alt + u			:从光标处开始,将右边一个单词更改为大写
Alt + l			:从光标处开始,将右边一个单词更改为小写
Ctrl + t		:交换光标处和之前的字符位置
Alt + t			:交换光标处和之前的单词位置
Alt + #			:提示输入指定字符后,重复显示该字符 # 次

注意:Alt 组合快捷键经常和其他软件冲突
范例:Xshell 中启动 Alt 键

2 获取帮助

获取帮助的能力决定了技术的能力!

多层次的帮助

2.1 whatis

whatis 使用数据库来显示命令的简短描述
此工具在系统刚安装后,不可立刻使用,需要制作数据库
执行下面命令生成数据库

# CentOS7 版本以后
mandb # CentOS6 版本之前
makewhatis

范例:

$ whatis cal 
cal (1)              - display a calendar
cal (1p)             - print a calendar
$ man -f cal
cal (1)              - display a calendar
cal (1p)             - print a calendar

范例:

$ whatis ls
ls: nothing appropriate.# 生成man相关数据库
$ mandb
Processing manual pages under /usr/share/man...
Updating index cache for path `/usr/share/man/man4'...Wait...done
Checking for stray cats under /usr/share/man...
...省略...
$ whatis ls
ls (1)               - list directory contents
ls (1p)              - list directory contents

2.2 查看命令的帮助

2.2.1 内部命令帮助

范例:

$ type history 
history is a shell builtin
$ help history 
history: history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]
...

2.2.2 外部命令及软件帮助

2.3 外部命令的 --help 或 -h 选项

显示用法总结和参数列表,使用的大多数,但是并非所有的。
范例:

$ 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.$ cal -h
Usage:cal [options] [[[day] month] year]$ strace --help
strace: invalid option -- '-'
Try 'strace -h' for more information.$ openssl --help
openssl:Error: '--help' is an invalid command.$ date -h
date: invalid option -- 'h'
Try 'date --help' for more information.$ shutdown -h
Shutdown scheduled for Tue 2022-05-03 20:31:04 CST, use 'shutdown -c' to cancel.

格式说明:

2.3.1 练习

# 1.显示当前时间,格式:2016-06-18 10:20:30
$ date +"%F %T"
2021-04-29 16:58:44# 2.显示前天是星期几
$ date -d '-2 day' +%u
2# 3.设置当前日期为 2019-08-07 06:05:10
$ date 080706052019.10
Wed Aug 7 06:05:10 CST 2019

2.4 man 命令

man 提供命令帮助的文件,手册页存放在 /usr/share/man
几乎每个命令都有 man 的"页面"
中文 man 需要安装包
man 页面分组
不同类型的帮助成为不同的“章节”,统称为 Linux 手册,man 1 man
1 Executable programs or shell commands
2 System calls (functions provided by the kernel)
3 Library calls (functions within program libraries)
4 Special files (usually found in /dev)
5 File formats and conventions eg /etc/passwd
6 Games
7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)
8 System administration commands (usually only for root)
9 Kernel routines [Non standard]
man 命令的配置文件

# CentOS6之前版 man的配置文件
/etc/man.config
# CentOS7之后版 man的配置文件
/etc/man_db.conf
# ubuntu man的配置文件
/etc/manpath.config

格式:

MANPATH /PATH/TO/SOMEWHERE # 指明man文件搜索位置

也可以指定位置下搜索COMMAND命令的手册页并显示

man -M /PATH/TO/SOMEWHERE COMMAND

查看man手册页

$ man --help
Usage: man [OPTION...] [SECTION] PAGE...
man [章节] keyword

man 帮助段落说明
man 命令的操作方法:使用 less 命令实现
常用选项

man -a keyword
# 列出所有匹配的页面,使用 whatis 数据库
man -k keyword
man -f keyword# 举例:
$ man -f ls
ls (1)               - list directory contents
ls (1p)              - list directory contents
man -w [章节] keyword

范例:

$ yum install -y man-pages
$ man -w 1 passwd
/usr/share/man/man1/passwd.1.gz$ whatis passwd
sslpasswd (1ssl)     - compute password hashes
passwd (1)           - update user's authentication tokens
passwd (5)           - password file$ man lssl openssl-passwd
$ man 7 ascii
$ man 7 utf8

范例:查看passwd 相关命令和文件,man帮助文件路径

$ whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz

练习:

# 1.在本机字符终端登录时,除了显示原有信息外,再显示当前登录终端号,主机名和当前时间
# 可以使用软件将图形转换为字符,ASCIIGenerator
$ cat /etc/issue
The tty is \l
The hostname is \n
The time is \t
=================================================
\S
Kernel \r on an \m# 2.今天18:30自动关机,并提示用户
$ shutdown 18:30 "The system will shutdown autocatically at 20:30 tonight,please save your file"

2.5 info

man 常用于命令参考,GNU 工具 info 适合通用文档参考;
没有参考,列出所有的页面;
info 页面的结构就像一个网站;
每一页分为“节点”;
链接节点之前 *
info 命令格式:

info [ 命令 ]

导航 info 页:

2.6 命令自身提供的官方使用指南

Applications → Documentation → help(CentOS 7)
System → help(CentOS 6)

/usr/share/doc

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

2.7.1 通过在线文档获取帮助

http://www.github.com
http://www.kernel.org/doc/html/latest/
http://httpd.apache.org
http://www.nginx.org/
https://mariadb.com/kb/en
https://dev.mysql.com/doc/
https://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

2.7.2 Linux官方在线文档和知识库

通过发行版官方的文档光盘或者网站可以获取安装指南,部署指南,虚拟化指南等。

2.7.3 红帽全球支持服务

rhn.redhat.com 或者本地卫星服务器 / 代理服务器
RHN 账号为及其注册和基于网络管理的 RHN 用户
sosreport 收集所有系统上的日志信息的工具,并自动打包压缩包,方便技术支持人员和红帽全球支持提供分析问题依据。
范例:

$ yum install -y sos
$ sosreport
Please note the 'sosreport' command has been deprecated in favor of the new 'sos' command, E.G. 'sos report'.
Redirecting to 'sos report 'sosreport (version 4.0)This command will collect diagnostic and configuration information from
this CentOS system and installed applications.An archive containing the collected information will be generated in
/var/tmp/sos.5rr_xr0d and may be provided to a CentOS support
representative.Any information provided to CentOS will be treated in accordance with
the published support policies at:https://www.centos.org/...省略...Finishing plugins              [Running: selinux]                                       ]ger]Finished running plugins                                                               
Creating compressed archive...Your sosreport has been generated and saved in:/var/tmp/sosreport-CentOS8-Server-2022-05-03-gldmows.tar.xzSize	15.74MiBOwner	rootmd5	aa24e602e6582f2633126f73c14c863bPlease send this file to your support representative.

2.8 相关网站和搜索

http://www.google.com
OpenStack filetype:pdf
rhca site:redhat.com/docs
http://bing.com
http://www.baidu.com
http://www.slideshare.net

2.9 安装中文的 man 帮助文档

# 1.下载源码
源码网址 https://src.fedoraproject.org/repo/pkgs/man-pages-zh-CN/
下载源码 wget https://src.fedoraproject.org/repo/pkgs/man-pages-zh-CN/v1.5.2.tar.gz/1bbdc4f32272df0b95146518b27bf4be/v1.5.2.tar.gz[root@localhost opt]# wget  https://src.fedoraproject.org/repo/pkgs/man-pages-zh-CN/manpages-zh-1.5.1.tar.gz/13275fd039de8788b15151c896150bc4/manpages-zh-1.5.1.tar.gz# 2.解压并安装
[root@localhost opt]# tar xf manpages-zh-1.5.1.tar.gz
[root@localhost opt]# cd manpages-zh-1.5.2/
[root@localhost manpages-zh-1.5.1]# ./configure --disable-zhtw  --prefix=/usr/local/zhman
[root@localhost manpages-zh-1.5.1]# make && make install# 3.为了不抵消man,我们新建cman命令作为中文查询
[root@localhost man1]# cd ~
[root@localhost ~]# echo "alias cman='man -M /usr/local/zhman/share/man/zh_CN' " >>.bash_profile
[root@localhost ~]# source .bash_profile# 4.使用中文man查询命令
[root@localhost ~]# cman ls

1 Linux 基础

1.1 用户类型

1.2 终端 Terminal


设备终端:键盘,鼠标,显示器

1.2.1 终端类型

1.2.2 查看当前的终端设备

tty 命令可以查看当前所在的终端
范例:

# tty 可以查看当前所在的终端
$ tty
/dev/pts/1
$ who am i
root     pts/1        2022-05-03 01:37 (120.229.46.163)
$ who
root     pts/0        2022-05-03 01:30 (120.229.46.163)
root     pts/1        2022-05-03 01:37 (120.229.46.163)
$ w01:47:52 up 4 days, 14:35,  2 users,  load average: 0.04, 0.08, 0.06
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    120.229.46.163   01:30    8.00s 14:17   0.02s vim /etc/hostna
root     pts/1    120.229.46.163   01:37    0.00s  0.02s  0.00s w

1.3 交互式接口

交互式接口:启动终端后,在终端设备附加一个交互式应用程序

1.3.1 交互式接口类型

1.3.2 什么是shell


硬件:计算机设备的硬件,例如:处理器,内存,存储等等硬件设备;
内核:即是操作系统的核心;内核是操作系统最基本的部分,但不是操作系统的全部。内核负责管理系统的进程、内存、设备驱动程序,文件和网络系统,决定着系统的性能和稳定性。而操作系统一般包括内核、驱动程序、接口库等等组成部分。
系统调用:用户想要使用操作系统是需要通过接口来访问的,这些接口就是系统调用。
Shell 是 Linux 系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。Shell 也被称为 Linux 的命令解释器(Command Interpreter)Shell 是一种高级程序设计语言。
Shell本身就是一个程序,将用户输入的命令行拆解为"命令名" 与 “参数”。接着,根据命令名找到对应要执行的程序,对被执行的程序进行初始化,然后将刚才解析出来的参数传递给该程序并执行
Shell 是一种高级程序设计语言,提供了变量,函数,条件判断,循环等开发语言的功能
由于Shell 本身是个程序,所以它可以被任何用户自己开发的各种Shell所代替。

1.3.3 各种Shell

1.3.4 Bash Shell

GNU Bourne-Agent Shell(bash)是GNU计划中最重要的工具软件之一,目前也是Linux标准的shell,与sh 兼容。
显示当前使用的shell

echo $SHELL

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

cat /etc/shells
# 安装shell
yum install -y csh # 可以在/etc/shells中查看新安装shell

1.4 设置主机名

# 临时生效,可以生效,但是系统重启后无法持久保存
hostname NAME# 持久生效,支持CentOS7和Ubuntu18.04以上的版本使用
hostnamectl set-hostname NAME

范例:

$ hostnamectl set-hostname bj-yz-k8s-node01-100-10.kubesphere.com# 主机名不要使用下划线
$ hostname centos7_3.kubesphere.io
hostname: the specified hostname is invalid

注意:
范例:

$ hostnamectl set-hostname docker.kubesphere.io
# 主机名保存的配置文件
$ cat /etc/hostname
docker.kubesphere.io# 当使用非法的主机名时,可能会导致某些服务启动失败的情况
$ hostname centos8.1 # 主机名不支持小数点
$ systemctl restart postfix
Job for postfix.service failed because the control process exited with error code. 
See "systemctl status postfix.service" and "journalctl -xe" for details.

1.5 命令提示符 prompt

登录 Linux 后,默认的系统命令提示符毫无没有个性,无法明显辨别生产和测试回家,而导致误操作,可以通过修改 PS1 变量实现个性的提示符格式,避免这种低级错误发生。
范例:默认的提示符

# CentOS默认的命令提示符
[root@centos8 ~]## Ubuntu默认的命令提示符
root@docker:~##:管理员
$:普通用户

显示操作符格式

[root@centos8 ~]# echo $PS1
[\u@\h \W]\$

修改提示符格式范例

# \[\e[1;5;41;33m\]中 1:代表高亮显示;5:代表闪烁;41;提示符的背景颜色;33:提示符颜色;0m:终止颜色渲染
PS1="\[\e[1;5;41;33m\][\u@\h \W]\\$\[\e[0m\]"PS1="\[\e[1;32m\][\[\e[0m\]\t \[\e[1;33m\]\u\[\e[36m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"

提示符格式说明:
范例:持久保存 PS1 格式

# CentOS系统持久保存提示符格式
echo 'PS1="\[\e[1;32m\][\[\e[0m\]\t \[\e[1;33m\]\u\[\e[36m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$ "' > /etc/profile.d/env.sh
echo 'PS1="\[\e[1;33m\][\u@\h \W]\\$\[\e[0m\] "' > /etc/profile.d/env.sh
source /etc/profile.d/env.sh# Ubuntu系统持久保存提示符格式
echo 'PS1="\[\e[1;32m\][\[\e[0m\]\t \[\e[1;33m\]\u\[\e[36m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$ "' >> .bashrc
echo 'PS1="\[\e[1;33m\][\u@\h \W]\\$\[\e[0m\] "' >> .bashrc
tail -n1 .bashrc

1.6 执行命令

1.6.1 执行命令过程

输入命令后回车,提请 Shell 程序找到键入命令所对应的可执行程序或者代码,并由其分析后提交给内核分配资源将其运行起来。

1.6.2 Shell中可执行的两类命令

区别指定的命令时内部或者外部命令

type COMMAND

范例:查看是否存在对应的内部命令和外部命令

$ type echo
echo is a shell builtin
# 查看是否存在对应的内部命令和外部命令
$ type -a echo
echo is a shell builtin # 内部命令
echo is /usr/bin/echo
$ type -a type
type is a shell builtin # 内部命令
type is /usr/bin/type
$ type -a hostname
hostname is /usr/bin/hostname # 外部命令# 查看内部所有命令,内部命令是集成在Shell中的,不同的Shell集成的内部命令数量不同
$ enable
...
$ enable | wc -l 
61
1.6.2.1 内部命令相关

help 内部命令列表
enable 管理内部命令

$ enable help
# 禁用内部命令
$ enable -n help
$ enable -n
enable -n help
# 启用内部命令
$ enable help
1.6.2.2 执行外部命令

查看外部命令路径:

which -a |--skip-alias
whereis

Hash缓存表 系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在将执行之,如果不存在,将会去PATH路径下寻找,利用hash缓存表可大大提高命令的调用速率。
hash 命令常见用法:

# CentOS系统进行下载firefox
yum install -y firefox
export DISPLAY=10.0.0.1:0.0 # export DISPLAY=<IP网段>:0.0
firefox 
# 可能会需要进行下载相关依赖库
yum provides libGL.so.1 # <库名>
yum install -y libglvnd-glx
firefox # 直接运行即可# 如果使用mobaxterm工具连接CentOS
# 需要安装插件
yum install -y xorg-x11-xauth xorg-x11-fonts-* xorg-x11-font-utils xorg-x11-fonts-Type1 firefox
exit
firefox # 直接运行即可# Ubuntu系统进行下载firefox
apt install -y firefox
firefox # 直接运行即可

1.6.3 命令别名

alias cdnet='cd /etc/sysconfig/network-scripts/'
alias cdyum='cd /etc/yum.repos.d/'
alias nm='systemctl restart NetworkManager'
alias disepel='sed -ri /enabled/s/enabled=1/enabled=0/ /etc/yum.repos.d/base.repo'
alias egrep='egrep --color=auto'
alias epel='sed -ri /enabled/s/enabled=0/enabled=1/ /etc/yum.repos.d/base.repo'
alias fgrep='fgrep --color=auto'
alias i.='ls -d .* --color=auto'
alias lh='ls -lh --color=auto'
alias p='poweroff'
alias restart='systemctl restart '
alias restartnet='systemctlrestart network"
alias scandisk='echo "- - -" > /sys/class/scsi_host/host0/scan;\echo "- - -" > /sys/class/scsi_host/host1/scan;\echo "- - -" > /sys/class/scsi_host/host2/scan'
alias vie0='vim /etc/sysconfig/network-scripts/ifcfg-eth0'
alias vie1='vim /etc/sysconfig/network-scripts/ifcfg-eth1'
alias xzfgrep='xzfgrep --color=auto'
alias xzgrep=' xzgrep --color=auto'
alias yr='yum remove'
alias yy='yum -y install'
alias zegrep='zegrep --color=auto'
alias zfgrep='zfgrep --color=auto'
alias zgrep='zgrep --color=auto'

对于经常执行的较长的命令,可以将其定义成较短的别名,以方便执行
显示当前shell进程所有可用的命令别名 alias
定义别名NAME,其相当于执行命令VALUE

alias NAME='VALUE'

范例:扫描新加的磁盘

alias scandisk='echo "- - -" > /sys/class/scsi_host/host0/scan;\echo "- - -" > /sys/class/scsi_host/host1/scan;\echo "- - -" > /sys/class/scsi_host/host2/scan'
$ type scandisk
scandisk is aliased to `echo "- - -" > /sys/class/scsi_host/host0/scan;\echo "- - -" > /sys/class/scsi_host/host1/scan;\echo "- - -" > /sys/class/scsi_host/host2/scan'

范例:持久保存别名

$ vim ~/.bashrc
alias scandisk='echo "- - -" > /sys/class/scsi_host/host0/scan;\echo "- - -" > /sys/class/scsi_host/host1/scan;\echo "- - -" > /sys/class/scsi_host/host2/scan'

撤销别名:unalias

unalias [-a] name [name ...]
unalias -a  #取消所有别名

注意:在命令行中定义的别名,仅对当前的 Shell 进程有效;
如果想永久有效,要定义在配置文件中
编辑配置给出的新配置不会立刻生效,bash 进程重新读取配置文件

source /path/to/config_file
. /path/to/config_file

如果别名同原命令同名,如果想要执行原命令,可使用:

\ALIASNAME
"ALIASNAME"
'ALIASNAME'
command ALIASNAME
/path/command
$ alias hostname=who
$ hostname
root     pts/5        2022-05-02 13:05 (10.0.0.1)
$ \hostname
CentOS8-Server
$ 'hostname'
CentOS8-Server
# 撤销别名
$ unalias hostname

命令执行过程:命令别名 > 内部命令 > 命令Hash缓存 > 外部命令
第一次执行外部命令优先级:命令别名 > 内部命令 > Hash 缓存表 > 外部命令(查找$PATH路径)。

1.6.4 命令格式

COMMAND [OPTIONS…] [ARGUMENTS…]
COMMAND [COMMAND…] [COMMAND…] …
选项:用于启用或关闭命令的某个或某些功能
参数:命令的作用对象,比如:文件名,用户名等
范例:

$ id -u zzw
1000
$ ls -a | ls --all$ free -h | free --human$ ps aux

注意:

1.7 常用命令

1.7.1 查看硬件信息

1.7.1.1 查看CPU

lscpu 命令可以查看 CPU 信息
cat /proc/cpuinfo 也可以查看到
范例:

$ lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              4 # 4core
# 最多同时开4个同时执行的任务,一个任务占用一个内核
# 一般任务的数量和CPU内核的数量尽可能统一
# 因为,任务如果太多,会产生一个问题就是CPU会进行来回的切换
# CPU的个数就决定了它能同时执行任务的个数
On-line CPU(s) list: 0-3
Thread(s) per core:  1 # 每个core 有几个线程
Core(s) per socket:  2 # 每个槽位有2core
Socket(s):           2 # 服务器面板上有2个CPU槽位
NUMA node(s):        2 # nodes的数量
Vendor ID:           AuthenticAMD
BIOS Vendor ID:      AuthenticAMD
CPU family:          23
Model:               113
Model name:          AMD Ryzen 7 3700X 8-Core Processor
BIOS Model name:     AMD Ryzen 7 3700X 8-Core Processor
Stepping:            0
CPU MHz:             3600.013
BogoMIPS:            7200.02
Hypervisor vendor:   VMware
Virtualization type: full
L1d cache:           32K
L1i cache:           32K
L2 cache:            512K
L3 cache:            16384K
NUMA node0 CPU(s):   0,2,4,6 # 对应的core
NUMA node1 CPU(s):   1,3,5,7# 可以查看单独的CPU的信息
$ cat /proc/cpuinfo
1.7.1.2 查看内存的大小
$ freetotal        used        free      shared  buff/cache   available
Mem:        3799012      532704     1908780       10132     1357528     2967392
Swap:       4194300           0     4194300
# 展示人类可读的输出
$ free -htotal        used        free      shared  buff/cache   available
Mem:          3.6Gi       520Mi       1.8Gi       9.0Mi       1.3Gi       2.8Gi
Swap:         4.0Gi          0B       4.0Gi$ cat /proc/meminfo
MemTotal:        3799012 kB # 内存的总大小
MemFree:         1908852 kB # 内存可用的大小
MemAvailable:    2967464 kB
Buffers:             200 kB
Cached:          1095516 kB
...
1.7.1.3 查看硬盘和分区的情况
$ lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda       8:0    0  500G  0 disk
├─sda1    8:1    0    2G  0 part /boot
├─sda2    8:2    0  100G  0 part /
├─sda3    8:3    0  100G  0 part /data
├─sda4    8:4    0    1K  0 part
└─sda5    8:5    0    4G  0 part [SWAP]$ cat /proc/partitions
major minor  #blocks  name8       16  104857600 sdb8        0  524288000 sda8        1    2097152 sda18        2  104857600 sda28        3  104857600 sda38        4          1 sda48        5    4194304 sda5

1.7.2 查看系统版本信息

1.7.2.1 查看系统架构
$ arch
x86_64# 可以获取全部系统信息
$ getconf -a
$ getconf LONG_BITlscpu | grep Architecture
Architecture:        x86_64
1.7.2.2 查看内核版本
$ uname -r
4.18.0-305.3.1.el8.x86_64$ uname -a
Linux CentOS8-Server 4.18.0-305.3.1.el8.x86_64 
#1 SMP Tue Jun 1 16:14:33 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
1.7.2.3 查看操作系统发行版本
### CentOS查看操作系统发行版本
$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)$ cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"### lsb_release: command not found 解决方法:
$ yum install -y redhat-lsb-core
$ lsb_release -a
LSB Version:    :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description:    CentOS Linux release 7.9.2009 (Core)
Release:        7.9.2009
Codename:       Core### Ubuntu查看操作系统发行版本
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.2 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.2 LTS"
VERSION_ID="20.04"
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"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal$ cat /etc/issue
Ubuntu 20.04.2 LTS \n \l$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.2 LTS
Release:        20.04
Codename:       focal

范例:查看OS版本

$ lsb_release -is
Ubuntu$ lsb_release -cs
focal$ lsb_release -rs
20.04

1.7.3 日期和时间

Linux 的两种时钟:
相关命令:
范例:

$ date +%s
1651555049
$ date -d @`date +%s`
Tue May  3 13:17:45 CST 2022
$ date -d @1651555049
Tue May  3 13:17:29 CST 2022
$ date -d "2020-02-02" +%s
1580572800
$ clock --help
-s, --hctosys        set the system time from the RTC
-w, --systohc        set the RTC from the system time
# RTC:一般指实时时钟,是在主板集成电路芯片上的时间

范例:

$ ls -l /usr/sbin/clock
lrwxrwxrwx. 1 root root 7 Jan 21  2021 /usr/sbin/clock -> hwclock

时区

/etc/localtime### 设置时区
# 列出所有的时区
$ timedatectl list-timezones# 查看当前系统的时区情况
$ timedatectl statusLocal time: Tue 2022-05-03 13:27:34 CSTUniversal time: Tue 2022-05-03 05:27:34 UTCRTC time: Tue 2022-05-03 05:27:39Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: noNTP service: inactiveRTC in local TZ: no# 设置时区
$ timedatectl set-timezone Asia/Shanghai
$ ls -l /etc/localtime
lrwxrwxrwx. 1 root root 35 Jul 11  2021 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai

显示日历

# 显示当前月份的日历
$ cal 
# 显示整一年的日历
$ cal -y

范例:

$ cal 9 1752September 1752
Su Mo Tu We Th Fr Sa1  2 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
# 从1752年9月3日到1752年9月13日的11天并不存在。
# 抹掉这11天是由英国议会做出的决定。所以要计算某年每个月的天数的,除了要考虑是否是闰年以外,还要考虑1752年的9月。

1.7.4 关机和重启

关机:
重启:
关机或者重启:shutdown

shutdown [OPTIONS] ... [TIME] [MESSAGE]

-r : reboot 重启
-h :halt 关机
-c :cancel 取消 shutdown 选项
TIME :无指定,默认相当于 +1(CentOS 7)

$ uptime
13:46:43 up  7:38,  1 user,  load average: 0.00, 0.00, 0.00

1.7.5 用户登录信息查看命令

1.7.6 文本编辑

范例:创建登录提示文件 /etc/motd

$ yum install -y nano$ nano /etc/motd
welcome to kubepshere.docker

参考网站:https://bootschool.net/ascii-art

# 登录后提示信息
$ cat /etc/motd
welcome to kubepshere.docker//                          _ooOoo_                               //
//                         o8888888o                              //
//                         88" . "88                              //
//                         (| ^_^ |)                              //
//                         O\  =  /O                              //
//                      ____/`---'\____                           //
//                    .'  \\|     |//  `.                         //
//                   /  \\|||  :  |||//  \                        //
//                  /  _||||| -:- |||||-  \                       //
//                  |   | \\\  -  /// |   |                       //
//                  | \_|  ''\---/''  |   |                       //
//                  \  .-\__  `-`  ___/-. /                       //
//                ___`. .'  /--.--\  `. . ___                     //
//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
//      ========`-.____`-.___\_____/___.-`____.-'========         //
//                           `=---='                              //
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
//            佛祖保佑       永不宕机     永无BUG                 //# 登录前提示信息
$ cat /etc/issue
\S
Kernel \r on an \m

1.7.7 会话管理

命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称"窗口”),在里面输入命令,用户与计算机的这种临时的交互,称为一次会话”(session)
会话的一个重要特点是,窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完
一个典型的例子就是,SSH登录远程计算机,打开一个远程窗口执行命令。这时,网络突然断线,再次登录的时候,是找不回上一次执行的命令的。因为上一次SSH会话已经终止了,里面的进程也随之消失了。为了解决这个问题,会话与窗口可以’解绑︰窗口关闭时,会活并不终止,而是继续运行,等到以后需要的时候,再让会话^绑定"“其他窗口
终端复用器软件就是会话与窗口的"解绑”"工具,将它们彻底分离。
(1)它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
(2)它可以让新窗口"接入"已经存在的会话。
(3)它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
(4)它还支持窗口任意的垂直和水平拆分。
类似的终端复用器还有Screen,Tmux

1.7.7.1 screen 命令:

利用 screen 可以实现会话管理,如:新建会话,共享会话
注意:CentOS 7来自于 base 源,CentOS 8 来自于 epel 源
范例:安装 screen

# CentOS7 安装 screen 软件
$ yum install -y screen# CentOS8 安装 screen 软件
$ dnf install -y epel-release
$ dnf install -y screen
1.7.7.2 tmux 命令:


Tmux 是一个终端复用器(Terminal Multiplexer),类似 screen,但是要易用,也要强大。
Tmux就是会话与窗口的"解绑""工具,将它们彻底分离,功能如下
安装

# 安装Tmux
$ yum install -y tmux

启动与退出

$ tmux
$ exit
[exited]

Tmux 窗口有大量的快捷键,所有快捷键都要通过前缀唤起。默认的前缀是 Ctrl + B,即先按下 Ctrl + B,快捷键才会生效。帮助命令的快捷键是 Ctrl + B , 然后,按下 Q 键,就可以退出帮助。
新建会话
第一个启动的 Tmux 窗口,编号为 0,第二个窗口的编号为 1,以此类推。这些窗口对应的会话,就是 0 号会话、1 号会话。使用编号区分会话,不太直观,更好的方法是为会话起名。下面命令新建一个指定名称的会话。

tmux new -s <seesion-name>

Tmux ls 或者 Ctrl + B,S 可以查看所有的 Tmux 会话。

tmux ls
tmux list-session

分离会话
在 Tmux 窗口中,按下 Ctrl + B 或者输入 tmux detach 命令,就会将当前会话与窗口分离。

tmux detach

接入会话
tmux attach 命令用于重新接入某个已存在的会话。

tmux attach -t <seesion-name>

范例:

tmux attach -t 0

杀死会话
tmux kill-session 命令用于杀死某个会话。

tmux kill-session -t <session-name>

切换会话
tmux switch 命令用于切换会话。

tmux switch -t <session>

可以将窗口分成多个窗格(pane),每个窗格运行不同的命令
上下分窗格

tmux split-window
Ctrl + B , "

左右分窗格

tmux split-window -h
Ctrl + B , %

窗格快捷键
Ctrl + B %:划分左右两个窗格。
Ctrl + B ":划分上下两个窗格。
Ctrl + B :光标切换到其他窗格。 是指向要切换到下方窗格,就按方向键。
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 + :按箭头方向调整窗格大小。
Ctrl + B q :显示窗格编号。
窗口管理
除了将一个窗口划分成多个窗格,Tmux 也允许新建多个窗口。
新建窗口
tmux new-windows 命令用来创建新窗口。

tmux new-windows

新建一个指定名称的窗口

tmux new-windows -n <windows-name>

切换窗口

tmux select-windows 命令用来切换窗口

切换到指定编号的窗口

tmux select-windows -t <windows-number>

切换到指定名称的窗口

tmux select-windows -t <windows-name>

列出所有快捷键,及其对应的 Tmux 命令

tmux list-keys

列出所有 Tmux 命令及其参数

tmux list-commands

1.7.8 输出信息 echo

1.7.8.1 echo 基本用法

echo 命令可以将后面跟的字符进行输出
功能:显示字符,echo 会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开,并在最后加上换行符号。
语法:
echo [-neE] [字符串]
选项:
显示变量

echo "$VAR_NAME"#变量会替换,弱引用
echo '$VAR_NAME'#变量不会替换,强引用

启用命令选项 -e,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出;
范例:

## 字体颜色
31:红色
32:绿色
33:黄色
34:蓝色
35:粉色
36:浅蓝色
37:白色
# ----- #
## 背景颜色
41:红色背景
42:绿色背景
43:黄色背景
44:蓝色背景
45:粉色背景
46:浅蓝色背景
47:白色背景
# ----- #$ echo -e '\033[43;41;5m magedu \e[0m'
$ echo -e "\E[1;31mwww.kubesphere.com\E[0m"
$ echo -e '\033[31m hello \033[0m'$ echo -e "\033[1;31mWarning\033[0m\a"
Warning
# 闪烁
$ echo -e "\033[1;5;31mWarning\033[0m\a"
Warning# 举例:echo 基本用法
$ echo -e "a\x0Ab"
a
b
$ echo -e "\E[43;31;1;5mwww.kubesphere.com\E[0m"
$ echo -e "\x57\x41\x4E\x47"
WANG$ echo \$PATH
$PATH$ echo \
$ echo \\
$ echo \\\
$ echo \\\\$ echo "$PATH"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
$ echo '$PATH'
$PATH
1.7.8.2 echo 高级用法

在终端中,ANSI 定义了用于屏幕显示的 Escape 屏幕控制码
具有颜色的字符,其格式如下:
“\033[字符背景颜色;字体颜色m字符串\033[0m”
“\E[字符背景颜色;字体颜色m字符串\E[0m”
\033[30m — \033[37m 设置前景色
\033[40m — \033[37m 设置背景色

# 字符背景颜色范围:40 -- 47
40:黑色
41:红色
42:绿色
43:黄色
44:蓝色
45:紫色
46:深绿
47:白色# 字体颜色范围:30 -- 37
30:黑色
31:红色
32:绿色
33:黄色
34:蓝色
35:紫色
36:深绿
37:白色

加颜色只是以下控制码中的一种,下面是常见的一些ANSI 控制码:

033[Om			关闭所有属性
\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			保存光标位置
1033[u			恢复光标位嚣
\033[?25l		隐藏光标
\033[?25h		显示光标
\033[2J\033[0;0H	清屏且将光标置顶

1.8 字符集和编码

许多场合下,字符集与编码这两个概念常被混为一谈,但两者是有差别的。字符集与字符集编码是两个不同是面的概念charset是character set的简写.即字特集,即二进利和字待的对应关系,不关注最终的存储形式
encoding是chaiset encoding的简写,即字将集编码,简称编码、实现如诃将字符转化为实际的二进制进行存佬或相反,编郅决定了空间的使用的大少

1.8.1 ASCII 码

计算机内部,所有信息最终都是一个二进制值。上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一的规定,即ASCII(American Standard Code for Information Interchange)码。ASCII 码一共规定了 128 个字符的编码,占用了一个字节的后面7位,最前面的一位统一规定为0。

范例:查看 ASCII 表

$ yum install -y man-pages
$ man ascii


一个字节由八个二进制组成,一个十六进制由四个二进制组成,一个八进制由三个二进制组成。

# 查看文本文件的格式
$ file test.txt 
test.txt: ASCII text
$ file windows.txt 
windows.txt: ASCII text, with CRLF line terminators# 为了节约计算机空间
$ cat linux.txt 
a
b
c
$ hexdump -C linux.txt
00000000  61 0a 62 0a 63 0a                                 |a.b.c.|
00000006$ cat windows.txt 
a
b
c
$ hexdump -C windows.txt
00000000  61 0d 0a 62 0d 0a 63                              |a..b..c|
00000007# 可以使用工具将windows格式和linux格式进行相互转换
$ yum install -y dos2unix
# windows格式转换为linux格式
$ dos2unix windows.txt 
dos2unix: converting file windows.txt to Unix format ...
$ hexdump -C windows.txt 
00000000  61 0a 62 0a 63                                    |a.b.c|
00000005
# linux格式转换为windows格式
$ unix2dos windows.txt 
unix2dos: converting file windows.txt to DOS format ...
$ hexdump -C windows.txt 
00000000  61 0d 0a 62 0d 0a 63                              |a..b..c|
00000007

1.8.2 Unicode

用于表示世界上所有语言中的所有字符,称为万国码。每一个符号都给予了一个独一无二的编码数字,Unicode 是一个很大的集合,现在的规模可以容纳100多万个符号。Unicode 仅仅只是一共字符集,规定了每个字符对应的二进制代码,至于这个二进制代码如何存储则没有规定。
由于计算机时美国人发明的,因此,最早只有127各字母被编码到计算机里,即ASCII编码,但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。全世界有上百种语言,日本把日文编到了Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准,就会不可避免的出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。
Unicode 编码方案:

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 码来填充。(1个十六进制需要4个二进制表示)
编码转换和查询参考连接:
http://www.chi2ko.com/tool/CJK.htm
https://javawind.net/tools/native2acsii.jsp?action=transform
http://tool.oschina.net/encode
http://home.unicode.org/
https://unicode.yunser.com/unicode
http://web.chacuo.net/charsetescape
https://www.bejson.com/convert/unicode_chinese/
Unicode 和 UTF-8

Unicode 符号范围(十六进制)UTF-8 编码方式(二进制)
0000 0000-0000 007F0xxxxxxx
0000 0080-0000 07FF110xxxxx 10xxxxxx
0000 0800-0000 FFFF1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

范例:Unicode 转换为 UTF-8
“汉”的 Unicode 码 0x6C49(110 110001 001001),需要三个字节存储,格式为:1110xxxx 10xxxxxx 10xxxxxx,从后向前依次填充对应的格式中的x,多出来的 x 用 0 补,得出 UTF-8 编码为 11100110 10110001 10001001。
“马”的 Unicode 码 0x9A6C(1001 101001 101100),需要三个字节存储,格式为:1110xxxx 10xxxxxx 10xxxxxx,从后向前依次填充对应的格式中的x,多出来的 x 用 0 补,得出 UTF-8 编码为 11101001 10101001 10101100。
范例:修改LANG变量实现中文语言提示

$ echo $LANG 
en_US.UTF-8
$ kubesphere
-bash: kubesphere: command not found# 更改系统使用编码
$ LANG=zh_CN.UTF-8
$ kubesphere
-bash: kubesphere: 未找到命令

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

1.9.1 命令行扩展: 和$()

把一个命令的输出打印给另一个命令的参数。
$(COMMAND) 或者 COMMAND
范例:比较 " "、’ ’ 、 三者区别

$ echo "echo $(hostname)"
echo docker.kubesphere.io
$ echo 'echo $(hostname)'
echo $(hostname)
$ echo `echo $(hostname)`
docker.kubesphere.io$ echo "echo $HOSTNAME"
echo docker.kubesphere.io
$ echo 'echo $HOSTNAME'
echo $HOSTNAME
$ echo `echo $HOSTNAME`
docker.kubesphere.io# 结论:
单引号:强引用,六亲不认,变量和命令都不识别,都当成了昔通的字符串,"最傻"
双引号:弱引用,不能识别给令,可以识别度量,"半慢不精"
反向单引号:里面的内容必须是能执行的命令并且有输出信息,变量和命令都识别,并且会将反向单引号的内容当成命令进行执行后,再交抬调用反向单引号的命令继续,"最聪明"

范例:

$ echo "This system"s name is $(hostname)"
This system"s name is docker.kubesphere.io
$ echo "I am `whoami`"
I am root
$ touch $(date +%F).log
$ ls -l
total 0
-rw-r--r-- 1 root root 0 May  3 18:02 2022-05-03.log
$ touch `hostname`-`date +%F`.log
$ ls -l
total 0
-rw-r--r-- 1 root root 0 May  3 18:02 2022-05-03.log
-rw-r--r-- 1 root root 0 May  3 18:02 docker.kubesphere.io-2022-05-03.log
$ touch `date +%F_%H-%M-%S`.log
$ touch `date -d '-1 day' +%F`.log
$ touch `hostname`_`date +%F_%T`.log
$ ls -l
total 0
-rw-r--r-- 1 root root 0 May  3 18:05 2022-05-02.log
-rw-r--r-- 1 root root 0 May  3 18:05 2022-05-03_18-05-18.log
-rw-r--r-- 1 root root 0 May  3 18:02 2022-05-03.log
-rw-r--r-- 1 root root 0 May  3 18:09 docker.kubesphere.io_2022-05-03_18:09:13.log
-rw-r--r-- 1 root root 0 May  3 18:02 docker.kubesphere.io-2022-05-03.log

范例:$() 和

$ ls -l `echo `date +%F`.txt`
-bash: .txt: command not found
ls: cannot access date: No such file or directory
ls: cannot access +%F: No such file or directory$ ls -l $(echo $(date +%F).log)
-rw-r--r-- 1 root root 0 May  3 18:02 2022-05-03.log$ ls -l `echo $(date +%F).log`
-rw-r--r-- 1 root root 0 May  3 18:02 2022-05-03.log$ ls -l $(echo `date +%F`.log)
-rw-r--r-- 1 root root 0 May  3 18:02 2022-05-03.log

1.9.2 括号扩展:{ }

{ } 可以实现打印重复字符串的简化形式
{元素1,元素2,元素3}
{元素1…元素2}
范例:

$ echo file{1,3,5} 结果为:file1 file3 file5
$ rm -rf file{1,3,5}
$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
$ echo {a..z}
$ echo {1..10..2}
1 3 5 7 9
$ echo {000..20..2}
000 002 004 006 008 010 012 014 016 018 020$ ls -l /sys/class/scsi_host/host{0..2}/scan
--w------- 1 root root 4096 May  3 18:25 /sys/class/scsi_host/host0/scan
--w------- 1 root root 4096 May  3 18:25 /sys/class/scsi_host/host1/scan
--w------- 1 root root 4096 May  3 18:25 /sys/class/scsi_host/host2/scan

范例:

$ echo {000..20..2}
000 002 004 006 008 010 012 014 016 018 020
$ cho {a..z..2}
a c e g i k m o q s u w y
$ echo {A..z}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [  ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z
$ echo {A..a}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [  ] ^ _ ` a

范例:关闭和启用 {} 的扩展功能

$ echo $-
himBH
$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
$ set +B
$ echo $-
himH
$ echo {1..10}
{1..10}$ set -B
$ echo $-
himBH

1.10 Tab 键补全

Tab 键可以实现命令及路径等补全,提高输入效率,避免出错;

1.10.1 命令补全

bash-completion
yum install -y bash-completion
注意:用户给定的字符串只有一条唯一对应的命令,直接补全,否则,再次 Tab 会给出列表
范例:

$ nmcli connection 2Tab键
add      clone    delete   down     edit     export   help     
import   load     modify   monitor  reload   show     up

1.10.2 路径补全

把用户给出的字符串当作路径开头,并在其指定的上级目录下搜索以指定的字符串开头的文件名
如果唯一:则直接补全
否则,再次 Tab 会给出列表。

1.10.3 双击Tab键

1.11 命令行历史

当执行命令后,系统默认会在内存记录执行过的命令
当用户正常退出时,会将内存的命令历史存放对应历史文件中,默认是~/.bash_history
登录进 Shell 后新执行的命令只会记录在缓存中
登录进 Shell 后新执行的命令只会记录在内存的缓存区中; 这些命令会用户退出时“追加”至命令文件。
利用命令历史,可以用它来重复执行命令,提高输入效率
命令:history

history [-c] [-d offset] [n]
history -anrw [filename]
history -ps arg [arg...]

常见的选项:

  • -c :清空命令历史
  • -d offset :删除历史中指定的第 offset 个命令
  • n :显示最近的 n 条历史
  • -a :追加本次会话新执行的命令历史列表至命令文件
  • -r :读历史文件附加到指定的历史文件
  • -w :保存历史列表到指定的历史文件
  • -n :读历史文件中未读过的行到历史列表
  • -p :展开历史参数成多行,但是不存在历史列表中
  • -s :展开历史参数成一行,附加在历史列表后

命令历史相关环境变量

  • HISTSIZE:命令历史记录的条数
  • HISTFILE:指定历史文件,默认未 ~/.bash_history
  • HISTILSIZE:命令历史文件记录历史的条数
  • HISTTIMEFORMAT="%F %T ":显示时间
  • HISTGNORE=“str1:str2* …”:忽略 str1 命令,str2 开头的历史
  • HISTCONTROL:控制命令历史的记录方式。
    ignoredups :是默认值,可以忽略重复的命令,连续并且相同为“重复” ;
    ignorespace :忽略所有以空白开头的命令;
    ignoreboth :相当于 ignoredups 和 ignorespace 的组合;
    erasedups :删除重复命令
  • 环境变量的查看使用:man bash 进入手册后使用文本搜索 /history

持久保存变量
范例:

$ cat .bash_profile
# .bash_profile# Get the aliases and functions
if [ -f ~/.bashrc ]; then. ~/.bashrc
fi# User specific environment and startup programsPATH=$PATH:$HOME/binexport PATH
export HISTCONTROL=ignoreboth
export HISTSIZE=100000
export HISTTIMEFORMAT="%F %T "

1.12 调用命令行历史

# 重复前一个命令方法
重复前一个命令使用上方向键,并回车执行;
按!!并回车执行;
输入!-1并回车执行;
按Ctrl + P并回车执行。!:0 :执行前一条命令(去除参数)
Ctrl + n:显示当前历史中的下一条命令,但是不执行
Ctrl + j:执行当前命令
!n:执行history命令输出对应序号n的命令
!-n:执行history历史中倒数第n个命令!string:重复前一个以”string”开头的命令
!?string:重复前一个包含string的命令
! string:p:仅仅打印命令历史,而不执行
!$:p:打印输出!$(上一条命令的最后一个参数)的内容
!*:p:打印输出!*(上一条命令的所有参数)的内容
^string:删除上一条命令中的第一个string
^string1^string:将上一条命令中的第一个string1替换为string2
!:gs/string1/string2:将上一条命令中所有的string1都替换为string2使用up(向上)和down(向下)键来上下浏览从前输入的命令
Ctrl + r来在命令历史中搜索命令:
(revese-i-search)`’:
Ctrl + g:从历史搜索模式退出# 要重新调用前一个命令中的最后一个参数
!$:		:表示
Esc,.	 :(点击Esc键后松开,然后点击.键)
Alt+.	 :(按住Alt键的同时点击.键)# 调用历史参数
Command !^ (利用上一个命令的第一个参数做cmd的参数)
Command !$ (利用上一个命令的最后一个参数做cmd的参数)
Command !* (利用上一个命令的全部参数做cmd的参数)
Command!:n(利用上一个命令的第n个参数做cmd的参数)
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开头的命令,并获取它的所有参数)

1.13 Bash的快捷键

* Ctrl + l	:清屏,相当于clear命令
Ctrl + o		:执行当前命令,并重新显示本命令
* Ctrl + s	:阻止屏幕输出,锁定
* Ctrl + q	:允许屏幕输出
* Ctrl + c	:终止命令
* Ctrl + z	:挂起命令* Ctrl + a	:光标移动到命令行首,相当于Home
* Ctrl + e	:光标移动到命令行尾,相当于End
Ctrl + f		:光标向右移动一个字符
Ctrl + b		:光标向左移动一个字符
Alt + f			:光标向右移动一个单词尾
Alt + b			:光标向左移动一个单词首
Ctrl + xx		:光标在命令行首和光标之间移动* Ctrl + u	:从光标处删除至命令行首
* Ctrl + k	:从光标处删除至命令行尾
* Alt + r		:删除当前整行
Ctrl + w		:从光标处向左删除至单词首
Alt + d			:从光标处向右删除至单词尾
Ctrl + d		:删除光标处的一个字符
Ctrl + h		:删除光标前的一个字符
Ctrl + y		:将删除的字符粘贴至光标后Alt + c			:从光标处开始向右更改为首字母大写的单词
Alt + u			:从光标处开始,将右边一个单词更改为大写
Alt + l			:从光标处开始,将右边一个单词更改为小写
Ctrl + t		:交换光标处和之前的字符位置
Alt + t			:交换光标处和之前的单词位置
Alt + #			:提示输入指定字符后,重复显示该字符 # 次

注意:Alt 组合快捷键经常和其他软件冲突
范例:Xshell 中启动 Alt 键

2 获取帮助

获取帮助的能力决定了技术的能力!

多层次的帮助

2.1 whatis

whatis 使用数据库来显示命令的简短描述
此工具在系统刚安装后,不可立刻使用,需要制作数据库
执行下面命令生成数据库

# CentOS7 版本以后
mandb # CentOS6 版本之前
makewhatis

范例:

$ whatis cal 
cal (1)              - display a calendar
cal (1p)             - print a calendar
$ man -f cal
cal (1)              - display a calendar
cal (1p)             - print a calendar

范例:

$ whatis ls
ls: nothing appropriate.# 生成man相关数据库
$ mandb
Processing manual pages under /usr/share/man...
Updating index cache for path `/usr/share/man/man4'...Wait...done
Checking for stray cats under /usr/share/man...
...省略...
$ whatis ls
ls (1)               - list directory contents
ls (1p)              - list directory contents

2.2 查看命令的帮助

2.2.1 内部命令帮助

范例:

$ type history 
history is a shell builtin
$ help history 
history: history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]
...

2.2.2 外部命令及软件帮助

2.3 外部命令的 --help 或 -h 选项

显示用法总结和参数列表,使用的大多数,但是并非所有的。
范例:

$ 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.$ cal -h
Usage:cal [options] [[[day] month] year]$ strace --help
strace: invalid option -- '-'
Try 'strace -h' for more information.$ openssl --help
openssl:Error: '--help' is an invalid command.$ date -h
date: invalid option -- 'h'
Try 'date --help' for more information.$ shutdown -h
Shutdown scheduled for Tue 2022-05-03 20:31:04 CST, use 'shutdown -c' to cancel.

格式说明:

2.3.1 练习

# 1.显示当前时间,格式:2016-06-18 10:20:30
$ date +"%F %T"
2021-04-29 16:58:44# 2.显示前天是星期几
$ date -d '-2 day' +%u
2# 3.设置当前日期为 2019-08-07 06:05:10
$ date 080706052019.10
Wed Aug 7 06:05:10 CST 2019

2.4 man 命令

man 提供命令帮助的文件,手册页存放在 /usr/share/man
几乎每个命令都有 man 的"页面"
中文 man 需要安装包
man 页面分组
不同类型的帮助成为不同的“章节”,统称为 Linux 手册,man 1 man
1 Executable programs or shell commands
2 System calls (functions provided by the kernel)
3 Library calls (functions within program libraries)
4 Special files (usually found in /dev)
5 File formats and conventions eg /etc/passwd
6 Games
7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)
8 System administration commands (usually only for root)
9 Kernel routines [Non standard]
man 命令的配置文件

# CentOS6之前版 man的配置文件
/etc/man.config
# CentOS7之后版 man的配置文件
/etc/man_db.conf
# ubuntu man的配置文件
/etc/manpath.config

格式:

MANPATH /PATH/TO/SOMEWHERE # 指明man文件搜索位置

也可以指定位置下搜索COMMAND命令的手册页并显示

man -M /PATH/TO/SOMEWHERE COMMAND

查看man手册页

$ man --help
Usage: man [OPTION...] [SECTION] PAGE...
man [章节] keyword

man 帮助段落说明
man 命令的操作方法:使用 less 命令实现
常用选项

man -a keyword
# 列出所有匹配的页面,使用 whatis 数据库
man -k keyword
man -f keyword# 举例:
$ man -f ls
ls (1)               - list directory contents
ls (1p)              - list directory contents
man -w [章节] keyword

范例:

$ yum install -y man-pages
$ man -w 1 passwd
/usr/share/man/man1/passwd.1.gz$ whatis passwd
sslpasswd (1ssl)     - compute password hashes
passwd (1)           - update user's authentication tokens
passwd (5)           - password file$ man lssl openssl-passwd
$ man 7 ascii
$ man 7 utf8

范例:查看passwd 相关命令和文件,man帮助文件路径

$ whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz

练习:

# 1.在本机字符终端登录时,除了显示原有信息外,再显示当前登录终端号,主机名和当前时间
# 可以使用软件将图形转换为字符,ASCIIGenerator
$ cat /etc/issue
The tty is \l
The hostname is \n
The time is \t
=================================================
\S
Kernel \r on an \m# 2.今天18:30自动关机,并提示用户
$ shutdown 18:30 "The system will shutdown autocatically at 20:30 tonight,please save your file"

2.5 info

man 常用于命令参考,GNU 工具 info 适合通用文档参考;
没有参考,列出所有的页面;
info 页面的结构就像一个网站;
每一页分为“节点”;
链接节点之前 *
info 命令格式:

info [ 命令 ]

导航 info 页:

2.6 命令自身提供的官方使用指南

Applications → Documentation → help(CentOS 7)
System → help(CentOS 6)

/usr/share/doc

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

2.7.1 通过在线文档获取帮助

http://www.github.com
http://www.kernel.org/doc/html/latest/
http://httpd.apache.org
http://www.nginx.org/
https://mariadb.com/kb/en
https://dev.mysql.com/doc/
https://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

2.7.2 Linux官方在线文档和知识库

通过发行版官方的文档光盘或者网站可以获取安装指南,部署指南,虚拟化指南等。

2.7.3 红帽全球支持服务

rhn.redhat.com 或者本地卫星服务器 / 代理服务器
RHN 账号为及其注册和基于网络管理的 RHN 用户
sosreport 收集所有系统上的日志信息的工具,并自动打包压缩包,方便技术支持人员和红帽全球支持提供分析问题依据。
范例:

$ yum install -y sos
$ sosreport
Please note the 'sosreport' command has been deprecated in favor of the new 'sos' command, E.G. 'sos report'.
Redirecting to 'sos report 'sosreport (version 4.0)This command will collect diagnostic and configuration information from
this CentOS system and installed applications.An archive containing the collected information will be generated in
/var/tmp/sos.5rr_xr0d and may be provided to a CentOS support
representative.Any information provided to CentOS will be treated in accordance with
the published support policies at:https://www.centos.org/...省略...Finishing plugins              [Running: selinux]                                       ]ger]Finished running plugins                                                               
Creating compressed archive...Your sosreport has been generated and saved in:/var/tmp/sosreport-CentOS8-Server-2022-05-03-gldmows.tar.xzSize	15.74MiBOwner	rootmd5	aa24e602e6582f2633126f73c14c863bPlease send this file to your support representative.

2.8 相关网站和搜索

http://www.google.com
http://bing.com
http://www.baidu.com
http://www.slideshare.net

2.9 安装中文的 man 帮助文档

# 1.下载源码
源码网址 https://src.fedoraproject.org/repo/pkgs/man-pages-zh-CN/
下载源码 wget https://src.fedoraproject.org/repo/pkgs/man-pages-zh-CN/v1.5.2.tar.gz/1bbdc4f32272df0b95146518b27bf4be/v1.5.2.tar.gz[root@localhost opt]# wget  https://src.fedoraproject.org/repo/pkgs/man-pages-zh-CN/manpages-zh-1.5.1.tar.gz/13275fd039de8788b15151c896150bc4/manpages-zh-1.5.1.tar.gz# 2.解压并安装
[root@localhost opt]# tar xf manpages-zh-1.5.1.tar.gz
[root@localhost opt]# cd manpages-zh-1.5.2/
[root@localhost manpages-zh-1.5.1]# ./configure --disable-zhtw  --prefix=/usr/local/zhman
[root@localhost manpages-zh-1.5.1]# make && make install# 3.为了不抵消man,我们新建cman命令作为中文查询
[root@localhost man1]# cd ~
[root@localhost ~]# echo "alias cman='man -M /usr/local/zhman/share/man/zh_CN' " >>.bash_profile
[root@localhost ~]# source .bash_profile# 4.使用中文man查询命令
[root@localhost ~]# cman ls

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/194334.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT有什么新奇的使用方式?

2023&#xff0c;ChatGPT几乎席卷了所有行业&#xff0c;并且具有不可测量的巨大潜力等着我们去挖掘。 越来越多人对ChatGPT的应用产生兴趣&#xff0c;知乎上“ChatGPT有什么新奇的使用方式&#xff1f;”这一个热门话题的兴起就是最好的证明。 写作&#xff0c;毫无疑问&…

SmartSoftHelp8,数据库字段详细文档自动生成工具

数据库开发文档自动生成 包括数据库设计详细信息&#xff1a; 数据库字段名称&#xff0c;数据类型&#xff0c;大小&#xff0c;是否主键&#xff0c;说明等 一键自动生成开发需求文档 导出html 格式方便查询 下载地址 https://pan.baidu.com/s/1zBgeYsqWnSlNgiKPR2lUYg…

目标检测算法改进系列之添加变核卷积AKConv模块

AKConv变核卷积 KConv的主要思想&#xff1a;AKConv&#xff08;可变核卷积&#xff09;主要提供一种灵活的卷积机制&#xff0c;允许卷积核具有任意数量的参数和采样形状。这种方法突破了传统卷积局限于固定局部窗口和固定采样形状的限制&#xff0c;从而使得卷积操作能够更加…

【iOS控件】—— UIPickerView的使用

【iOS控件】—— UIPickerView的使用 一. 简述UIPickerView1. 什么是UIPickerView2. UIPickerView遵守的协议 二. 测试Demo三. 总结 一. 简述UIPickerView 先看一下UIPickerView的效果图&#xff1a; 1. 什么是UIPickerView UIPickerView是iOS平台上的一个用户界面元素&am…

Excel导入组件的封装以及使用页面点击弹出该弹框

封装的组件 <template><el-dialogwidth"500px"title"员工导入":visible"showExcelDialog"close"$emit(update:showExcelDialog, false)"><el-row type"flex" justify"center"><div class&q…

JVM:强软弱虚四种引用

下面依次解释五种引用 一、强引用 把一个对象赋值给一个引用变量&#xff0c;就相当于把这个对象的强引用放到变量中。 只要对象可达&#xff0c; GC一定不会回收这个对象&#xff08;A1&#xff09; 二、软引用 当一个对象&#xff08;A2&#xff09;没有强引用时&#xff…

python 自主学习笔记

文章目录 前言相关教程模板字符串JavaScriptC#Python 临时变量C#的ValueTuplePython字典 自定义模块化封装的文件路径问题解决方案 暂时结束 前言 最近在学halcon&#xff0c;机器视觉&#xff0c;越学越发现&#xff0c;python是无法避免的语言。因为python用途实在是太广了。…

ChaoJi充电连接装置典型试验案例分析 GB/T 20234.1充电连接装置型式试验变化分析

GB/T 20234.1充电连接装置典型试验变化分析 1、ChaoJi充电连接装置典型试验案例分析 1.1、大功率直流充电接口 1.2、枪线尺寸、重量、面积数据对比 1.3、枪线温升对比试验 1.4、chaoji 枪线温升试验 1.5、chaoji枪线防护等级试验 1.6、GB/T 20234.4项目列表 1.7、小结 ✓ 通…

37. 解数独

题目描述 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图&#xff09; …

基于Java SSM框架+Vue实现旅游资源网站项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架Vue实现旅游资源网站演示 摘要 本论文主要论述了如何使用JAVA语言开发一个旅游资源网站 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述旅游…

Elasticsearch:什么是向量数据库?

向量数据库定义 向量数据库是将信息存储为向量的数据库&#xff0c;向量是数据对象的数值表示&#xff0c;也称为向量嵌入。 它利用这些向量嵌入的强大功能来对非结构化数据和半结构化数据&#xff08;例如图像、文本或传感器数据&#xff09;的海量数据集进行索引和搜索。 向…

MATLAB Simulink +STM32硬件在环 (HIL)实现例程测试

MATLAB Simulink STM32硬件在环 &#xff08;HIL&#xff09;实现例程测试 &#x1f4cd;相关篇《STM32CubeMxMATLAB Simulink点灯程序》✨本例程没有使用到STM32CubeMX来创建工程&#xff08;在Simulink 中不是选择的STM32xxxbased类型的&#xff09;。 &#x1f516;STM32xxx…

基于SSM的网上手机销售系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

llama.cpp部署通义千问Qwen-14B

llama.cpp是当前最火热的大模型开源推理框架之一&#xff0c;支持了非常多的LLM的量化推理&#xff0c;生态比较完善&#xff0c;是个人学习和使用的首选。最近阿里开源了通义千问大语言模型&#xff0c;在众多榜单上刷榜了&#xff0c;是当前最炙手可热的开源中文大语言模型。…

go语言学习-并发编程(并发并行、线程协程、通道channel)

1、 概念 1.1 并发和并行 并发:具有处理多个任务的能力 (是一个处理器在处理任务)&#xff0c;cpu处理不同的任务会有时间错位&#xff0c;比如有A B 两个任务&#xff0c;某一时间段内在处理A任务&#xff0c;这时A任务需要停止运行一段时间&#xff0c;那么会切换到处理B任…

微服务的应用架构

架构描述的是在更高层次将应用拆分为子系统或模块的方法&#xff0c;以及这些子系统之间的交互关系。在一个基于微服务架构构建的应用中&#xff0c;每个服务都需要有自己的架构。 事实上&#xff0c;单体应用在复杂度较低时&#xff0c;它的生产效率是要高于微服务的。只有在…

React18 入门与进阶

React18 入门与进阶 前言一、核心概念与类组件使用1、虚拟DOM与新的渲染写法2、JSX 与 JSX 的使用3、类组件和函数组件4、类组件与类组件通信5、props详解与注意事项6、类组件中事件的使用7、类组件响应式数据实现与原理8、PureComponent 与 shouldComponentUpdate9、immutable…

Java数据结构之《构造哈夫曼树》题目

一、前言&#xff1a; 这是怀化学院的&#xff1a;Java数据结构中的一道难度中等(偏难理解)的一道编程题(此方法为博主自己研究&#xff0c;问题基本解决&#xff0c;若有bug欢迎下方评论提出意见&#xff0c;我会第一时间改进代码&#xff0c;谢谢&#xff01;) 后面其他编程题…

Difference between getc(), getchar(), and gets()

getc(): 从输入中只能读单个字符 getchar()&#xff1a;从标准输入流中输入都单个字符。 两者基本等同&#xff0c;唯一不一样的是getc()是任何输入流&#xff0c;而getchar()是标准输入流。 gets:可以读入含有空格的字符串 // Example for getc() in C #include <stdio.h…

perl脚本批量处理代码中的中文注释乱码的问题

代码中统一使用utf-8编码是最好的&#xff0c;但是有一些多人合作的项目或者一些历史遗留代码&#xff0c;常见一些中文注释乱码的问题。这里以一个开源项目evpp为例子 evpp。以项目中的一个commit id为例&#xff1a; 477033f938fd47dfecde43c82257cd286d9fa38e &#xff0c; …