Linux基础

Linux基础

用户类型

  • root用户
一个特殊的管理账户,也称为超级用户,已经接近完整的系统控制能力,操作不当会对系统造成无法无法
挽回的后果。如非必要不要登录root用户
  • 普通用户
权限有限造成损害的能力有限

终端terminal

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

在这里插入图片描述

终端类型

  • 控制台终端: /dev/console
  • 串行终端: /dev/ttyS#
  • 虚拟终端:tty: /dev/tty#,tty可以有N个
  • 图形终端:startx、xwindows
  • 伪终端: pty: /dev/pts/# 如SSH远程连接

查看当前终端设备

tty

交互式接口

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

  • GUI:Graphic User Interface
    X protocol, window manager, desktop
    Desktop:
    GNOME (C, 图形库gtk),
    KDE (C++,图形库qt)
    XFCE (轻量级桌面)
    即图形用户接口
  • CLI:Command Line Interface
    shell程序,即命令行用户接口

什么是shell

  • shell 是Linux系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
  • shell被称为Linux的命令解释器,shell本身是一个程序。根据用户输入的命令名找到要执行的程序,并将解析出的参数传给该程序并执行。
  • shell是一种编程语言。
  • shell本身也是个程序,所有他可以被任何用户自己开发的各种shell所代替

在这里插入图片描述

各种shell

sh  :Steve Bourne
bash:Bourne-Again Shell,GPL,CentOS 和 Ubuntu 默认使用
csh :c shell , C 语言风格
tcsh
ksh :Korn Shell, AIX 默认 shell
zsh: MacOS默认shel

bash shell

Linux标准的shell,与sh兼容

  • 显示当前使用的shell
[root@Centos ~]#echo ${SHELL}
/bin/bash
  • 显示当前系统使用的所有shell
[root@Centos ~]#cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

设置主机名

临时生效
hostname NAME
eg:
[root@Centos ~]#hostname JASON
[root@Centos ~]#hostname
JASON

永久生效
hostnamectl set-hostname NAME
eg:
[root@Centos ~]#hostnamectl set-hostname centos.bruce.cn
[root@Centos ~]#hostname
centos.bruce.cn
注:
	主机名不支持使用下划线,但支持横线,可使用字母、横线或数字组合
	有些软件对主机名有特殊要求

命令提示符

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

CentOS默认提示符
[root@Centos ~]#

Ubuntu普通用户提示符
lee@Ubuntu:~$ 
  • 管理员 #
  • 普通用户 $

显示提示符格式

[root@Centos ~]#echo $PS1
\[\e[1;33m\][\[\e[1;33m\]\u\[\e[33m\]@\h\[\e[1;33m\] \W\[\e[1;33m\]]\[\e[0m\]\$

修改提示符范例

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\]\\$"

提示符格式说明

\e 控制符\033
\u 当前用户
\h 主机名简称
\H 主机名
\w 当前工作目录
\W 当前工作目录基名
\t 24小时时间格式

执行命令

执行命令过程

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

shell中可执行的两类命令

  • 内部命令:由shell自带的,而且通过某命令形式提供, ,用户登录后自动加载并常驻内存中
  • 外部命令:在文件系统路径下对应的可执行程序文件,当执行命令时从磁盘加载至内存中,命令执行文本后从内存中删除

查看命令是内部命令还是外部命令

type 命令名称

eg:
[root@centos ~]#type -a echo
echo is a shell builtin
echo is /usr/bin/echo

[root@centos ~]#type -a cat
cat is /usr/bin/cat

echo命令既是外部命令也是内部命令,cat是外部命令。

hash缓存表

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

常用hash命令
  • 显示hash缓存
[root@centos ~]#hash
hits	command
   1	/usr/bin/hostname
   1	/usr/bin/ls
  • 显示hash中的命令
[root@centos ~]#hash -I
-bash: hash: -I: invalid option
hash: usage: hash [-lr] [-p pathname] [-dt] [name ...]
  • 将命令全路径path起别名为name
hash -p path name
  • 打印缓存中name的路径
[root@centos ~]#hash -p path name
[root@centos ~]#hash -t name
path
  • 清除name缓存
[root@centos ~]#hash -d name
[root@centos ~]#hash -t name
-bash: hash: name: not found
[root@centos ~]#
  • 清除缓存
[root@centos ~]#hash -r
[root@centos ~]#hash
hash: hash table empty
[root@centos ~]#

命令别名

对于经常执行的较长的命令,可以将其定义成较短的命令,以方便执行

  • 显示当前shell进程所有可以使用的命令别名
[root@centos ~]#alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias xzegrep='xzegrep --color=auto'
alias xzfgrep='xzfgrep --color=auto'
alias xzgrep='xzgrep --color=auto'
alias zegrep='zegrep --color=auto'
alias zfgrep='zfgrep --color=auto'
alias zgrep='zgrep --color=auto'
[root@centos ~]#
  • 定义别名NAME,相当于执行命令
alias NAME='VALUE'

eg:扫明新添加的硬盘
[root@centos8 ~]#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

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

\ALIASNAME
“ALIASNAME”
‘ALIASNAME’
command ALIASNAME
/path/commmand #只适用于外部命令

命令格式

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

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

  • 短选项:UNIX风格选项,-c、-i、-I等
  • 长选项:GNU风格选项,–word、–all、–human等
  • BSD风格选项:一个字母,a等,使用较少

参数:命令的作用对象。如:文件名、用户名等

[root@Ubuntu ~]#id -u
0
[root@Ubuntu ~]#id -u lee
1000
[root@Ubuntu ~]#ls --all
.  ..  .bash_history  .bashrc  .profile  .viminfo
[root@Ubuntu ~]#ls -a
.  ..  .bash_history  .bashrc  .profile  .viminfo
[root@Ubuntu ~]#free -h
              total        used        free      shared  buff/cache   available
Mem:           1.9G        154M        1.2G        884K        589M        1.6G
Swap:          1.9G          0B        1.9G
[root@Ubuntu ~]#free --human
              total        used        free      shared  buff/cache   available
Mem:           1.9G        154M        1.2G        884K        589M        1.6G
Swap:          1.9G          0B        1.9G
[root@Ubuntu ~]#ps a
   PID TTY      STAT   TIME COMMAND
  1097 tty1     Ss+    0:00 /sbin/agetty -o -p -- \u --noclear tty1 linux
  1382 pts/0    Ss     0:00 -bash
  1781 pts/0    S      0:00 sudo -i
  1782 pts/0    S      0:00 -bash
  1899 pts/0    R+     0:00 ps a

注:

  • 多个选项以及多参数和命令之间使用空白字符分隔
  • 取消和结束命令执行:Ctrl+c(相当于强行关闭正在进行的进程),Ctrl+d
  • 多个命令可以用 “;” 符号分开
  • 一个命令可以用\分成多行

常见命令

查看硬件

  • 查看CPU
[root@centos ~]#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(s) per socket:  1
Socket(s):           2
NUMA node(s):        1
Vendor ID:           GenuineIntel
BIOS Vendor ID:      GenuineIntel
CPU family:          6
Model:               141
Model name:          11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz
BIOS Model name:     11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz
Stepping:            1
CPU MHz:             2304.000
BogoMIPS:            4608.00
Hypervisor vendor:   VMware
Virtualization type: full
L1d cache:           48K
L1i cache:           32K
L2 cache:            1280K
L3 cache:            24576K
NUMA node0 CPU(s):   0,1

[root@centos ~]#cat /proc/cpuinfo
  • 查看内存
[root@centos ~]#free
              total        used        free      shared  buff/cache   available
Mem:        1828248      238232     1295676        8864      294340     1433212
Swap:       4194300           0     4194300

[root@centos ~]#cat /proc/meminfo
MemTotal:        1828248 kB
MemFree:         1295764 kB
MemAvailable:    1433324 kB
Buffers:            5212 kB
Cached:           254904 kB
SwapCached:            0 kB
Active:            79476 kB
Inactive:         266816 kB
Active(anon):       1576 kB
Inactive(anon):    93464 kB
Active(file):      77900 kB
Inactive(file):   173352 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       4194300 kB
SwapFree:        4194300 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         86260 kB
Mapped:            83848 kB
Shmem:              8864 kB
KReclaimable:      34248 kB
Slab:              82380 kB
SReclaimable:      34248 kB
SUnreclaim:        48132 kB
  • 查看硬盘
[root@centos proc]#lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk 
├─sda1   8:1    0    2G  0 part /boot
├─sda2   8:2    0  100G  0 part /
├─sda3   8:3    0    4G  0 part [SWAP]
├─sda4   8:4    0    1K  0 part 
└─sda5   8:5    0   50G  0 part /data
sr0     11:0    1 10.4G  0 rom

[root@centos proc]#cat /proc/partitions 
major minor  #blocks  name

   8        0  209715200 sda
   8        1    2097152 sda1
   8        2  104857600 sda2
   8        3    4194304 sda3
   8        4          1 sda4
   8        5   52428800 sda5
  11        0   10889216 sr0

查看系统

  • 查看系统架构
[root@centos proc]#arch
x86_64
  • 查看内核版本
[root@centos ~]#uname -r
4.18.0-365.el8.x86_64
  • 查看系统发行版本
Centos
[root@centos proc]#
[root@centos proc]#cat /etc/redhat-release 
CentOS Stream release 8

[root@centos proc]#cat /etc/os-release 
NAME="CentOS Stream"
VERSION="8"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Stream 8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux 8"
REDHAT_SUPPORT_PRODUCT_VERSION="CentOS Stream"

Ubuntu
[root@Ubuntu ~]#cat /etc/issue
Ubuntu 18.04.6 LTS \n \l

[root@Ubuntu ~]#lsb_release
No LSB modules are available.
[root@Ubuntu ~]#lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 18.04.6 LTS
Release:	18.04
Codename:	bionic
  • 查看OS版本
[root@Ubuntu ~]#lsb_release -is
Ubuntu
[root@Ubuntu ~]#lsb_release -rs
18.04
[root@Ubuntu ~]#lsb_release -cs
bionic

日期和时间

Linux的两种时钟

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

date 显示和设置系统时间

[root@centos proc]#date
Fri Apr  8 17:45:10 CST 2022

[root@centos proc]#date +%s
1649410899
[root@centos proc]#date -d @`date +%s`
Fri Apr  8 17:42:02 CST 2022
[root@centos proc]#date -d @1649410899
Fri Apr  8 17:41:39 CST 2022
[root@centos proc]#date -d @1649410899 +%F_%T
2022-04-08_17:41:39
  • clock、hwclock显示硬件时钟
-s, --hctosys #以硬件时钟为准,校正系统时钟
-w, --systohc #以系统时钟为准,校正硬件时钟

eg:
[root@centos proc]#ll /usr/sbin/clock
lrwxrwxrwx. 1 root root 7 Feb 25 15:11 /usr/sbin/clock -> hwclock
  • 时区
[root@centos etc]#timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Bamako
Africa/Bangui
Africa/Banjul
Africa/Bissau
Africa/Blantyre
Africa/Brazzaville
Africa/Bujumbura
Africa/Cairo
Africa/Casablanca
Africa/Ceuta
Africa/Conakry
Africa/Dakar
Africa/Dar_es_Salaam
Africa/Djibouti
Africa/Douala
Africa/El_Aaiun
Africa/Freetown
Africa/Gaborone
Africa/Harare
Africa/Johannesburg
Africa/Juba
Africa/Kampala
Africa/Khartoum
Africa/Kigali
Africa/Kinshasa
Africa/Lagos
Africa/Libreville

[root@centos etc]#timedatectl set-timezone Asia/Shanghai
[root@centos etc]#timedatectl status
               Local time: Fri 2022-04-08 18:02:05 CST
           Universal time: Fri 2022-04-08 10:02:05 UTC
                 RTC time: Fri 2022-04-08 10:02:05
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

[root@centos etc]#ll -a localtime
lrwxrwxrwx. 1 root root 35 Apr  5 18:08 localtime -> ../usr/share/zoneinfo/Asia/Shanghai
  • 显示日历
cay -y

[root@centos etc]#cal 9 2000
   September 2000   
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

关机和重启

  • 关机
halt
poweroff
  • 重启
reboot
-f	强制关机
-p	切断电源
  • 关机或重启:shutdown
shutdown [OPTION]... [TIME] [MESSAGE]

-r reboot
-h halt
-c cancel

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

用户登录信息查看

whoami		显示当前登录有效用户
who			系统当前所有登录会话
w			系统当前所有的登录会话及所做操作
[root@centos etc]#whoami
root
[root@centos etc]#who
root     pts/0        2022-04-08 15:40 (10.0.0.1)
[root@centos etc]#w
 18:12:34 up  2:34,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.0.0.1         15:40    2.00s  0.14s  0.00s w

文本编辑

  • nano:可以实现文本的编辑,上手容易适合初学者。另外还有vm/vim较难
  • gedit:图形工具

创建登录提示文件 /etc/motd
参考网站: https://www.bootschool.net/ascii-art

[root@centos ~]#cat /etc/motd                                             

在这里插入图片描述

会话管理

命令行的典型使用方式是,打开一个终端窗口,在里面输入命令。用户与计算机的这种临时的交互称为一次”会话“
会话的一个重要特点是,窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束
会话的内部进程也随之结束,不管程序有没有运行完。
典型的例子就是,SSH登录远程计算机,打开一个远程窗口执行命令。若此时网络突然断线,再次登录是找不回上一次执行的命令的。因为上一个SSH会话已经终止了,里面的进程也随之消失。为了解决这个问题我们可以使用终端复用器。

终端复用器就是会话与窗口”解绑“的工具,可以将他们彻底分离。

终端复用器

  • 允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
  • 可以让新窗口”接入“已经存在的会话。
  • 允许每个会话有多个连接窗口,因此可以多人实时共享会话。
  • 支持窗口的任意垂直水平拆分

类似的终端复用器有Screen、Tmux

Screen

  • 利用screen 可以实现会话管理,如:新建会话,共享会话等
  • 注意:CentOS7 来自于base源,CentOS8 来自于epel源
#CentOS7 安装screen
[root@centos7 ~]#yum -y install screen

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

screen命令常见用法

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

tmux

tmux相比screen更易用功能也更加强大

  • 安装
yum install tmux
  • 启动与退出
[root@centos8 ~]#tmux
[root@centos8 ~]#exit

mux 窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是 Ctrl+b ,即先按下
Ctrl+b ,快捷键才会生效。帮助命令的快捷键是 Ctrl+b ? 然后,按下 q 键,就可以退出帮助

  • 新建会话 新建第一个启动的tmux窗口就,编号就是0,依次类推 tmux ls或Ctrl+b,s 可以查看当前所有的 Tmux 会话,也可以新建指定名称的会话
tmux				新建会话窗口  默认是零窗口
tmux new -s king	新建一个窗口名为King
exit				退出窗口

在这里插入图片描述

  • 查看当前所有会话
tmux ls
tmux list-session
  • 分离会话 在 Tmux 窗口中,按下Ctrl+b d或者输入tmux detach命令,就会将当前会话与窗口分离
tmux detach
  • 接入会话
    tmux attach 命令用于重新接入某个已存在的会话
tmux attach -t king
  • 杀死会话
    tmux kill-session命令用于杀死某个会话
tmux kill-session -t king
  • 切换会话
    tmux switch命令用于切换会话
tmux switch -t king

tmux可以将窗口分成多个窗口,每个窗口运行不同的命令

上下分隔窗口
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 -n king
  • 切换窗口
按指定编号切换
tmux select-window -t 0

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

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

输出信息echo

echo基本用法

echo 命令可以将后面跟的字符进行输出
功能:显示字符,echo会将输出的字符串标准输出。输出的字符串以空白字符隔开,并在最后加上换行号
语法:

echo [-Ene][字符串]
-E		(默认)不支\解释功能
-n		不自动换行
-e		启用\字符解释功能

显示变量
echo "$VAR_NAME” #用变量值替换,弱引用
echo '$VAR_NAME’ #变量不会替换,强引用

[root@centos ~]#echo "$PATH"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@centos ~]#echo '$PATH'
$PATH

启用命令选项-e,若字符串中出现以下字符,特别处理,不会当成一般文章输出

\a 发出警告声
\b 退格键
\c 最后不加上换行符号
\e escape,相当于\033
\n 换行且光标移至行首
\r 回车,即光标移至行首,但不换行
\t 插入tab
\\ 插入\字符
\0nnn 插入nnn(八进制)所代表的ASCII字符
\xHH插入HH(十六进制)所代表的ASCII数字(man 7 ascii)
[root@centos ~]#echo -e 'a\x0Ab'
a
b


插入tab
[root@centos ~]#
[root@centos ~]#echo -e 'ki\tng'
ki	ng
  • 设置输出的颜色
    在这里插入图片描述

echo高级用法

在终端中,ANSI定义了用于屏幕显示的Escape屏幕控制码
具有颜色的字符,其格式如下

"\033[字符背景颜色;字体颜色m字符串\033[0m"
  • \033[30m – \033[37m 设置前景色
  • \033[40m – \033[47m 设置背景色
#字符背景颜色范围: 40--47
40:黑
41:红
42:绿
43:黄
44:蓝
45:紫
46:深绿
47:白色
#字体颜色: 30--37
30: 黑
31: 红
32: 绿
33: 黄
34: 蓝
35: 紫
36: 深绿
37:白色
  • 一些常见ANSI控制码
\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[x;yH 设置光标位置x行y列
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\033[?25h 显示光标
\033[2J\033[0;0H 清屏且将光标置顶

字符集和编码

  • 字符集和编码是两个不同的概念
  • 字符集:即二进制和字符的对应关系,不关注最终的存储方式
  • 编码 :即字符集编码,简称编码,实现如何将字符转化为实际的二进制进行存储,编码决定了空间的使用大小
    在这里插入图片描述
    在这里插入图片描述

ASCII码

计算机内部,所有信息最终都是一个二进制值。规定英语字符对应二进制位制之间的关系,做了统一规定,
即ASCII码
ASCII码一共规定了128个字符的编码,占用了一个字节的后面7位,最前面一位统一规定为0
在这里插入图片描述
查看ASCII码

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

在这里插入图片描述

Unicode

由于计算机是美国人发明的,因此最早只有127个字母被编码到计算机里,即ASCII编码,但是要处理中文一个字节显然是不够的,至少需要2个字节,而且还不能跟ASCII编码冲突,所有中国制定了GB2312编码,用来把中文编进去
全世界有上百种语言,日本把日文编到Shift_JIS里面,韩国把韩文编入Euc-kr里,各国有各国的标准,就会出现冲突,结果就是在多语言的文本中,出现各种乱码
为了解决这种情况,Unicode被发明出来,目前Unicode可以容纳100多万个符号。

  • Unicode编码方案
UTF-8 :		变长,1到4个字节
UTF-16:		变长,2或4个字节
UTF-32:		固定长度,4个字节

在这里插入图片描述
几个编码查询和转换链接
https://home.unicode.org/
https://unicode.yunser.com/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 码 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变量实现中文语言提示
[root@centos ~]#echo $LANG
en_US.UTF-8
[root@centos ~]#king
-bash: king: command not found
[root@centos ~]#LANG=zh_CN.UTF-8
[root@centos ~]#echo $LANG
zh_CN.UTF-8
[root@centos ~]#king

命令行扩展和括号扩展

命令行扩展 ``和$()

  • 把一个命令的输出打印给另一个命令的参数,放在 `` 中的一定是有输出信息的命令
  • $(COMMAND) 或 COMMAND
  • " " ’ ’ ``(双引号、单引号、反引号的区别)
[root@centos ~]#echo $HOSTNAME
centos.bruce.cn

[root@centos ~]#echo "echo $HOSTNAME"
echo centos.bruce.cn

[root@centos ~]#echo 'echo $HOSTNAME'
echo $HOSTNAME

[root@centos ~]#echo `echo $HOSTNAME`
centos.bruce.cn

结论:
双引号:弱引用,不能识别命令,可以识别变量,”半傻不精“。
单引号:强引用,变量和命令都不能识别,都当成了普通的字符串,”最傻“。
反引号:反引号里面的内容必须是能执行的命令且有输出信息,
变量和命令都能够识别并且会将反引号里面的命令进行执行后,再交给调用反引号的命令继续,”最聪明“。
  • $() 和 ``
[root@centos ~]#ll `echo `date + %F`.txt`
-bash: .txt: command not found
ls: cannot access 'date': No such file or directory
ls: cannot access '+': No such file or directory
ls: cannot access '%F': No such file or directory

[root@centos ~]#ll $(echo $(date +%F).txt)
ls: cannot access '2022-04-09.txt': No such file or directory

[root@centos ~]#ll `echo $(date +%F).txt`
ls: cannot access '2022-04-09.txt': No such file or directory

[root@centos ~]#ll $(echo `date +%F`.txt)
ls: cannot access '2022-04-09.txt': No such file or directory

括号扩展 {}

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

{元素1,元素2,元素3}
{元素1..元素2}

eg:
echo file{1,3,5} 
结果为:file1 file3 file5
rm -f file{1,3,5}
echo {1..10}
echo {a..z}
echo {1..10..2}
echo {000..20..2}

[root@centos ~]#echo {00..18..2}
00 02 04 06 08 10 12 14 16 18

[root@centos ~]#echo {a..z..3}
a d g j m p s v y

[root@centos ~]#echo {A..z..4}
A E I M Q U Y ] a e i m q u y
关闭和开启{}扩展功能
[root@centos ~]#echo {1..10}
1 2 3 4 5 6 7 8 9 10

[root@centos ~]#set +B
[root@centos ~]#echo {1..10}
{1..10}

[root@centos ~]#set -B
[root@centos ~]#echo {1..10}
1 2 3 4 5 6 7 8 9 10

结论:
set -B		开启功能
set +B		关闭功能

tab键补全

tab键可以实现命令、路径、文件名等补全

命令补全

bash根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给定命令名命名的文
件,第一次找到的命令即为要执行的命令

命令的子命令补全,需要安装 bash-completion

路径补全

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

双击tab键

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

注:
不是将tab键输入bash终端,而是手动按键盘上的tab键

命令行历史

  • 当执行命令后,系统默认会在内存记录执行过的命令 当用户正常退出时,会将内存的命令历史存放对应历史文件中,默认是 ~/.bash_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

[root@centos ~]#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 "

[root@centos /]#history 
    1  2022-04-09 18:42:36 history 
    2  2022-04-09 18:42:45 history n
    3  2022-04-09 18:45:48 HISTSIZE
    4  2022-04-09 18:45:59 HISTTIMEFORMAT="%F %T `whoami` "
    5  2022-04-09 18:46:04 history 
    6  2022-04-09 18:46:18 hostname
    7  2022-04-09 18:46:21 history 
    8  2022-04-09 18:48:02 [root@centos8 ~]#cat .bash_profile
    9  2022-04-09 18:48:02 # .bash_profile
   10  2022-04-09 18:48:02 # Get the aliases and functions

调用命令行历史

#重复前一个命令方法
重复前一个命令使用上方向键,并回车执行
按 !! 并回车执行
输入!-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 开头的命令,并获取它的所有参数

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 + # 提示输入指定字符后,重复显示该字符#次

获取帮助

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

whatis

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

Centos 6 之前:
makewhatis

查看命令的帮助

内部命令帮助
help COMMAND

man bash
外部命令及软件帮助
  • COMMAND --help 或 COMMAND -h
  • 使用 man 手册(manual): man COMMAND
  • 信息页:info COMMAND
  • 程序自身的帮助文档:README、INSTALL、ChangeLog
  • 程序官方文档
  • 相关网站,如:技术论坛
  • 搜索引擎

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

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

[root@centos ~]#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.

[root@centos ~]#cal -h

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

[root@centos ~]#date -h
date: invalid option -- 'h'
Try 'date --help' for more information

格式说明:

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

man命令

  • man 提供命令帮助的文件,手册页存放在/usr/share/man
    几乎每个命令都有man的“页面”
  • 中文man需安装包
  • man-pages
  • man-pages-zh-CN
man页面分组
不同类型的帮助称为不同的“章节”,统称为Linux手册,man 1 man

1:用户命令
2:系统调用
3:C库调用
4:设备文件及特殊文件
5:配置文件格式
6:游戏
7:杂项
8:管理类的命令
9:Linux 内核API

格式:

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

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

man -M /PATH/TO/SOMEWHERE COMMAND

查看man手册页

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: 回到文件首部
#CentOS 6 之前版 man 的配置文件
/etc/man.config
#CentOS 7 之后版 man 的配置文件
/etc/man_db.conf
#ubuntu man 的配置文件
/etc/manpath.config
MANPATH /PATH/TO/SOMEWHERE #指明man文件搜索位置
man -M /PATH/TO/SOMEWHERE COMMAND
man [OPTION...] [SECTION] PAGE...
man [章节] keywordG:翻至文件尾部
/KEYWORD
以KEYWORD指定的字符串为关键字,从当前位置向文件尾部搜索;不区分字符大小写
n:下一个
N:上一个
?KEYWORD
以KEYWORD指定的字符串为关键字,从当前位置向文件首部搜索;不区分字符大小写
n:跟搜索命令同方向,下一个
N:跟搜索命令反方向,上一个
  • 常用选项

列出所有帮助
man -a keyword

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

相当于whatis
man -f keyword

打印man帮助文件的路径
man -w [章节] keyword
  • 查看慢帮助文件路径
[root@centos ~]#whereis man
man: /usr/bin/man /usr/share/man /usr/share/man/man7/man.7.gz /usr/share/man/man1/man.1.gz /usr/share/man/man1p/man.1p.gz

info

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

info [命令]

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

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

在线文档
[http://www.github.com](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

相关搜索网站
http://www.google.com
http://www.bing.com
http://www.slideshare.net/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值