- 1 Linux 基础
- 临时生效,可以生效,但是系统重启后无法持久保存
- 持久生效,支持CentOS7和Ubuntu18.04以上的版本使用
- :开机后命令历史数
- CentOS系统进行下载firefox
- 可能会需要进行下载相关依赖库
- 如果使用mobaxterm工具连接CentOS
- 需要安装插件
- Ubuntu系统进行下载firefox
- 1.7 常用命令
- 最多同时开4个同时执行的任务,一个任务占用一个内核
- 一般任务的数量和CPU内核的数量尽可能统一
- 因为,任务如果太多,会产生一个问题就是CPU会进行来回的切换
- CPU的个数就决定了它能同时执行任务的个数
- 可以查看单独的CPU的信息
- 1.7.2 查看系统版本信息
- 1.7.3 日期和时间
- 设置时区
- 列出所有的时区
- 查看当前系统的时区情况
- 设置时区
- 1.8 字符集和编码
- 1.9 命令行扩展和被括起来的集合
- 1.10 Tab 键补全
- 1.11 命令行历史
- 1.12 调用命令行历史
- 1.13 Bash的快捷键
- 2 获取帮助
- CentOS7 版本以后
- CentOS6 版本之前
- :跳转至第 # 行
- 举例:
内容概述
- 用户
- 终端
- Shell介绍
- 执行命令
- 简单命令
- Tab键补全
- 命令行历史
- bash快捷键
-
1 Linux 基础
1.1 用户类型
root 用户
- 一个特殊的管理账号
- 也被称为超级用户
- root 已接近完整的系统控制
- 对系统损害几乎有无限的能力
- 除非必要,不要登录为 root
普通(非特权)用户
控制台终端:/dev/console
- 串行终端:/dev/ttyS#
- 虚拟终端:tty:teletypewriter,/dev/tty#,tty可有n个,Ctrl+Alt+F#
- 图形终端:startx,xwindows
- CentOS 6:Ctrl + Alt + F7
- CentOS 7:在哪个终端启动,即位于哪个虚拟终端
伪终端:pty:pseudo-tty,/dev/pts/# 如:SSH远程连接
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 交互式接口类型
GUI:Graphic User Interface 图形用户接口
- X protocol ,window manager,desktop
- Desktop:
- GNOME(C,图形库GTK)
- KDE(C++,图形库QT)
- XFCE(轻量级桌面)
CLI:Command Line Interface 命令行接口
- shell 程序
1.3.2 什么是shell
硬件:计算机设备的硬件,例如:处理器,内存,存储等等硬件设备;
内核:即是操作系统的核心;内核是操作系统最基本的部分,但不是操作系统的全部。内核负责管理系统的进程、内存、设备驱动程序,文件和网络系统,决定着系统的性能和稳定性。而操作系统一般包括内核、驱动程序、接口库等等组成部分。
系统调用:用户想要使用操作系统是需要通过接口来访问的,这些接口就是系统调用。
Shell 是 Linux 系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。Shell 也被称为 Linux 的命令解释器(Command Interpreter)Shell 是一种高级程序设计语言。
Shell本身就是一个程序,将用户输入的命令行拆解为”命令名” 与 “参数”。接着,根据命令名找到对应要执行的程序,对被执行的程序进行初始化,然后将刚才解析出来的参数传递给该程序并执行
Shell 是一种高级程序设计语言,提供了变量,函数,条件判断,循环等开发语言的功能
由于Shell 本身是个程序,所以它可以被任何用户自己开发的各种Shell所代替。1.3.3 各种Shell
- shell 程序
sh:Steve Bourne
- bash:Bourne-Agent Shell,GPL,CentOS 和 Ubuntu 默认使用
- csh:C Shell,C语言风格
- tcsh
- ksh:Korn Shell,AIX 默认的 Shell
- zsh:MacOS 默认的 Shell
1.3.4 Bash Shell
GNU Bourne-Agent Shell(bash)是GNU计划中最重要的工具软件之一,目前也是Linux标准的shell,与sh 兼容。
显示当前使用的shell
显示当前系统使用的所有shellecho $SHELL
cat /etc/shells
# 安装shell
yum install -y csh # 可以在/etc/shells中查看新安装shell
1.4 设置主机名
```bash临时生效,可以生效,但是系统重启后无法持久保存
hostname NAME
持久生效,支持CentOS7和Ubuntu18.04以上的版本使用
hostnamectl set-hostname NAME
范例:
```bash
$ hostnamectl set-hostname bj-yz-k8s-node01-100-10.kubesphere.com
# 主机名不要使用下划线
$ hostname centos7_3.kubesphere.io
hostname: the specified hostname is invalid
注意:
- 主机名不要使用下划线,使用 hostname 修改主机名为临时修改,重启计算机会丢失主机名。
- 主机名支持横线,可使用字母,横线或者数字组合
- 有些软件对主机有特殊要求
范例:
$ 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中可执行的两类命令
- 内部命令:由 Shell(echo $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 cmd 启用内部命令
- enable -n cmd 禁用内部命令
enable -n 查看所有禁用的内部命令
$ 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 命令常见用法:hash 显示hash缓存
- hash -l 显示hash缓存,可作为输入使用
- hash -p path name 将命令全路径path起别名为name
- hash -t name 打印缓存中name的路径
- hash -d name 清除name缓存
- hash -r 清除缓存
```bash
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 # 直接运行即可
<a name="JpFUV"></a>
### 1.6.3 命令别名
```bash
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 进程有效;
如果想永久有效,要定义在配置文件中
- 仅对当前用户:~/.bashrc
- 对所有用户有效:/etc/bashrc
编辑配置给出的新配置不会立刻生效,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…] …
选项:用于启用或关闭命令的某个或某些功能
- 短选项:UNIX 风格选项,-c 例如:-l, -h
- 长选项:GNU风格选项,—word 例如:—all, —human
- BSD风格选项: 一个字母,例如:a
参数:命令的作用对象,比如:文件名,用户名等
范例:
$ id -u zzw
1000
$ ls -a | ls --all
$ free -h | free --human
$ ps aux
注意:
- 多个选项以及多个参数和命令之间使用空白字符分隔;
- 取消和结束命令执行:Ctrl + C(强制退出),Ctrl + D(正常退出);
- 多个命令可以用 “ ; “ 符号分开;
- 一个命令可以用 \ 分成多行。
1.7 常用命令
1.7.1 查看硬件信息
1.7.1.1 查看CPU
lscpu 命令可以查看 CPU 信息
cat /proc/cpuinfo 也可以查看到
范例: ```bash $ 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
<a name="LvgMl"></a>
#### 1.7.1.2 查看内存的大小
```bash
$ 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 的两种时钟:
- 系统时钟:由 Linux 内核通过 CPU 的工作频率进行的;
- 硬件时钟:主板芯片计时;
相关命令:
- date 显示和设置系统时间
范例:
$ 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 , hwclouck:显示硬件时钟;
- -s, —hctosys:以硬件时钟为标准,校正系统时钟;
- -w, —systohc:以系统时钟为标准,校正硬件时钟。
范例:$ clock --help -s, --hctosys set the system time from the RTC -w, --systohc set the RTC from the system time # RTC:一般指实时时钟,是在主板集成电路芯片上的时间
时区 ```bash /etc/localtime$ ls -l /usr/sbin/clock lrwxrwxrwx. 1 root root 7 Jan 21 2021 /usr/sbin/clock -> hwclock
设置时区
列出所有的时区
$ 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
显示日历
```bash
# 显示当前月份的日历
$ 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 关机和重启
关机:
- halt
- poweroff
- init 0
重启:
- reboot
- -f:强制,不调用shutdown
- -p:切断电源
- init 6
关机或者重启:shutdown
shutdown [OPTIONS] ... [TIME] [MESSAGE]
-r : reboot 重启
-h :halt 关机
-c :cancel 取消 shutdown 选项
TIME :无指定,默认相当于 +1(CentOS 7)
- now :立刻,相当于+0
- +# :相对时间表示法,几分钟之后,例如+3
hh:mm :绝对时间表示,指明具体时间
$ uptime 13:46:43 up 7:38, 1 user, load average: 0.00, 0.00, 0.00
1.7.5 用户登录信息查看命令
whoami :显示当前登录的有效用户;
- who :显示系统当前所有的登录会话;
-
1.7.6 文本编辑
nano:工具可以实现文本的编辑,上手容易,适合初学者
- gedit:工具是图形化工具
范例:创建登录提示文件 /etc/motd
$ yum install -y nano
$ nano /etc/motd
welcome to kubepshere.docker
# 登录后提示信息
$ 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)它还支持窗口任意的垂直和水平拆分。
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
- 创建新的 screen 会话:screen -S [SESSION]
- 加入 screen 会话:screen -x [SESSION]
- 退出并关闭 screen 会话:exit,Ctrl + D
- 剥离当前 screen 会话:Ctrl + A,D(键入Ctrl + A 后Ctrl松手,按 D)
- 显示所有已经打开的 screen 会话:screen -ls
- 恢复某 screen 会话:screen -r [SESSION]
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] [字符串]
选项:
- -E:(默认)不支持 \ 解释功能
- -n:不自动换行
- -e:启用 \ 字符的解释功能
显示变量
echo "$VAR_NAME":#变量会替换,弱引用
echo '$VAR_NAME':#变量不会替换,强引用
启用命令选项 -e,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出;
- \a :发出警告声
- \b :退格键
- \c :最后不加上换行符号
- \e escape :相当于 \033
- \n :换行并且光标移至行首
- \r :回车,即光标移至行首,但是不换行
- \t :插入 Tab
- \ :插入 \ 字符
- \0nnn :插入 nnn(八进制)所代表的 ASCII 字符(man 7 ascii)
- \xHH :插入HH(十六进制)所代表的 ASCII 字符(man 7 ascii)
范例:
## 字体颜色
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:变长,1到4个字节
- UTF-16:变长,2或4个字节
- UTF-32:固定长度,4个字节
UTF-8 是目前互联网上使用最广泛的一种 Unicode 编码方式,可变长存储,使用 1 - 4 个字节表示一个字符,根据字符的不同变换长度,编码规则如下:
对于单个字节的字符,第一位设为 0,后面的 7位对应这个字符的 Unicode 码。因此,对于英文中的 0 - 127 号字符,与 ASCII 码完全相同。这意味着 ASCII 码的文档可用 UTF-8 编码打开。
对于需要使用 N 个字节来表示的字符(N > 1),第一个字节的前 N 位都设为 1,第 N + 1 位设为 0,剩余的 N - 1个字节的前两位都设为10,剩下的二进制位则使用这个字符的 Unicode 码来填充。(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: 未找到命令
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 根据 PATH 环境变量定义的路径,自左向右在每个路径搜寻以给定命令名命名的文件,第一次找到的命令即为要执行的文件,第一次找到的命令即为要执行的命令
- 命令的子命令补全,需要安装的软件包
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键
- command 2Tab :所有子命令或者文件补全
- string2Tab :以 string 开头的命令
- /2Tab :显示所有根目录下一级目录,包括隐藏目录
- ./2Tab :当前目录下子目录,包括隐藏目录
- *2Tab :当前目录下子命令,不包括隐藏目录
- ~2Tab :所有用户列表
- $2Tab :所有变量
- @2Tab :/etc/hosts 记录(CentOS 7 不支持)
- =2Tab :相当于 ls -A(CentOS 7 不支持)
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
持久保存变量
- 以上变量可以 export 变量名 = “值” 形式存放在 /etc/profile 或者 ~/.bash_profile
范例:
$ 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 组合快捷键经常和其他软件冲突
2 获取帮助
获取帮助的能力决定了技术的能力!
多层次的帮助
- whatis
- command —help
- man and info
- /usr/share/doc/
- Red Hat Documentation、Ubuntu Documentation
- 软件项目网站
- 其他网站
- 搜索引擎
2.1 whatis
whatis 使用数据库来显示命令的简短描述
此工具在系统刚安装后,不可立刻使用,需要制作数据库
执行下面命令生成数据库 ```bashCentOS7 版本以后
mandb
CentOS6 版本之前
makewhatis
范例:
```bash
$ 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 内部命令帮助
- help COMMAND
- man bash(查看每一个内部命令的帮助)
范例:
$ 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 外部命令及软件帮助
- COMMAND —help 和 COMMAND -h
- 使用手册(manual)
- man COMMAND
- 信息页 info COMMAND
- 程序自身的帮助文档 README INSTALL ChangeLog
- 程序官方文档 官方站点 : Documentation
- 发行版的官方文档
- Google
2.3 外部命令的 —help 或 -h 选项
显示用法总结和参数列表,使用的大多数,但是并非所有的。
范例: ```bash $ 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.
格式说明:
- [] :表示可选项
- CAPS 或者 <> :表示变化的数据
- ... :表示一个列表
- x | y | z :意思是“x 或者 y 或者 z”
- -abc :意思是“-a -b -c”
- { } :表示分组
<a name="Mdja1"></a>
### 2.3.1 练习
```bash
# 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-pages-zh-CN
- man-pages
man 页面分组
不同类型的帮助成为不同的“章节”,统称为 Linux 手册,man 1 man
- 1 :用户命令(*)
- 2 :系统调用(*)
- 3 :C库调用
- 4 :设备文件及特殊文件
- 5 :配置文件格式(*)
- 6 :游戏
- 7 :杂项
- 8 :管理类的命令(root等管理员使用)(*)
- 9 :Linux 内核API
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 帮助段落说明
- NAME :名称及简要说明
- SYNOPSIS :用法格式说明
- [] :可选内容
- <> :必选内容
- a | b :二选一
- { } :分组
- … :同一内容可以出现多次
- DESCRIPTION :详细说明
- OPTIONS :选项说明
- EXAMPLES :示例
- FILES :相关文件
- AUTHOR :作者
- COPYRIGHT :版本信息
- REPORTING BUGS :Bug 信息
- SEE ALSO :其他帮助参考
man 命令的操作方法:使用 less 命令实现
- space , ^v , ^f , ^F:向文件尾部翻屏
- b , ^b:向文件首部翻屏
- d , ^d:向文件尾部翻半屏
- u , ^u:向文件首部翻半屏
- RETURN , ^N , e , ^E or j or ^J:向文件尾部翻一行
- y or ^Y or ^P or k or ^K:向文件首部翻一行
- q:退出
:跳转至第 # 行
- 1G:回到文件首部
- G:翻至文件尾部
- /KEYWORD
- 以KEYWORD指定的字符串为关键字,从当前位置向文件尾部搜索;不区分字符大小写
- n:下一个
- N:上一个
- ?KEYWORD
- 以KEYWORD指定的字符串为关键字,从当前位置向文件首部搜索;不区分字符大小写
- n:跟搜索命令同方向,下一个
- N:跟搜索命令反方向,上一个
常用选项
列出所有帮助
man -a keyword
搜索 man 手册
# 列出所有匹配的页面,使用 whatis 数据库 man -k keyword
相当于 whatis ```bash man -f keyword
举例:
$ man -f ls ls (1) - list directory contents ls (1p) - list directory contents
- 打印man帮助文件的路径
```bash
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 页:
- 方向键,PgUp,PgDn 导航
- Tab 键:移动到下一个链接
- d:显示主题目录
- Home:显示主题首部
- Enter:进入选定链接
- n / p / u / l:进入下一层 / 前 / 上一层 / 最后一个链接
- s:文字,文本搜索
- q:退出 info
2.6 命令自身提供的官方使用指南
Applications → Documentation → help(CentOS 7) System → help(CentOS 6)
/usr/share/doc
- 多数安装了的软件包的子目录,包括了这些软件的相关原理说明
- 常见文档:README,INSTALL,CHANGES
- 不适合其他地方的文档的位置
- 配置文件范例:HTML / PDF / PS 格式的文档
-
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.net2.7.2 Linux官方在线文档和知识库
通过发行版官方的文档光盘或者网站可以获取安装指南,部署指南,虚拟化指南等。
- http://www.redhat.com/docs/
- http://access.redhat.com/
- https://help.ubuntu.com/lts/serverguide/index.html
- http://tldp.org
2.7.3 红帽全球支持服务
rhn.redhat.com 或者本地卫星服务器 / 代理服务器
RHN 账号为及其注册和基于网络管理的 RHN 用户
sosreport 收集所有系统上的日志信息的工具,并自动打包压缩包,方便技术支持人员和红帽全球支持提供分析问题依据。
范例: ```bash $ 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:
…省略…
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.
<a name="Pu3Xw"></a>
## 2.8 相关网站和搜索
[http://www.google.com](http://www.google.com)
> OpenStack filetype:pdf
> rhca site:redhat.com/docs
[http://bing.com](http://bing.com)<br />[http://www.baidu.com](http://www.baidu.com)<br />[http://www.slideshare.net](http://www.slideshare.net)
<a name="Tz54m"></a>
## 2.9 安装中文的 man 帮助文档
```bash
# 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