Linux基础入门

一、 linux基础

1、用户

root用户:超级管理员,接近完整的系统控制权限,对计算机造成的损坏很大。

普通用户:权限有限,对计算机造成的损坏也有限。

2、终端

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

2.1终端类型:

​ 控制台终端:/dev/console

​ 串行终端:/dev/ttyS#teletypewriter,

​ 虚拟终端:tty: teletypewriters, /dev/tty#,tty 可有n个,Ctrl+Alt+F#

​ 图形终端:startx\xwindows

​ CentOS 6: Ctrl+Alt+F7

​ CentOS 7: 在那个终端启动,即位于那个虚拟终端

​ 伪终端:pty: peeyudo-tty, /dev/pts/# 如:ssh远程连接

2.2 查看当前终端

​ tty命令查看当前终端

例:

[23:07:21 root@test1 ~]#tty
/dev/pts/2

3、shell介绍

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

3.1 交互式接口类型

GUI:Graphic User Interface
X protocol, window manager, desktop
 ​ Desktop:
 ​ GNOME (C, 图形库gtk),
 ​ KDE (C++,图形库qt)
 ​ XFCE (轻量级桌面)
CLI:Command Line Interface
 ​ shell程序 

3.2 什么是shell

​ Shell 是Linux系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。

​ shell也被称为LINUX的命令解释器(command interpreter),Shell 本身是一个程序。将用户输入的命令行拆解为”命令名“与”参数“。接着,根据命令名找到对应要执行的程序,对被执行的程序进行初始化,然后将刚才解析出来的参数传给该程序并执行。

​ shell是一种高级程序设计语言,提供了变量,函数,条件判断,循环等开发语言的功能。

​ 由于shell本身是一个程序,所以它可以被任何用户自己开发的各种shell所替代。

3.3 各种shell

	sh: steve Bourne

​	bash: Bourne-Again Shell,GPL,CentOS 和 Ubuntu 默认使用  

​	csh: c shell,C语言风格

​	tcsh

​	ksh: Korn Shell,AIX默认shell

​	zsh: MacOS默认shell

3.4 bash shell

GNU Borurne-Again Shell(bash)是GUN计算中重要的工具软件之一,目前也是Linux标准的shell,与sh兼容

显示当前使用的shell

[23:42:38 root@test1 ~]#echo ${SHELL}
/bin/bash

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

[23:42:45 root@test1 ~]#cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh

4、执行命令

执行命令的过程

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

shell中可执行的两类命令

​ 内部命令:由shell自带的,而且通过某命令形式提供

​ 外部命令:在文件系统路径下有对应的可执行程序文件

4.1 区别指定的命令对应的是内部命令还是外部命令

type COMMAND		#查看时内部命令还是外部命令

例:

[15:25:38 root@ubuntu ~]#type -a echo 
echo is a shell builtin				#内部命令
echo is /bin/echo					#外部命令
注:echo即使内部命令也是外部命令,起作用起到冗余,因为每种shell都不相同,可能有的shell内部命令中没有echo。

[15:36:24 root@ubuntu ~]#type cd 
cd is a shell builtin				#内部命令

[15:36:33 root@ubuntu ~]#type whereis
whereis is /usr/bin/whereis			#外部命令,所在路径

4.1.1 内部命令相关

​ help 内部命令列表

​ enable 管理内部命令

enable cmd 请用内部命令

enable -n cmd 禁用内部命令

enable -n 查看所由禁用的内部命令
4.1.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 			  清除全部缓存

4.2 命令别名

​ 对于经常执行的较长的命令,可以将其定义为较短的别名,方便执行。

​ 显示当前shell进程所有可用的命令别名

alias

​ 定义别名NAME,其相当于执行命令VALUE

alias NAME='VALUE'

例:

[05:11:32 root@zhang ~]#echo "alias free='free -h'" >> .bash

[05:12:04 root@zhang ~]#free 		#这是一个别名输出的结果
              total        used        free      shared  buff/cache   available
Mem:         995684      240264      493372        7764      262048      600888
Swap:       2097148           0     2097148

[05:12:05 root@zhang ~]#free -h
              total        used        free      shared  buff/cache   available
Mem:           972M        234M        481M        7.6M        255M        586M
Swap:          2.0G          0B        2.0G

​ 撤销别名: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		#只适用于外部命令

4.3 命令格式

COMMAND [OPTIONS...] [ARGUMENTS...]

​ 选项:用于启用或关闭命令的某个或某些功能

短选项:UNIX 风格选项,-c 例如:-l, -h
长选项:GNU风格选项,--word 例如:--all, --human
BSD风格选项: 一个字母,例如:a,使用相对较少

​ 参数:命令的作用对象,比如:文件名,用户名等

例:

[root@test2 ~]# id zhang 
uid=1000(zhang) gid=1000(zhang) groups=1000(zhang)

[root@test2 ~]# id -u zhang 
1000

[root@test2 ~]# ls -a
.                .bashrc  Documents             Music     Templates
..               .cache   Downloads             Pictures  test.log
anaconda-ks.cfg  .config  .esd_auth             .pki      Videos
.bash_history    .cshrc   .ICEauthority         Public    .viminfo
.bash_logout     .dbus    initial-setup-ks.cfg  script    .Xauthority
.bash_profile    Desktop  .local                .tcshrc

[root@test2 ~]# ls --a
ls: option '--a' is ambiguous; possibilities: '--all' '--almost-all' '--author'
Try 'ls --help' for more information.

[root@test2 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:          1.8Gi       834Mi       191Mi       5.0Mi       779Mi       805Mi
Swap:         2.0Gi       405Mi       1.6Gi

[root@test2 ~]# free --human
              total        used        free      shared  buff/cache   available
Mem:          1.8Gi       834Mi       191Mi       5.0Mi       779Mi       805Mi
Swap:         2.0Gi       405Mi       1.6Gi

[root@test2 ~]# ps a

​ 注:

多个选项以及多参数和命令之间使用空白字符分隔
取消和结束命令执行:Ctrl+c,Ctrl+d
多个命令放在一行,每个命令之间可以用 ";" 符号分开
一个命令可以用\分成多行

5、常见命令

5.1 设置主机名

hostnamectl set-hostname NAME		#设置主机名

例:

[23:44:30 root@test1 ~]#hostnamectl set-hostname zhang

5.2 命令提示符

命令提示符:prompt

​ # 管理元

​ $ 普通用户

显示提示符格式
[02:08:38 root@zhang ~]#echo $PS1
\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\$
修改提示符
[02:13:12 root@zhang ~]#PS1="\[\e[1;5;41;33m\][\u@\h \W]\\$\[\e[0m\]"
[root@zhang ~]#
提示符格式说明:
\e 控制符\033
\u 当前用户
\h 主机名简称
\H 主机名
\w 当前工作目录
\W 当前工作目录基名
\t 24小时时间格式
\T 12小时时间格式
! 命令历史数
\# 开机后命令历史数  
例:CentOS系统持久保存提示符格式相关变量 PS1
[02:16:36 root@test1 ~]#echo 'PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"' > /etc/profile.d/env.sh

例:ubuntu 修改提示符
root@ubuntu1804:~#echo 'PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"' >> .bashrc

5.3 查看硬件信息

5.3.1 查看CPU
lscpu命令可以查看cpu信息
cat /proc/cpuinfo也可以查看cpu信息

例:

[21:13:11 root@zhang ~]#lscpu 
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                1
On-line CPU(s) list:   0
Thread(s) per core:    1	#每个core有几个线程
Core(s) per socket:    1	#每个槽位有1个core
Socket(s):             1	#服务器面板上有1个CPU槽位
NUMA node(s):          1	#node的数量
Vendor ID:             AuthenticAMD
CPU family:            23
Model:                 24
Model name:            AMD Ryzen 5 3500U with Radeon Vega Mobile Gfx
Stepping:              1
CPU MHz:               2096.063
BogoMIPS:              4192.12
Hypervisor vendor:     VMware
Virtualization type:   full
L1d cache:             32K
L1i cache:             64K
L2 cache:              512K
L3 cache:              4096K
NUMA node0 CPU(s):     0	#对应的core
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc art rep_good nopl tsc_reliable nonstop_tsc extd_apicid eagerfpu pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext retpoline_amd ssbd ibpb vmmcall fsgsbase bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xgetbv1 clzero arat overflow_recov succor

[21:13:16 root@zhang ~]#cat /proc/cpuinfo 
processor	: 0
vendor_id	: AuthenticAMD
cpu family	: 23
model		: 24
model name	: AMD Ryzen 5 3500U with Radeon Vega Mobile Gfx
stepping	: 1
microcode	: 0x8108109
cpu MHz		: 2096.063
cache size	: 512 KB
physical id	: 0
siblings	: 1
core id		: 0
cpu cores	: 1
apicid		: 0
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc art rep_good nopl tsc_reliable nonstop_tsc extd_apicid eagerfpu pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext retpoline_amd ssbd ibpb vmmcall fsgsbase bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xgetbv1 clzero arat overflow_recov succor
bogomips	: 4192.12
TLB size	: 2560 4K pages
clflush size	: 64
cache_alignment	: 64
address sizes	: 45 bits physical, 48 bits virtual
power management:

5.3.2 查看内存大小
free查看内存大小
cat /proc/meminfo也可以查看

例:

[21:18:27 root@zhang ~]#free
              total        used        free      shared  buff/cache   available
Mem:         995684      220644      517424        7700      257616      628360
Swap:       2097148           0     2097148

[21:18:28 root@zhang ~]#cat /proc/meminfo 
MemTotal:         995684 kB
MemFree:          517696 kB
MemAvailable:     628652 kB
Buffers:            4188 kB
Cached:           230888 kB
SwapCached:            0 kB
Active:           136644 kB
Inactive:         215356 kB
Active(anon):     117280 kB
Inactive(anon):     7344 kB
Active(file):      19364 kB
Inactive(file):   208012 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        116956 kB
Mapped:            61780 kB
Shmem:              7700 kB
Slab:              71724 kB
SReclaimable:      22560 kB
SUnreclaim:        49164 kB
KernelStack:        4256 kB
PageTables:         4624 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     2594988 kB
Committed_AS:     589076 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      177540 kB
VmallocChunk:   34359310332 kB
Percpu:            25600 kB
HardwareCorrupted:     0 kB
AnonHugePages:     40960 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       71552 kB
DirectMap2M:      976896 kB
DirectMap1G:           0 kB

5.3.3 查看硬盘和分区情况

例:

[21:46:01 root@zhang ~]#lsblk
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                         8:0    0   20G  0 disk 
├─sda1                      8:1    0  500M  0 part /boot
└─sda2                      8:2    0 19.5G  0 part 
  ├─centos-root           253:0    0 17.5G  0 lvm  /
  └─centos-swap           253:1    0    2G  0 lvm  [SWAP]
sr0                        11:0    1    4G  0 rom  
loop0                       7:0    0  100G  0 loop 
└─docker-253:0-16961-pool 253:2    0  100G  0 dm   
loop1                       7:1    0    2G  0 loop 
└─docker-253:0-16961-pool 253:2    0  100G  0 dm   

[21:46:06 root@zhang ~]#cat /proc/partitions 
major minor  #blocks  name

  11        0    4228096 sr0
   8        0   20971520 sda
   8        1     512000 sda1
   8        2   20458496 sda2
 253        0   18317312 dm-0
 253        1    2097152 dm-1
   7        0  104857600 loop0
   7        1    2097152 loop1
 253        2  104857600 dm-2

5.4 查看系统版本信息

5.4.1 查看内核版本
[21:47:34 root@zhang ~]#uname -r		#查看内核版本
3.10.0-1127.19.1.el7.x86_64
5.4.2 查看操作系统发行版本
[21:47:47 root@zhang ~]#cat /etc/redhat-release 
CentOS Linux release 7.8.2003 (Core)

[21:47:56 root@zhang ~]#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"

[root@test2 ~]# lsb_release -a		#lsb_release需要手动安装
LSB Version:	:core-4.1-amd64:core-4.1-noarch
Distributor ID:	CentOS
Description:	CentOS Linux release 8.1.1911 (Core) 
Release:	8.1.1911
Codename:	Core

5.5 日期和时间

Linux的两种时钟
系统时钟:有linux内核通过CPU的工作频率进行的
硬件时钟:主板
相关命令:
date 显示和设置系统时间

例:

[22:04:52 root@zhang ~]#date +%s
1604631904

[22:05:04 root@zhang ~]#date -d @`date +%s`
Thu Nov  5 22:05:22 EST 2020

[22:05:22 root@zhang ~]#date -d @1604631904
Thu Nov  5 22:05:04 EST 2020

[22:05:50 root@zhang ~]#date -d @1604631904 +%F_%T
2020-11-05_22:05:04
clock,hwclock: 显示硬件时钟
	-s, --hctosys 以硬件时钟为准,校正系统时钟
	-w, --systohc 以系统时钟为准,校正硬件时钟
时区文件:
/etc/loacltime

例:

[22:15:05 root@zhang ~]#timedatectl set-timezone Asia/Shanghai 

[11:15:46 root@zhang ~]#ll /etc/localtime 
lrwxrwxrwx 1 root root 35 Nov  6 11:15 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai

查看日历
cal -y		#显示日历

例:

[01:22:45 root@zhang ~]#cal -y
                               2020                               

       January               February                 March       
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
          1  2  3  4                      1    1  2  3  4  5  6  7
 5  6  7  8  9 10 11    2  3  4  5  6  7  8    8  9 10 11 12 13 14
12 13 14 15 16 17 18    9 10 11 12 13 14 15   15 16 17 18 19 20 21
19 20 21 22 23 24 25   16 17 18 19 20 21 22   22 23 24 25 26 27 28
26 27 28 29 30 31      23 24 25 26 27 28 29   29 30 31            
                                                                  
        April                   May                   June        
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
          1  2  3  4                   1  2       1  2  3  4  5  6
 5  6  7  8  9 10 11    3  4  5  6  7  8  9    7  8  9 10 11 12 13
12 13 14 15 16 17 18   10 11 12 13 14 15 16   14 15 16 17 18 19 20
19 20 21 22 23 24 25   17 18 19 20 21 22 23   21 22 23 24 25 26 27
26 27 28 29 30         24 25 26 27 28 29 30   28 29 30            
                       31                                         
        July                  August                September     
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
          1  2  3  4                      1          1  2  3  4  5
 5  6  7  8  9 10 11    2  3  4  5  6  7  8    6  7  8  9 10 11 12
12 13 14 15 16 17 18    9 10 11 12 13 14 15   13 14 15 16 17 18 19
19 20 21 22 23 24 25   16 17 18 19 20 21 22   20 21 22 23 24 25 26
26 27 28 29 30 31      23 24 25 26 27 28 29   27 28 29 30         
                       30 31                                      
       October               November               December      
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
             1  2  3    1  2  3  4  5  6  7          1  2  3  4  5
 4  5  6  7  8  9 10    8  9 10 11 12 13 14    6  7  8  9 10 11 12
11 12 13 14 15 16 17   15 16 17 18 19 20 21   13 14 15 16 17 18 19
18 19 20 21 22 23 24   22 23 24 25 26 27 28   20 21 22 23 24 25 26
25 26 27 28 29 30 31   29 30                  27 28 29 30 31      

[01:23:48 root@zhang ~]#cal 11 2020			#查看2020年11月份
    November 2020   
Su Mo Tu We Th Fr Sa
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30         

5.6 关机和重启

关机:
half
poweroff
重启:
reboot
	reboot -f		#强制,不调用shutdown
	reboot -p		#切断电源
关机或者重启:
shutdown
	shutdown [OPTION]... [TIME] [MESSAGE]
	-r:reboot
	-h:half
	-c:cancel
	
TIME:无指定,默认相当于+1(centos7)
	now:立刻,相当于+0
	+#:相对时间表示法,几分钟之后;如 +3
	hh:mm:绝对时间表示,指明具体时间

5.7 用户登录信息查看命令

whoami: 显示当前登录有效用户
who: 系统当前所有的登录会话
w: 系统当前所有的登录会话及所做的操作

例:

[01:37:34 root@zhang ~]#whoami
root

[01:37:37 root@zhang ~]#who
root     pts/0        2020-11-05 22:37 (10.1.1.1)
root     tty2         2020-09-28 22:20 (tty2)
root     pts/2        2020-11-05 21:52 (10.1.1.1)
root     pts/3        2020-11-06 01:22 (10.1.1.1)

[01:37:40 root@zhang ~]#w
 01:37:42 up  4:33,  4 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.1.1.1         22:37    3:00m  0.02s  0.02s -bash
root     tty2     tty2             28Sep20 38days 45.07s  0.02s /usr/libexec/gs
root     pts/2    10.1.1.1         21:52    3:32m  0.02s  0.02s -bash
root     pts/3    10.1.1.1         01:22    6.00s  0.05s  0.01s w

5.8 文本编辑

nano 工具可以实现文本的编辑,上手容易,适合初学者
gedit 工具是图形工具

5.9 会话管理

​ 命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称"窗口"),在里面输入命令。用户与计算机的这种临时的交互,称为一次"会话"(session)
​ 会话的一个重要特点是,窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完 一个典型的例子就是,SSH 登录远程计算机,打开一个远程窗口执行命令。这时,网络突然断线,再次登录的时候,是找不回上一次执行的命令的。因为上一次 SSH 会话已经终止了,里面的进程也随之消失了。为了解决这个问题,会话与窗口可以"解绑":窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话"绑定"其他窗口

​ 终端复用器软件就是会话与窗口的"解绑"工具,将它们彻底分离。
(1)它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
(2) 它可以让新窗口"接入"已经存在的会话。
(3)它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
(4)它还支持窗口任意的垂直和水平拆分。
类似的终端复用器还有Screen,Tmux

5.9.1 screen

​ 利用screen可以实现会话管理,如:新建会话,共享会话等

​ 注意:CentOS7来自于base源,CentOS8来自于epel源

screen命令常见用法:
创建新screen会话
screen –S [SESSION]
加入screen会话
screen –x [SESSION]
退出并关闭screen会话
exit
剥离当前screen会话
Ctrl+a,d
显示所有已经打开的screen会话
screen -ls
恢复某screen会话
screen -r [SESSION]

例:

#CentOS7 安装screen
[root@centos7 ~]#yum -y install screen

#CentOS8 安装screen
[root@centos8 ~]#dnf -y install epel-release
[root@centos8 ~]#dnf -y install screen
5.9.2 tmux

Tmux 是一个终端复用器(terminal multiplexer),类似 screen,但是更易用,也更强大
Tmux 就是会话与窗口的"解绑"工具,将它们彻底分离,功能如下
它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
它可以让新窗口"接入"已经存在的会话。
它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
它还支持窗口任意的垂直和水平拆分

例:

安装tmux
[01:56:16 root@zhang ~]#dnf install -y tmux
启动和退出
[02:02:52 root@zhang ~]#tmux 
[02:02:52 root@zhang ~]#exit
logout
新建会话
第一个启动的 Tmux 窗口,编号是0,第二个窗口的编号是1,以此类推。这些窗口对应的会话,就是0号会话、1号会话。使用编号区分会话,不太直观,更好的方法是为会话起名。下面命令新建一个指定名称的会话。
tmux new -s <session-name>

tmux ls或Ctrl+b,s 可以查看当前所有的 Tmux 会话
tmux ls
tmux list-session

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

接入会话
tmux attach 命令用于重新接入某个已存在的会话。
tmux attach -t <session-name>

范例:
tmux attach -t 0

杀死会话
tmux kill-session命令用于杀死某个会话。
tmux kill-session -t <session-name>

切换会话
tmux switch命令用于切换会话
tmux switch -t <session-name>

可以将窗口分成多个窗格(pane),每个窗格运行不同的命令
上下分窗格
tmux split-window
ctrl+b,"

左右分窗格
tmux split-window -h
ctrl+b,%
窗格快捷键
Ctrl+b %:划分左右两个窗格
Ctrl+b ":划分上下两个窗格
Ctrl+b <arrow key>:光标切换到其他窗格。<arrow key>是指向要切换到的窗格的方向键,比如切换
到下方窗格,就按方向键↓
Ctrl+b ;:光标切换到上一个窗格
Ctrl+b o:光标切换到下一个窗格。
Ctrl+b {:当前窗格左移
Ctrl+b }:当前窗格右移
Ctrl+b Ctrl+o:当前窗格上移
Ctrl+b Alt+o:当前窗格下移
Ctrl+b x:关闭当前窗格
Ctrl+b !:将当前窗格拆分为一个独立窗口
Ctrl+b z:当前窗格全屏显示,再使用一次会变回原来大小
Ctrl+b Ctrl+<arrow key>:按箭头方向调整窗格大小
Ctrl+b q:显示窗格编号
窗口管理
除了将一个窗口划分成多个窗格,Tmux 也允许新建多个窗口
新建窗口
tmux new-window命令用来创建新窗口
tmux new-window

新建一个指定名称的窗口
tmux new-window -n <window-name>

切换窗口
tmux select-window命令用来切换窗口
切换到指定编号的窗口
tmux select-window -t <window-number>

切换到指定名称的窗口
tmux select-window -t <window-name>

窗口快捷键
Ctrl+b c:创建一个新窗口,状态栏会显示多个窗口的信息。
Ctrl+b p:切换到上一个窗口(按照状态栏上的顺序)。
Ctrl+b n:切换到下一个窗口。
Ctrl+b <number>:切换到指定编号的窗口,其中的<number>是状态栏上的窗口编号
Ctrl+b w:从列表中选择窗口
Ctrl+b ,:窗口重命名

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

列出所有 Tmux 命令及其参数
tmux list-commands

5.10 输出信息echo

5.10.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字符
\xHH 插入HH(十六进制)所代表的ASCII数字(man 7 ascii)

例:

[root@zhang ~]#echo -e 'a\x0ab'
a
b

[root@zhang ~]#echo -e '\033[43;31;1;5mzhangle\e[0m'
zhangle
[root@zhang ~]#echo \$path
$path
[root@zhang ~]#echo \$PATH
$PATH
5.10.2 echo高级用法

​ 在终端,ANSI定义了用于屏幕显示的Escape屏幕控制码

​ 具有颜色的字符,格式如下

"\033[字符背景颜色;字体颜色m字符串\033[0m"
\033[30m -- \033[37m 设置前景色
\033[40m -- \033[47m 设置背景色
字符背景颜色范围: 40--49
40: 黑
41:红
42:绿
43:黄
44:蓝
45:紫
46:深绿
47:白色
字体颜色: 30--39
30: 黑
31: 红
32: 绿
33: 黄
34: 蓝
35: 紫
36: 深绿
37: 白色

加颜色知识以下控制码中的一种
\033[0m 关闭所有属性
\033[1m 设置高亮度
\033[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[nA 光标上移n行
\033[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
\033[y;xH 设置光标位置1.8 字符集和编码
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\033[?25h 显示光标
\033[2J\033[0;0H 清屏且将光标置顶

5.11 字符集和编码

​ 许多场合下,字符集与编码这两个改练常被混为一谈,但两者是有差别的。字符集与字符集编码是两个不同层面的概念

​ charset是character set的简写,即二进制和字符的对应关系,不关注最终的存储形式encoding是charset encoding的简写,即字符集编码简称编码,实现如何将字符转化为实际的二进制进行存储或相反,编码决定了空间的使用的大小。

5.11.1 ASCII码

​ 计算机内部所有信息最终都是一个二进制值。上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制之间的关系,做了一个规定,几ASCII(American Standard Code for Information Interchange)码

​ ASCII码一共规定了128个字符的编码,占用了一个字节的后面7位,最前面的一位统一规定为0

例:

[11:38:49 root@zhang ~]#man ascii

注:默认安装,若没有只需安装以下man-pages包
5.11.2 Unicode

​ 早期ASCII码只有127个字母被编码到计算机里,即ASCII编码,但是处理中文显然一个字节不够,至少需要两个字节,而且还不能和ASCII编码冲突,所以中国制定了GB2312编码,用来把中文编进去。

​ 全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文变到Euc-kr里,各国有各国的标准,就会有不可避免地冲突,结果是多种语言混合到文本中就会出现乱码。

​ 为了表示世界上所有语言中的所有字符。每一个符号都给予一个独一无二的编码数字,Unicode 是一个很大的集合,现在的规模可以容纳100多万个符号。Unicode 仅仅只是一个字符集,规定了每个字符对应的二进制代码,至于这个二进制代码如何存储则没有规定

unicode编码方案:
UTF-8:	变长,1到4个字节,当前最主流的方案
UTF-16:	变长,2或4个字节
UTF-32:	固定长度,4个字节

​ UTF-8是目前互联网上使用最广泛的一种Unicode编码方式,可变长存储。使用1-4个字节表示一个字符,根据字符的不同长度变换长度。

编码规则如下:

​ 对于单个字节的字符,第一位设为 0,后面的 7 位对应这个字符的 Unicode 码。因此,对于英文中的 0-127 号字符,与 ASCII 码完全相同。这意味着 ASCII 码的文档可用 UTF-8 编码打开。
​ 对于需要使用 N 个字节来表示的字符(N > 1),第一个字节的前 N 位都设为 1,第 N + 1 位设为0,剩余的 N - 1 个字节的前两位都设位 10,剩下的二进制位则使用这个字符的 Unicode 码来填充 。

编码转换和查询参考链接:
http://www.chi2ko.com/tool/CJK.htm
https://www.bejson.com/convert/unicode_chinese/
https://javawind.net/tools/native2ascii.jsp?action=transform
http://tool.oschina.net/encode
http://web.chacuo.net/charsetescape
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

例:

[12:05:21 root@zhang ~]#echo $LANG
en_US.UTF-8
[12:32:22 root@zhang ~]#LANG=zh_CN.UTF-8
[12:32:51 root@zhang ~]#echo $LANG 
zh_CN.UTF-8
[12:33:04 root@zhang ~]#zhangle
-bash: zhangle: 未找到命令

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

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

​ 把一个命令的输出打印给另一个命令的参数

$(COMMAND)或`COMMAND`

#COMMAND必须是一个有标出信息的命令
范围:比较"",'',``三者区别
[14:44:48 root@zhang ~]#echo "echo $HOSTNAME"
echo zhang
[14:45:03 root@zhang ~]#echo 'echo $HOSTNAME'
echo $HOSTNAME
[14:45:26 root@zhang ~]#echo `echo $HOSTNAME`
zhang

#结论
单引号:六亲不认,变量和命令都不识别,都当成了普通的字符串;
反向单引号:变量和命令都识别,并且会将反向单引号的内容当成命令进行执行后,再交给调用反向单引号的命令继续;
双引号:不能识别命令,可以识别变量。

例:

[14:51:22 root@zhang ~]#echo "this my $(hostname)"
this my zhang

[14:51:55 root@zhang ~]#echo "I am `whoami`"
I am root

[14:52:23 root@zhang ~]#touch $(date +%F).log
[14:52:59 root@zhang ~]#ls 
2020-11-09.log

[14:53:27 root@zhang ~]#touch `date +%F`.txt
[14:53:36 root@zhang ~]#ll
-rw-r--r--  1 root root    0 Nov  9 14:53 2020-11-09.txt

[14:53:38 root@zhang ~]#touch `hostname`-`date +%F`.log
[14:54:18 root@zhang ~]#ll
-rw-r--r--  1 root root    0 Nov  9 14:54 zhang-2020-11-09.log

[14:54:19 root@zhang ~]#touch `date +%F_%H-%M-%S`.log
[14:55:14 root@zhang ~]#ll
-rw-r--r--  1 root root    0 Nov  9 14:55 2020-11-09_-55-14.log

例:$( )和``

[14:31:33 root@zhang ~]#ll $(touch $(date +%F).txt)
-rw-r--r--  1 root root    0 Nov 10 14:32 2020-11-10.txt

[14:35:08 root@zhang ~]#ll `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

[14:33:01 root@zhang ~]#ll `touch $(date +%F).txt`
-rw-r--r--  1 root root    0 Nov 10 14:33 2020-11-10.txt

[14:33:58 root@zhang ~]#ll `echo $(date +%F).txt`
-rw-r--r-- 1 root root 0 Nov 10 14:33 2020-11-10.txt

[14:35:02 root@zhang ~]#ll $(echo `date +%F`.txt)
-rw-r--r-- 1 root root 0 Nov 10 14:33 2020-11-10.txt

5.12.2 括号扩展:

​ {}可以实现打印重复字符串的简化形式

例:

[15:01:25 root@zhang ~]#echo file{1,3,5}
file1 file3 file5
[15:01:40 root@zhang ~]#rm -f file{1,3,5}
[15:01:54 root@zhang ~]#ls 

[15:02:09 root@zhang data]#echo {1..10}
1 2 3 4 5 6 7 8 9 10
[15:02:18 root@zhang data]#echo {a..g..2}
a c e g

5.13 tab键补全

​ tab键可以实现命令的补全

5.13.1 命令补全

内部命令
外部命令:bash根据PATH环境变量定义的路径,自作而右在每个路径搜寻已给定命令命名的文件,第一次找到的命令即为要执行的命令。
命令的子命令补全:需要安装bash-completion

注:用户给定的字符串只有一条唯一的对应命令,直接不全,否则,再次tab会给出列表
例:
[15:02:29 root@zhang data]#cd /etc/sys
sysconfig/ sysctl.d/  systemd/   

5.13.2 路径不全

把用户给出的字符串当做路径开头,并在其指定上级目录下搜索以指定的字符串开头的文件名;
如果惟一,则直接不全;否则再次tab给出列表

5.13.3 双击tab键

command 2Tab 所有子命令或文件补全
string2Tab 以string开头命令
/2Tab 显示所有根目录下一级目录,包括隐藏目录
./2Tab 当前目录下子目录,包括隐藏目录
*2Tab 当前目录下子目录,不包括隐藏目录
~2Tab 所有用户列表
$2Tab 所有变量
@2Tab /etc/hosts记录 (centos7 不支持)
=2Tab 相当于ls –A (centos7不支持)

5.14 命令行历史

​ 当执行命令后,系统默认会在内存记录执行过的命令
​ 当用户正常退出时,会将内存的命令历史存放对应历史文件中,默认是~/.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
HISTFILESIZE:命令历史文件记录历史的条数
HISTTIMEFORMAT="%F %T `whoami` " 显示时间和用户
HISTIGNORE="str1:str2*:…" 忽略str1命令,str2开头的历史
HISTCONTROL:控制命令历史的记录方式
	ignoredups 是默认值,可忽略重复的命令,连续且相同为“重复”
	ignorespace 忽略所有以空白开头的命令
	ignoreboth 相当于ignoredups, ignorespace的组合
	erasedups 删除重复命令
持久保存变量

​ 以上变量export变量名="值"形式存放在/etc/profile或者~/.bash_profile

例:

[15:36:18 root@zhang ~]#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
alias cman='man -M /usr/local/cman/share/man/zh_CN'
export HISTTIMEFORMAT="%F %T `whoami` "

[15:36:21 root@zhang ~]#history 
  230  2020-11-10 15:35:34 rootcd
  231  2020-11-10 15:35:41 rootcat .bash_profile 
  232  2020-11-10 15:36:03 rootvim ~/.bash_profile 
  233  2020-11-10 15:36:21 rootcat .bash_profile 
  234  2020-11-10 15:36:35 roothistory 

5.15 调用命令行历史

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

5.16 bash的快捷键

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

6、帮助用法

​ 获取帮助的能力决定了技术的能力!
​ 多层次的帮助

whatis
command --help
man and info
/usr/share/doc/  
Red Hat documentation 、Ubuntu documentation
软件项目网站
其它网站
搜索 

6.1 whatis

​ whatis使用数据库来显示命令的简短描述

​ 此工具在系统刚安装后,不可立即使用,需要生成数据库才可使用

#CentOS 7 版本以后
mandb
#CentOS 6 版本之前
makewhatis

例:

[15:36:35 root@zhang ~]#whatis cal
cal (1)              - display a calendar
cal (1p)             - print a calendar

[15:45:13 root@zhang ~]#man -f cal
cal (1)              - display a calendar
cal (1p)             - print a calendar

6.2 查看命令的帮助

6.2.1 内部命令帮助
	help COMMAND

​	man bash

例:

[15:48:50 root@zhang ~]#type history 
history is a shell builtin
[15:50:49 root@zhang ~]#help history 
history: history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]
    Display or manipulate the history list.
    
    Display the history list with line numbers, prefixing each modified
    entry with a `*'.  An argument of N lists only the last N entries.
    
    Options:
      -c	clear the history list by deleting all of the entries
      -d offset	delete the history entry at offset OFFSET.
    
      -a	append history lines from this session to the history file
      -n	read all history lines not already read from the history file
      -r	read the history file and append the contents to the history
    	list
      -w	write the current history to the history file
    	and append them to the history list
    
      -p	perform history expansion on each ARG and display the result
    	without storing it in the history list
      -s	append the ARGs to the history list as a single entry
    
    If FILENAME is given, it is used as the history file.  Otherwise,
    if $HISTFILE has a value, that is used, else ~/.bash_history.
    
    If the $HISTTIMEFORMAT variable is set and not null, its value is used
    as a format string for strftime(3) to print the time stamp associated
    with each displayed history entry.  No time stamps are printed otherwise.
    
    Exit Status:
    Returns success unless an invalid option is given or an error occurs.
6.2.2 外部命令和软件帮助
COMMAND --help 或 COMMAND -h
使用 man 手册(manual): man COMMAND
信息页:info COMMAND
程序自身的帮助文档:README、INSTALL、ChangeLog
程序官方文档
相关网站
搜索引擎

6.3 --help或-h选项

​ 显示用法总结和参数列表,大多数命令使用,但并非所有的。

例:

[15:50:56 root@zhang ~]#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.

Mandatory arguments to long options are mandatory for short options too.
  -d, --date=STRING         display time described by STRING, not 'now'
  -f, --file=DATEFILE       like --date once for each line of DATEFILE
  -I[TIMESPEC], --iso-8601[=TIMESPEC]  output date/time in ISO 8601 format.
                            TIMESPEC='date' for date only (the default),
                            'hours', 'minutes', 'seconds', or 'ns' for date
                            and time to the indicated precision.
  -r, --reference=FILE      display the last modification time of FILE
  -R, --rfc-2822            output date and time in RFC 2822 format.
                            Example: Mon, 07 Aug 2006 12:34:56 -0600
      --rfc-3339=TIMESPEC   output date and time in RFC 3339 format.
                            TIMESPEC='date', 'seconds', or 'ns' for
                            date and time to the indicated precision.
                            Date and time components are separated by
                            a single space: 2006-08-07 12:34:56-06:00
  -s, --set=STRING          set time described by STRING
  -u, --utc, --universal    print or set Coordinated Universal Time (UTC)
      --help     display this help and exit
      --version  output version information and exit

FORMAT controls the output.  Interpreted sequences are:

  %%   a literal %
  %a   locale's abbreviated weekday name (e.g., Sun)
  %A   locale's full weekday name (e.g., Sunday)
  %b   locale's abbreviated month name (e.g., Jan)
  %B   locale's full month name (e.g., January)
  %c   locale's date and time (e.g., Thu Mar  3 23:05:25 2005)
  %C   century; like %Y, except omit last two digits (e.g., 20)
  %d   day of month (e.g., 01)
  %D   date; same as %m/%d/%y
  %e   day of month, space padded; same as %_d
  %F   full date; same as %Y-%m-%d
  %g   last two digits of year of ISO week number (see %G)
  %G   year of ISO week number (see %V); normally useful only with %V
  %h   same as %b
  %H   hour (00..23)
  %I   hour (01..12)
  %j   day of year (001..366)
  %k   hour, space padded ( 0..23); same as %_H
  %l   hour, space padded ( 1..12); same as %_I
  %m   month (01..12)
  %M   minute (00..59)
  %n   a newline
  %N   nanoseconds (000000000..999999999)
  %p   locale's equivalent of either AM or PM; blank if not known
  %P   like %p, but lower case
  %r   locale's 12-hour clock time (e.g., 11:11:04 PM)
  %R   24-hour hour and minute; same as %H:%M
  %s   seconds since 1970-01-01 00:00:00 UTC
  %S   second (00..60)
  %t   a tab
  %T   time; same as %H:%M:%S
  %u   day of week (1..7); 1 is Monday
  %U   week number of year, with Sunday as first day of week (00..53)
  %V   ISO week number, with Monday as first day of week (01..53)
  %w   day of week (0..6); 0 is Sunday
  %W   week number of year, with Monday as first day of week (00..53)
  %x   locale's date representation (e.g., 12/31/99)
  %X   locale's time representation (e.g., 23:13:48)
  %y   last two digits of year (00..99)
  %Y   year
  %z   +hhmm numeric time zone (e.g., -0400)
  %:z  +hh:mm numeric time zone (e.g., -04:00)
  %::z  +hh:mm:ss numeric time zone (e.g., -04:00:00)
  %:::z  numeric time zone with : to necessary precision (e.g., -04, +05:30)
  %Z   alphabetic time zone abbreviation (e.g., EDT)

By default, date pads numeric fields with zeroes.
The following optional flags may follow '%':

  -  (hyphen) do not pad the field
  _  (underscore) pad with spaces
  0  (zero) pad with zeros
  ^  use upper case if possible
  #  use opposite case if possible

After any flags comes an optional field width, as a decimal number;
then an optional modifier, which is either
E to use the locale's alternate representations if available, or
O to use the locale's alternate numeric symbols if available.

Examples:
Convert seconds since the epoch (1970-01-01 UTC) to a date
  $ date --date='@2147483647'

Show the time on the west coast of the US (use tzselect(1) to find TZ)
  $ TZ='America/Los_Angeles' date

Show the local time for 9AM next Friday on the west coast of the US
  $ date --date='TZ="America/Los_Angeles" 09:00 next Fri'

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
For complete documentation, run: info coreutils 'date invocation'

格式说明:

[] 表示可选项
CAPS或 <> 表示变化的数据
... 表示一个列表
x |y| z 的意思是“ x 或 y 或 z ”
-abc的 意思是 -a -b –c
{ } 表示分组

6.4 man命令

​ man 提供命令帮助的文件,手册页存放在/usr/share/man
​ 几乎每个命令都有man的“页面”
​ 中文man需安装包

man-pages
man-pages-zh-CN
man章节

​ man 页面分组为不同的“章节”,统称为Linux手册,man 1 man

1:用户命令
2:系统调用
3:C库调用
4:设备文件及特殊文件
5:配置文件格式
6:游戏
7:杂项
8:管理类的命令
9:Linux 内核API
man命令的配置文件
#CentOS 6 之前版 man 的配置文件
/etc/man.config
#CentOS 7 之后版 man 的配置文件
/etc/man_db.conf
#ubuntu man 的配置文件
/etc/manpath.config

​ 格式:

ANPATH /PATH/TO/SOMEWHERE				#指明man文件搜索位置
man -M /PATH/TO/SOMEWHERE COMMAND		#指定位置搜索
man [章节] keyword					   #查看man手册
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常用选项

​ 列出所有帮助

man -a keyword

​ 搜索man手册

#列出所有匹配的页面,使用 whatis 数据库
man -k keyword

​ 相当于whatis

man -f keyword

​ 打印man帮助文件的路径

man -w [章节] keyword

例:

[16:02:37 root@zhang ~]#yum install man-pages
Loaded plugins: fastestmirror, langpacks

[16:12:10 root@zhang ~]#man -w 1 passwd
/usr/share/man/man1/passwd.1.gz

[16:12:39 root@zhang ~]#whatis passwd
sslpasswd (1ssl)     - compute password hashes
passwd (1)           - update user's authentication tokens
passwd (5)           - password file

[16:12:49 root@zhang ~]#man 1ss1 openssl-passwd
No manual entry for openssl-passwd in section 1ss1

[16:13:06 root@zhang ~]#man 7 ascii

[16:14:14 root@zhang ~]#man 7 utf8

6.5 info

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

​ info命令格式

info [ 命令 ]

​ 导航info页

方向键,PgUp,PgDn 导航
Tab键 移动到下一个链接
d 显示主题目录
Home 显示主题首部
Enter进入 选定链接
n/p/u/l 进入下/前/上一层/最后一个链接
s 文字 文本搜索
q 退出 info

6.6 Linux系统安装提供的本地文档获取帮助

​ Applications -> documentation->help(centos7)
​ System->help(centos6)

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

​ /usr/share/doc 目录
​ 多数安装了的软件包的子目录,包括了这些软件的相关原理说明
​ 常见文档:README INSTALL CHANGES
​ 不适合其它地方的文档的位置
​ 配置文件范例
​ HTML/PDF/PS 格式的文档
​ 授权书详情

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

通过在线文档获取帮助
http://www.github.com
https://www.kernel.org/doc/html/latest/
http://httpd.apache.org
http://www.nginx.org
https://mariadb.com/kb/en
https://dev.mysql.com/doc/
http://tomcat.apache.org
https://jenkins.io/zh/doc/
https://kubernetes.io/docs/home/
https://docs.openstack.org/train/
http://www.python.org
http://php.net

linux官方在线文档和知识库
http://kbase.redhat.com
http://www.redhat.com/docs
http://access.redhat.com
https://help.ubuntu.com/lts/serverguide/index.html
http://tldp.org
posted @ 2020-11-18 14:43  安尧  阅读(409)  评论(0)    收藏  举报