Linux 基础命令

1 Linux 基础

1.1 用户类型

1.2 终端 Terminal

Linux 基础命令_第1张图片
设备终端:键盘,鼠标,显示器

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)
$ w
 01: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

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

1.3.3 各种Shell

Linux 基础命令_第3张图片

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=: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 查看内存的大小
$ free
              total        used        free      shared  buff/cache   available
Mem:        3799012      532704     1908780       10132     1357528     2967392
Swap:       4194300           0     4194300
# 展示人类可读的输出
$ free -h
              total        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  name

   8       16  104857600 sdb
   8        0  524288000 sda
   8        1    2097152 sda1
   8        2  104857600 sda2
   8        3  104857600 sda3
   8        4          1 sda4
   8        5    4194304 sda5

1.7.2 查看系统版本信息

1.7.2.1 查看系统架构
$ arch
x86_64

# 可以获取全部系统信息
$ getconf -a
$ getconf LONG_BIT

lscpu | 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 status
               Local time: Tue 2022-05-03 13:27:34 CST
           Universal time: Tue 2022-05-03 05:27:34 UTC
                 RTC time: Tue 2022-05-03 05:27:39
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
              NTP service: inactive
          RTC 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 1752
   September 1752
Su Mo Tu We Th Fr Sa
       1  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 命令:

Linux 基础命令_第4张图片
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的简写,即字将集编码,简称编码、实现如诃将字符转化为实际的二进制进行存佬或相反,编郅决定了空间的使用的大少
Linux 基础命令_第5张图片

1.8.1 ASCII 码

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

$ yum install -y man-pages
$ man ascii

Linux 基础命令_第7张图片
一个字节由八个二进制组成,一个十六进制由四个二进制组成,一个八进制由三个二进制组成。

# 查看文本文件的格式
$ 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 编码方案:
Linux 基础命令_第8张图片
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 007F 0xxxxxxx
0000 0080-0000 07FF 110xxxxx 10xxxxxx
0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF 11110xxx 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: 未找到命令

Linux 基础命令_第9张图片

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 programs

PATH=$PATH:$HOME/bin

export 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 键
Linux 基础命令_第10张图片

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.xz

 Size	15.74MiB
 Owner	root
 md5	aa24e602e6582f2633126f73c14c863b

Please 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

Linux 基础命令_第11张图片
设备终端:键盘,鼠标,显示器

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)
$ w
 01: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

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

1.3.3 各种Shell

Linux 基础命令_第13张图片

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=: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 查看内存的大小
$ free
              total        used        free      shared  buff/cache   available
Mem:        3799012      532704     1908780       10132     1357528     2967392
Swap:       4194300           0     4194300
# 展示人类可读的输出
$ free -h
              total        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  name

   8       16  104857600 sdb
   8        0  524288000 sda
   8        1    2097152 sda1
   8        2  104857600 sda2
   8        3  104857600 sda3
   8        4          1 sda4
   8        5    4194304 sda5

1.7.2 查看系统版本信息

1.7.2.1 查看系统架构
$ arch
x86_64

# 可以获取全部系统信息
$ getconf -a
$ getconf LONG_BIT

lscpu | 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 status
               Local time: Tue 2022-05-03 13:27:34 CST
           Universal time: Tue 2022-05-03 05:27:34 UTC
                 RTC time: Tue 2022-05-03 05:27:39
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
              NTP service: inactive
          RTC 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 1752
   September 1752
Su Mo Tu We Th Fr Sa
       1  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 命令:

Linux 基础命令_第14张图片
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的简写,即字将集编码,简称编码、实现如诃将字符转化为实际的二进制进行存佬或相反,编郅决定了空间的使用的大少
Linux 基础命令_第15张图片

1.8.1 ASCII 码

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

$ yum install -y man-pages
$ man ascii

Linux 基础命令_第17张图片
一个字节由八个二进制组成,一个十六进制由四个二进制组成,一个八进制由三个二进制组成。

# 查看文本文件的格式
$ 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 编码方案:
Linux 基础命令_第18张图片
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 007F 0xxxxxxx
0000 0080-0000 07FF 110xxxxx 10xxxxxx
0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF 11110xxx 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: 未找到命令

Linux 基础命令_第19张图片

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 programs

PATH=$PATH:$HOME/bin

export 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 键
Linux 基础命令_第20张图片

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.xz

 Size	15.74MiB
 Owner	root
 md5	aa24e602e6582f2633126f73c14c863b

Please 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

你可能感兴趣的:(学习笔记,linux,运维)