Part1:Linux基础入门

Linux基础

辅助学习资源

1.Linux基础

1.1 用户类型

root 用户
一个特殊的管理帐户
也被称为超级用户
root已接近完整的系统控制
对系统损害几乎有无限的能力
除非必要,不要登录为root
普通(非特权)用户
权限有限
造成损害的能力比较有限

1.2 终端 terminal

1.2.1查看当前所在终端

tty
示例:

[root@Centos8 ~]# tty
/dev/pts/1

扩展:系统运行级别

Linux系统有7个运行级别(runlevel)
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

运行级别的原理:
1.在目录/etc/rc.d/init.d下有许多服务器脚本程序,一般称为服务(service)
2.在/etc/rc.d下有7个名为rcN.d的目录,对应系统的7个运行级别
3.rcN.d目录下都是一些符号链接文件,这些链接文件都指向init.d目录下的service脚本文件,命名规则为K+nn+服务名或S+nn+服务名,其中nn为两位数字。
4.系统会根据指定的运行级别进入对应的rcN.d目录,并按照文件名顺序检索目录下的链接文件
对于以K开头的文件,系统将终止对应的服务
对于以S开头的文件,系统将启动对应的服务
5.查看运行级别用:runlevel
6.进入其它运行级别用:init N

7.另外init0为关机,init 6为重启系统

1.3 Shell

Shell 是Linux系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行
shell也被称为LINUX的命令解释器(command interpreter),Shell本身是一个程序。将用户输入的命令行拆解为"命令名"与’参数"。接着,根据命令名找到对应要执行的程序,对被执行的程序进行初始化,然后将刚才解析出来的参数传给该程序并执行
shell是一种高级程序设计语言,提供了变量,函数,条件判断,循环等开发语言的功能
由于Shell本身是个程序,所以它可以被任何用户自己开发的各种Shell所代替

1.3.1 查看当前使用的shell

echo ${SHELL}
示例:

[root@Centos8 ~]# echo ${SHELL}
/bin/bash

###1.3.2显示当前系统使用的所有shell
cat /etc/shells
示例:

[root@Centos8 ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

##1.4 设置主机名
hostname 主机名
示例:

[root@Centos8-100-0-0-150 ~]# hostname Centos8.2.2004

查看主机名

[root@Centos8-100-0-0-150 ~]# hostname
Centos8.2.2004

退出重新登录

[root@Centos8-100-0-0-150 ~]# exit
[root@Centos8 ~]#

1.5 命令提示符

1.5.1命令提示符:prompt

[15:25:04 root@Centos8 ~]#
[16:47:17 mage@Centos8 /root]$
提示符说明
#管理员
$普通用户

1.5.2显示提示符格式

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

1.5.3修改提示符格式范例

PS1="\[\e[1;5;41;33m\][\u@\h \w]\\ $\[\e[0m\]"
PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \w\[\e[1;32m\]]\[\e[0m\]\\$"

1.5.4提示符格式说明:

提示符说明
\e控制符\033
\u当前用户
\h主机名简称
\H主机名
\w当前工作目录
\W当前工作目录基名
\t24小时时间格式
\T12小时时间格式
!命令历史数
#开机后命令历史数

示例:CentOS系统持久保存提示符格式相关变量PS1

[root@Centos8 ~]# 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
[root@Centos8 ~]# cat  /etc/profile.d/env.sh
PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \w\[\e[1;32m\]]\[\e[0m\]\\$"


示例:Ubuntu系统持久保存提示符格式相关变量PS1

echo 'PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \w\[\e[1;32m\]]\[\e[0m\]\\$"' >> .bashrc

1.6.执行命令

1.6.1 执行命令过程

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

1.6.2 shell中可执行的两类命令

内部命令:由shell自带的,而且通过某命令形式提供
外部命令:在文件系统路径下有对应的可执行程序文件

外部命令怎么找?–路径搜索顺序

[21:28:37 root@Centos8 /bin]#echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

找不着:

[21:29:03 root@Centos8 /bin]#xxxx
-bash: xxxx: command not found

区别指定的命令是内部或外部命令
type COMMAND
示例:

[09:52:18 root@Centos7 ~]#type -a cd
cd is a shell builtin
cd is /usr/bin/cd
1.6.2.1内部命令相关

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

命令说明
enable cmd启用内部命令
enable -n cmd禁用内部命令
enable -n查看所有禁用的内部命令
1.6.2.2执行外部命令

查看外部命令路径:

which -a |--skip-alias
whereis
Hash缓存表

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

hash命令常见用法注释
hash显示hash缓存header
hash -l显示hash缓存,可作为输入使用
hash -p path name将命令全路径path起别名为name
hash -t name打印缓存中name的路径
hash -d name清除name缓存
hash -r清除全部缓存

1.6.3命令别名

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

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

示例:

注意:在命令行中定义的别名,仅对当前shell进程有效,如果想永久有效,要定义在配置文件中
·仅对当前用户:~/.bashrc
·对所有用户有效: /etc/bashrc
编辑配置给出的新配置不会立即生效,bash进程重新读取配置文件

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

范例:

[10:07:54 root@Centos7 ~]#cat /etc/bashrc | grep alias
# System wide functions and aliases
alias ram='free -h'
[10:08:25 root@Centos7 ~]#source /etc/bashrc
[10:08:33 root@Centos7 ~]#ram
              total        used        free      shared  buff/cache   available
Mem:           1.8G        178M        1.3G         17M        278M        1.4G
Swap:          1.0G          0B        1.0G

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

\ALIASNAME
“ALIASNAME”
‘ALIASNAME'
command ALIASNAME
/path/ commmand#  只适用于外部命令
命令执行顺序 alias->内部->hash->内部命令->error

1.6.4命令格式

COMMAND [OPTIONs. . .] [ARGUMENTS. . .]
选项:用于启用或关闭命令的某个或某些功能
短选项:UNIX风格选项,-c例如:-, -h
长选项:GNU风格选项,–word 例如: --all, --human
BSD风格选项:一个字母,例如: a,使用相对较少
参数:命令的作用对象,比如:文件名,用户名等
示例:


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

1.7.常见命令

1.7.1查看硬件信息

1.7.1.1查看cpu

lscpu
cat /proc/cpuinfo
示例:

[16:48:17 root@Centos8 ~]#lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              2
On-line CPU(s) list: 0,1
Thread(s) per core:  1      #每个core有几个线程
Core(s) per socket:  1      #每个槽位有几个core
Socket(s):           2      #服务器面板上有几个CPU槽位
NUMA node(s):        1      #nodes的数量
Vendor ID:           AuthenticAMD
CPU family:          23
Model:               113
Model name:          AMD Ryzen 5 3600 6-Core Processor
Stepping:            0
CPU MHz:             3600.005
BogoMIPS:            7200.01
Hypervisor vendor:   VMware
Virtualization type: full
L1d cache:           32K
L1i cache:           32K
L2 cache:            512K
L3 cache:            16384K
NUMA node0 CPU(s):   0,1      #对应的core
[17:14:08 root@Centos8 ~]#cat /proc/cpuinfo
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 23
model           : 113
model name      : AMD Ryzen 5 3600 6-Core Processor
stepping        : 0
microcode       : 0x8701013
cpu MHz         : 3600.005
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     : 16
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 rep_good nopl tsc_reliable nonstop_tsc cpuid extd_apicid 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 ssbd ibpb vmmcall fsgsbase bmi1 avx2 smep bmi2 rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves clzero wbnoinvd arat umip rdpid overflow_recov succor
bugs            : fxsave_leak sysret_ss_attrs spectre_v1 spectre_v2 spec_store_bypass
bogomips        : 7200.01
TLB size        : 3072 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 45 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : AuthenticAMD
cpu family      : 23
model           : 113
model name      : AMD Ryzen 5 3600 6-Core Processor
stepping        : 0
microcode       : 0x8701013
cpu MHz         : 3600.005
cache size      : 512 KB
physical id     : 2
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 2
initial apicid  : 2
fpu             : yes
fpu_exception   : yes
cpuid level     : 16
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 rep_good nopl tsc_reliable nonstop_tsc cpuid extd_apicid 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 ssbd ibpb vmmcall fsgsbase bmi1 avx2 smep bmi2 rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves clzero wbnoinvd arat umip rdpid overflow_recov succor
bugs            : fxsave_leak sysret_ss_attrs spectre_v1 spectre_v2 spec_store_bypass
bogomips        : 7200.01
TLB size        : 3072 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 45 bits physical, 48 bits virtual
power management:
1.7.1.2查看内存大小
[17:19:48 root@Centos8 ~]#free -h
              total        used        free      shared  buff/cache   available
Mem:          1.9Gi       216Mi       1.5Gi       8.0Mi       207Mi       1.5Gi
Swap:         2.0Gi          0B       2.0Gi
[17:21:15 root@Centos8 ~]#cat /proc/meminfo
MemTotal:        2007096 kB
MemFree:         1573204 kB
MemAvailable:    1625612 kB
Buffers:            3128 kB
Cached:           170296 kB
SwapCached:            0 kB
Active:           148916 kB
Inactive:         109748 kB
Active(anon):      85624 kB
Inactive(anon):     8468 kB
Active(file):      63292 kB
Inactive(file):   101280 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         83344 kB
Mapped:            78708 kB
Shmem:              8852 kB
KReclaimable:      38740 kB
Slab:             106288 kB
SReclaimable:      38740 kB
SUnreclaim:        67548 kB
KernelStack:        4432 kB
PageTables:         6368 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     3100696 kB
Committed_AS:     281552 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
Percpu:            44544 kB
HardwareCorrupted:     0 kB
AnonHugePages:     18432 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:      116608 kB
DirectMap2M:     1980416 kB
DirectMap1G:           0 kB
[17:22:01 root@Centos8 ~]#
1.7.1.3查看硬盘和分区情况
[17:22:01 root@Centos8 ~]#lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   20G  0 disk
├─sda1   8:1    0    5G  0 part /
├─sda2   8:2    0    3G  0 part /data
└─sda3   8:3    0    2G  0 part [SWAP]
sr0     11:0    1  1.6G  0 rom
[17:24:36 root@Centos8 ~]#cat /proc/partitions
major minor  #blocks  name

   8        0   20971520 sda
   8        1    5242880 sda1
   8        2    3145728 sda2
   8        3    2097152 sda3
  11        0    1678336 sr0

1.7.2查看系统版本信息

1.7.2.1查看内核版本
[17:25:06 root@Centos8 ~]#uname -r
4.18.0-193.el8.x86_64
[17:31:02 root@ubuntu18 ~]#uname -r
4.15.0-112-generic
1.7.2.2查看操作系统发行版本

Centos8查看发行版本

[17:25:06 root@Centos8 ~]#uname -r
4.18.0-193.el8.x86_64
[17:30:42 root@Centos8 ~]#cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)
[17:32:34 root@Centos8 ~]#cat /etc/os-release
NAME="CentOS Linux"
VERSION="8 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="8"


Ubuntu查看发行版本

[17:31:29 root@ubuntu18 ~]#cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.5 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.5 LTS"
VERSION_ID="18.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=bionic
UBUNTU_CODENAME=bionic
[17:35:49 root@ubuntu18 ~]#cat /etc/issue
Ubuntu 18.04.5 LTS \n \l
[17:36:06 root@ubuntu18 ~]#lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.5 LTS
Release:        18.04
Codename:       bionic

1.7.3日期和时间

Linux的两种时钟
系统时钟:由Linux内核通过CPU的工作频率进行的
硬件时钟:主板

相关命令
date显示和设置系统时间
示例

[17:43:20 root@Centos8 ~]#date +%s
1605433408
[17:43:28 root@Centos8 ~]#date -d @`date +%s`
Sun Nov 15 17:43:36 CST 2020
[17:43:36 root@Centos8 ~]#date -d @1605433408
Sun Nov 15 17:43:28 CST 2020
[17:43:48 root@Centos8 ~]#date -d @1605433408 +%F_%T
2020-11-15_17:43:28

clock,hwclock:显示硬件时钟

[17:44:01 root@Centos8 ~]#clock
2020-11-15 17:46:42.915503+08:00
[17:46:43 root@Centos8 ~]#hwclock
2020-11-15 17:46:51.150697+08:00
-s, --hctosys以硬件时钟为准,校正系统时钟
-w, --systohc以系统时钟为准,校正硬件时钟

时区文件:
/etc/localtime

[17:48:23 root@Centos8 ~]#ll /etc/localtime
lrwxrwxrwx. 1 root root 35 Nov 14 19:10 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai

[17:36:18 root@ubuntu18 ~]#cat /etc/timezone
Asia/Chongqing

显示日历

[17:50:02 root@Centos8 ~]#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

[17:52:19 root@Centos8 ~]#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

1.7.4关机和重启

关机:
halt
poweroff
重启: reboot

-f #强制,不调用shutdown
-p #切断电源

关机或重启: shutdown

shutdown [OPTION]...[TIME][MESSAGE]
-r: reboot
-h: halt
-c: cancel

TIME:无指定,默认相当于+1 (centos7)
now:立刻,相当于+O
+#:相对时间表示法,几分钟之后:例如+3
hh:mm:绝对时间表示,指明具体时间

1.7.5用户登录信息查看命令

whoami:显示当前登录有效用户
who:系统当前所有的登录会话
w:系统当前所有的登录会话及所做的操作
###1.7.6文本编辑
nano工具可以实现文本的编辑,上手容易,适合初学者
gedit工具是图形工具

1.7.7会话管理

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

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

1.7.7.1 screen

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

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


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

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

\x表示后面的字符是十六进制数,\0表示后面的字符是八进制数。例如星星问题中的’\x0A’即表达16进制中A即10进制中10所代表的字符,即\n,因此’\x0A’等价于’\n’

1.7.8.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:白色

加颜色只是以下控制码的一种,下面是常见的一些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[y;xH      设置光标位置
\033[2J      清屏
\033[K      清除从光标到行尾的内容
\033[s      保存光标位置
\033[u      恢复光标位置
\033[?25l      隐藏光标
\033[?25h      显示光标
\033[2J\033[0;0H      清屏且将光标置顶

示例:红底黄字闪烁
echo -e "\033[41;33;5mHost will reboot at 18:30! \033[0m"

1.8字符集和编码

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

1.8.1 ASCII码

0-127,128个字符编码

范例:查看ascii表

[root@centos8 ~]#dnf -y install man-pages
[root@centos8 ~]#man ascii

1.8.2 Unicode

Unicode编码方案:
UTF-8:变长,1到4个字节,当前最主流的方案
UTF-16:变长,2或4个字节
UTF-32:固定长度,4个字节
范例:修改LANG变量实现中文语言提示

[06:36:15 root@Centos7 ~]#echo $LANG
en_US.UTF-8
[06:36:18 root@Centos7 ~]#xxx
-bash: xxx: command not found
[06:36:28 root@Centos7 ~]#LANG=zh_CN.UTF-8
[06:36:58 root@Centos7 ~]#echo $LANG
zh_CN.UTF-8
[06:37:01 root@Centos7 ~]#xxx
-bash: xxx: 未找到命令
[06:37:05 root@Centos7 ~]#

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

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

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

$(COMMAND)或`COMMAND`
#COMMAND必须是一个有标出信息的命令

范例:比较"",’’,``三者区别

[10:24:13 root@Centos8 ~]#echo "echo $HOSTNAME"
echo Centos8
[10:24:53 root@Centos8 ~]#echo 'echo $HOSTNAME'
echo $HOSTNAME
[10:25:11 root@Centos8 ~]#echo `echo $HOSTNAME`
Centos8

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

范例:

[10:33:17 root@Centos8 /data]#touch $(date +%F).log
[10:33:21 root@Centos8 /data]#ll
total 0
-rw-r--r--. 1 root root 0 Dec 18 10:33 2020-12-18.log
[10:33:23 root@Centos8 /data]#touch `date +%F`.txt
[10:33:34 root@Centos8 /data]#ll
total 0
-rw-r--r--. 1 root root 0 Dec 18 10:33 2020-12-18.log
-rw-r--r--. 1 root root 0 Dec 18 10:33 2020-12-18.txt
[10:33:35 root@Centos8 /data]#touch `hostname`-`date +%F`.log
[10:34:22 root@Centos8 /data]#ll
total 0
-rw-r--r--. 1 root root 0 Dec 18 10:33 2020-12-18.log
-rw-r--r--. 1 root root 0 Dec 18 10:33 2020-12-18.txt
-rw-r--r--. 1 root root 0 Dec 18 10:34 Centos8-2020-12-18.log
[10:34:23 root@Centos8 /data]#touch `date +%F_%H-%M-%S`.log
[10:35:24 root@Centos8 /data]#ll
total 0
-rw-r--r--. 1 root root 0 Dec 18 10:35 2020-12-18_10-35-24.log
-rw-r--r--. 1 root root 0 Dec 18 10:33 2020-12-18.log
-rw-r--r--. 1 root root 0 Dec 18 10:33 2020-12-18.txt
-rw-r--r--. 1 root root 0 Dec 18 10:34 Centos8-2020-12-18.log
[10:35:27 root@Centos8 /data]#touch `date -d '-1 day' +%F`.log
[10:36:47 root@Centos8 /data]#ll
total 0
-rw-r--r--. 1 root root 0 Dec 18 10:36 2020-12-17.log
-rw-r--r--. 1 root root 0 Dec 18 10:35 2020-12-18_10-35-24.log
-rw-r--r--. 1 root root 0 Dec 18 10:33 2020-12-18.log
-rw-r--r--. 1 root root 0 Dec 18 10:33 2020-12-18.txt
-rw-r--r--. 1 root root 0 Dec 18 10:34 Centos8-2020-12-18.log

范例:$()和``

[10:36:49 root@Centos8 /data]#ll `echo `date +%F`.txt`
bash: .txt: command not found...
[10:41:28 root@Centos8 /data]#ll $(echo $(date +%F).txt)
-rw-r--r--. 1 root root 0 Dec 18 10:33 2020-12-18.txt
[10:41:29 root@Centos8 /data]#ll `echo $(date +%F).txt`
-rw-r--r--. 1 root root 0 Dec 18 10:33 2020-12-18.txt
[10:41:41 root@Centos8 /data]#ll $(echo `date +%F`.txt)
-rw-r--r--. 1 root root 0 Dec 18 10:33 2020-12-18.txt

1.9.2括号扩展:{}

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

[10:42:25 root@Centos8 /data]#echo file{1,3,5}
file1 file3 file5
[10:45:04 root@Centos8 /data]#rm -f file{1,3,5}
[10:45:19 root@Centos8 /data]#echo {1..10}
1 2 3 4 5 6 7 8 9 10
[10:45:38 root@Centos8 /data]#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
[10:45:43 root@Centos8 /data]#echo {000..20..2}
000 002 004 006 008 010 012 014 016 018 020
[10:45:58 root@Centos8 /data]#echo {a..z..2}
a c e g i k m o q s u w y
[10:46:20 root@Centos8 /data]#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

1.10 tab键补全

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

1.10.1命令补全

1.10.2路径补全

1.10.3双击Tab键

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

1.11命令行历史

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

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

命令历史相关环境变量

HISTSIZE:命令历史记录的条数

HISTFILE:指定历史文件,默认为~/.bash_history

HISTFILESIZE:命令历史文件记录历史的条数

HISTTIME FORMAT="%F %T `whoami`"显示时间和用户

HISTIGNORE="str1:str2*:...”忽略str1命令,str2开头的历史

HISTCONTROL:控制命令历史的记录方式
ignoredups      是默认值,可忽略重复的命令,连续且相同为“重复”
ignorespace      忽略所有以空白开头的命令
ignoreboth      相当于ignoredups,ignorespace的组合
erasedups      删除重复命令

持久保存变量
以上变量可以export变量名="值”形式存放在/etc/profile或/.bash_profile范例:

[11:03:10 root@Centos8 ~]#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 HISTTIMEFORMAT="%F %T "
[11:03:28 root@Centos8 ~]#history
    1  2020-12-18 11:03:07 dnf -y install man-pages
    2  2020-12-18 11:03:07 vim /etc/sysconfig/network-scripts/ifcfg-ens33
    3  2020-12-18 11:03:07 nmcli connection reload ens33
    4  2020-12-18 11:03:07 nmcli connection up ens33
    5  2020-12-18 11:03:07 dnf -y install man-pages
    6  2020-12-18 11:03:07 vim /etc/sysconfig/network-scripts/ifcfg-ens33
    7  2020-12-18 11:03:07 nmcli connection reload ens33
    8  2020-12-18 11:03:07 nmcli connection up ens33

1.12调用命令行历史

重复前一个命令方法

重复前一个命令使用上方向键,并回车执行
按!!并回车执行
输入!-1并回车执行
按ctr1+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个参数做commnand的参数
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      光标向左移动一个字符
ctrl + xx      光标在命令行首和光标之间移动
Alt + f      光标向右移动一个单词尾
Alt + b      光标向左移动一个单词首
ctrl + u      从光标处删除至命令行首
ctrl + k      从光标处删除至命令行尾
Alt + r      删除当前整行
ctrl + w      从光标处向左删除至单词首
Alt + d      从光标处向右删除至单词尾
Alt + Backspace      删除左边单词
ctrl + d      删除光标处的一个字符
ctrl + h      删除光标前的一个字符
ctrl + y      将删除的字符粘贴至光标后
A1t + c      从光标处开始向右更改为首字母大写的单词
A1t + u      从光标处开始,将右边一个单词更改为大写
Alt + l      从光标处开始,将右边一个单词更改为小写
ctrl + t      交换光标处和之前的字符位置
Alt + t      交换光标处和之前的单词位置
Alt + #      提示输入指定字符后,重复显示该字符#次

2.获得帮助

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

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

2.1 whatis

whatis 使用数据库来显示命令的简短描述
此工具在系统刚安装后,不可立即使用,需要生成数据库后才可使用


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

范例:

[11:48:47 root@Centos8 ~]#whatis cal
cal (1)              - display a calendar
cal (1p)             - print a calendar
[11:48:50 root@Centos8 ~]#man -f cal
cal (1)              - display a calendar
cal (1p)             - print a calendar

拓展
cal(1)
1表示在man中的章节(详见下文)

2.2查看命令的帮助

2.2.1内部命令帮助

help COMMAND
man bash
范例:

[11:49:42 root@Centos8 ~]#type history
history is a shell builtin
[12:01:10 root@Centos8 ~]#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 position OFFSET.

      -a        append history lines from this session to the history file
      -n        read all history lines not already read from the history file
                and append them to the history list
      -r        read the history file and append the contents to the history
                list
      -w        write the current history to the history file

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

2.2.2外部命令和软件帮助

COMMAND --help或COMMAND -h
使用man手册(manual): man COMMAND
信息页: info COMMAND
程序自身的帮助文档:README、INSTALL、ChangeLog
程序官方文档
相关网站
搜索引擎

2.3 --help或-h选项

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

[14:34:49 root@Centos8 ~]#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.

[14:35:26 root@Centos8 ~]#cal -h

Usage:
 cal [options] [[[day] month] year]
 cal [options] <timestamp|monthname>

[14:35:29 root@Centos8 ~]#strace --help
strace: invalid option -- '-'
Try 'strace -h' for more information.

[14:35:51 root@Centos8 ~]#openssl --help
Invalid command '--help'; type "help" for a list.

[14:36:15 root@Centos8 ~]#date -h
date: invalid option -- 'h'
Try 'date --help' for more information.

[14:36:42 root@Centos8 ~]#shutdown -h
Shutdown scheduled for Fri 2020-12-18 14:37:57 CST, use 'shutdown -c' to cancel.

格式说明:

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

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

格式:

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

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

man -M /PATH/TO/SOMEWHERE COMMAND

查看man手册页

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常用选项
列出所有帮助

man -a keyword

搜索man手册

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

相当于whatis

man -f keyword

打印man帮助文件的路径

man -w [章节] keyword

2.5 info

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

info [命令]

导航info页

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

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

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

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

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

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

2.8.1通过在线文档获取帮助

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

2.8.2 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

2.8.3红帽全球技术支持服务

sosreport

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值