Linux基础入门和帮助

1.Linux基础入门和帮助

用户类型

  • root 用户

    一个特殊的管理帐户

    也被称为超级用户 root已接近完整的系统控制

    对系统损害几乎有无限的能力 除非必要,不要登录为 root

  • 普通( 非特权 )用户

    权限有限

    造成损害的能力比较有限

 

终端 terminal

终端(英语:Computer terminal),是与计算机系统相连的一种输入输出设备,它用来显示主机运算 的输出,并且接受主机要求的输入,通常离计算机较远。根据功能不同,可分若干类。典型的终端包括 显示器键盘套件,打印机打字机套件等。

 

终端类型

控制台终端: /dev/console

串行终端:/dev/ttyS#

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

伪终端:pty:pseudo-tty , /dev/pts/# 如:SSH远程连接

图形终端:startx, xwindows

 

查看当前的终端设备

tty 命令可以查看当前所在终端

[root@10 ~]# tty
/dev/pts/0

 

交互式接口

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

 

交互式接口类型

  • GUI:Graphic User Interface X protocol, window manager, desktop

    GNOME (C, 图形库gtk),

    KDE (C++,图形库qt)

    XFCE (轻量级桌面)

 

  • CLI:Command Line Interface,

    shell 程序

 

shell

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

shell也被称为LINUX的命令解释器(command interpreter),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默认shell

 

bash shell

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

 

显示当前使用的 shell

echo ${SHELL}

 

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

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

 

设置主机名

#临时生效
hostname NAME
#持久生效,支持CentOS7和Ubuntu18.04以上版本
hostnamectl set-hostname NAME
hostnamectl hostname NAME
  • 修改hostname 需要root权限

  • 主机名不支持使用下划线,但支持横线,可使用字母,横线或数字组合

  • 有些软件对主机名有特殊要求

  • 一般按照组织的要求设置主机名,通常有一定的意义的

 

命令提示符 prompt

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

#Rocky默认提示符
[root@rocky86 ~]# 
#Ubuntu默认提示符
root@ubuntu22:~# 

 

# 管理员

$ 普通用户

echo $PS1 #查看当前命令提示符
[\u@\h \W]\$


#如果以root用户登录主机,则默认提示符为,对应的就是 上面的 [\u@\h \W]\$
[root@rocky86 ~]# 

#PS1中的值要单引号引用,如果是双引号,则某些替换符不会被解析
PS1='\e[31m[\u@\h \W]\$\e[0m'


#如果要永久保存,则要写文件
echo "PS1='\e[31;1m[\u@\h \W]\\$ \e[0m'">/etc/profile.d/env.sh
source /etc/profile.d/env.sh


#PS1变量中的常用选项
\d #曰期,格式为"星期 月 日"
\H #完整的主机名。如默认主机名"localhost.localdomain"。
\h #简写的主机名。如默认主机名"localhost"。
\t #24小时制时间,格式为"HH:MM:SS"。
\T #12小时制时间,格式为"HH:MM:SS"。
\A #24小时制时间,格式为"HH:MM"。
\@ #12小时制时间,格式为"HH:MM am/pm"。
\u #当前用户名。
\v #Bash版本信息。
\w #当前所在目录的完整名称。
\W #当前所在目录的最后一个目录。
\# #执行的第几条命令。
\$ #提示符。如果是 root 用户,则会显示提示符为"#";如果是普通用户,则会显示提示符为"$"


#PS1中的颜色部份
\033[     #开始位
\033[0m   #结束位

#上面的\033 可以换成 \e

#颜色设置 \e[ 颜色m   内容   \e[0m   颜色后面要用m结束,多个颜色,用;分割,只要一个m 
\e[31m我是红色\e[0m
#各颜色表示方式
字体颜色   背景色
30        40       黑色
31        41       红色       
32        42       绿色
33        43       黄色
34        44       蓝色
35        45       紫红色
36        46       青蓝色
37        47       白色
#字体颜色
\e[30m我是黑色\e[0m
\e[31m我是红色\e[0m
\e[32m我是绿色\e[0m
\e[33m我是黄色\e[0m
\e[34m我是蓝色\e[0m
\e[35m我是紫红色\e[0m
\e[36m我是青蓝色\e[0m
\e[37m我是白色\e[0m
#背景颜色
\e[40m我背景是黑色\e[0m
\e[41m我背景是红色\e[0m
\e[42m我背景是绿色\e[0m
\e[43m我背景是黄色\e[0m
\e[44m我背景是蓝色\e[0m
\e[45m我背景是紫红色\e[0m
\e[46m我背景是青蓝色\e[0m
\e[47m我背景是白色\e[0m
#字体颜色+背景颜色组合,字体颜色和背景颜色不分先后,因为值不一样
\e[30;41m红底黑字\e[0m
\e[41;30m红底黑字\e[0m
#特殊效果
0 #关闭效果
1 #高亮显示
3 #斜体
4 #下划线
5 #闪烁,闪烁效果与远程工具所在的环境有关
7 #反白显示
8 #隐藏
9 #删除线

#可组合使用,但如果效果有冲突时,以最后的为准,就是说,后面的效果,会覆盖前面的效果
\e[30;41;5m红底黑字闪烁\e[0m   
\e[4;30;41;5m红底黑字下划线闪烁\e[0m   
\e[0;4;30;41;5m红底黑字下划线闪烁\e[0m  #这里的0;4;5 都表示效果,但后面的4;5覆盖了前面的0
\e[4;30;41;5;0m红底黑字下划线闪烁\e[0m  #这样写,4;5的效果都被0去掉了

 

修改提示符格式范例CentOS

#暂时修改
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\]\\$"
#永久修改
echo "PS1='\e[31;1m[\u@\h \W]\\$ \e[0m'" > /etc/profile.d/env.sh

 

在 ubuntu2204 中,设置 PS1,如果要对所有普能用户生效,将 PS1 定义写 在/usr/share/bashcompletion/bash_completion 的最下面,如里需要对每个用户单独定义,写在用户家目录的 .bashrc 文件的最下面。

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

 

执行命令

执行命令过程

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

shell中可执行的两类命令

  • 内部命令:由shell自带的,而且通过某命令形式提供,用户登录后自动加载并常驻内存中

  • 外部命令:在文件系统路径下有对应的可执行程序文件,当执行命令时才从磁盘加载至内存中,执 行完毕后从内存中删除

 

例子

ls + 回车

提交给bash

去找有没有ls 这条命令,如果有,就交给内核去执行

如果没有,就报错

怎么找

首先是要分析是内部命令还是外部命令

如果是内部命令,就直接执行(内部命令指的就是shell中自带的命令)

如果不是内部命令,就认为是外部命令,就去硬盘上找可执行的二进制文件

 

一连上终端

bash 就跑起来了,顺便把bash里面的所有命令都加载到内存中了

bash 中自带的命令就是内部命令

有些高频的命令,已经成为通用的,我们会认为不管什么LINUX 发行版都要有这些命令

区别指定的命令是内部或外部命令

type COMMAND


type ls #区分是内部命令还是外部命令
[root@10 ~]# type ls
ls is aliased to `ls --color=auto'

type -t echo #简写,只给出类型,builtin|alias|file|keyword
[root@10 ~]# type -t echo
builtin

type -a echo #列出所有,有可能是内部命令,也同时会是外部命令
[root@10 ~]# type -a echo
echo is a shell builtin
echo is /usr/bin/echo

bash -c help #查看bash中所有内容(不仅仅是内部命令)
help #查看bash中所有内容(不仅仅是内部命令)
enable #查看bash中所有内置命令
help echo #查看内部命令帮助

 

有的命令既有有内部命令,又有外部命令,是因为不是所有主机都使用标准shell,所以常用内部命令会有一个外部命令 的备份,防止内部命令执行失败。

在命令执行时,shell 先判断是否是内部命令,如果是,则执行内部命令,如果不是,则去特定目录下寻 找外部命令。特定目录为$PATH(环境变量)

 

内部命令相关

help #查看所有内部命令及帮助
enable   #查看所有启用的内部命令
enable cmd #启用 cmd 命令
enable -n cmd   #禁用内部 cmd 命令
enable -n   #查看所有禁用的内部命令

 

执行外部命令

查看外部命令路径

which  -a |--skip-alias 
whereis

例子

[root@rokcy8 ~]# which ls
alias ls='ls --color=auto'
 /usr/bin/ls
 
#ubuntu中的 which 不显示别名
root@ubuntu2204:~# which ls
/usr/bin/ls
 
 
#跳过别名 
[root@rokcy8 ~]# which --skip-alias ls
/usr/bin/ls
# -a 表示在所有路径中查找匹配的命令,使用该命令时匹配第一个找到的
[root@rokcy8 ~]# which -a echo
/usr/bin/echo
#查看path
[root@rokcy8 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

#创建root下的 bin 目录
[root@rokcy8 ~]# mkdir bin

#拷贝 echo 命令到 /root/bin/ 目录下
[root@rokcy8 ~]# cp /usr/bin/echo /root/bin/

#再次查看
[root@rokcy8 ~]# which echo
/usr/bin/echo

[root@rokcy8 ~]# which -a echo
/usr/bin/echo
/root/bin/echo

#ubuntu中
root@ubuntu2204:~# which -a echo
/usr/bin/echo
/bin/echo

 

外部命令搜索路径

#root用户
[root@rokcy8 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#普通用户
[root@rokcy8 ~]# su - mage
[mage@rokcy8 ~]$ echo $PATH
/home/mage/.local/bin:/home/mage/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
​
#root用户
root@ubuntu2204:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
#普通用户
root@ubuntu2204:~# su - mage
mage@ubuntu2204:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

 

Hash缓存表

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

hash 只对当前用户的当前终端进程有效,是一组临时数据;

切换用户后无效;

退出重新登录后会被重置;

hash 命令常见用法

hash   #显示当前终端进程中的hash 缓存
hash -l #显示详细创建此条hash 的命令,可作为输入使用
hash -p path name #手动创建hash
hash -t name #输出路径
hash -d name #删除指定hash
hash -r #清空所有hash

例子

root@ubuntu2204:~# hash
hits command
   1 /usr/bin/mesg
   2 /usr/bin/which
   1 /usr/bin/su
   3 /usr/bin/ls
   
   
root@ubuntu2204:~# hash -l
builtin hash -p /usr/bin/mesg mesg
builtin hash -p /usr/bin/which which
builtin hash -p /usr/bin/su su
builtin hash -p /usr/bin/ls ls
​
​
#手动创建hash
root@ubuntu2204:~# builtin hash -p /abc abc
root@ubuntu2204:~# hash
hits command
   1 /usr/bin/mesg
   2 /usr/bin/which
   0 /abc
   1 /usr/bin/su
   3 /usr/bin/ls
   
   
#输出路径
root@ubuntu2204:~# hash -t su
/usr/bin/su
#删除指定hash
root@ubuntu2204:~# hash -d su
#清空所有hash
root@ubuntu2204:~# hash -r

 

命令别名

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

alias #显示当前shell进程所有可用的命令别名
alias name #查看指定别名
alias NAME='VALUE' #定义别名NAME,其相当于执行命令VALUE
例子
#定义别名
root@ubuntu2204:~# alias cdnet='cd /etc/systemd/network'
#执行
root@ubuntu2204:~# cdnet
#查看当前目录
root@ubuntu2204:/etc/systemd/network# pwd
/etc/systemd/network
​
unalias #撤消别名

 

在命令行中定义的别名,仅对当前shell进程有效

如里需要永久有效,则要写配置文件:

  • 仅对当前用户:~/.bashrc

  • 对所有用户有效:/etc/bashrc, /etc/bash.bashrc(ubuntu)

命令执行优先级

别名 -----> 内部命令 ------>hash--->外部命令

 

多个选项以及多参数和命令之间使用空白字符分隔

取消和结束命令执行:Ctrl+c,Ctrl+d

多个命令可以用 ";"

符号分开 一个命令可以用\分成多

 

常见命令

查看硬件信息

查看cpu
lscpu
cat /proc/cpuinfo
​
​
查看内存大小
lsmem
cat/proc/meminfo
​
free
free -hs 1 每一秒刷新一次数据
free -hc 2 刷新2次数据后退出
total #系统总的可用物理内存大小
used #已被使用的物理内存大小
free #还有多少物理内存可用
shared #被共享使用的物理内存大小
buff/cache #被 buffer 和 cache 使用的物理内存大小
available #还可以被 应用程序 使用的物理内存大小
​
查看硬盘和分区情况
lsblk
cat /proc/partitions
 

查看系统版本信息

#查看系统架构
arch
​
#查看内核版本
uname -r
​
#查看操作系统发行版本、
#CentOS8 查看发行版本
cat /etc/redhat-release
#ubuntu查看发行版本
cat /etc/os-release

 

日期和时间

Linux的两种时钟

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

  • 硬件时钟:主板

date #显示和设置系统时间
date -R #显示时区信息
date -%s #时间戳
clock,hwclock #显示硬件时钟
clock -s #对钟
​
#时区
/etc/localtime
 #设置时区
[root@ubuntu2204 ~]# timedatectl list-timezones#时区列表
[root@ubuntu2204 ~]# timedatectl set-timezone Asia/Shanghai#更改时区
cat /etc/timezone #查看时区
​
#日历
cal

时间戳

1970-01-01 00:00:00 -----------------------------------------------------------------2024-07-31 21:13:16

1722431594

关机和重启

关机

halt
poweroff
init 0
shutdown -h now

重启

reboot
init 6
shutdown -r now

 

shutdown

shutdown [OPTION]... [TIME] [MESSAGE]
shutdown #一分钟后关机
shutdown +10 #10分钟后关机
shutdown 01:02 #1点过两分关机
shutdown -r|--reboot #一分钟后重启
shutdown -r now #现在重启
shutdown -H|--halt #一分钟后调用halt 关机
shutdown -P|--poweroff #一分钟后调用poweroff 关机
shutdown -c #取消关机计划

 

用户登录信息查看命令

  • whoami:显示当前登录有效用户

  • who:系统当前所有的登录会话

  • w:系统当前所有的登录会话及所做的操作

 

#whoami
#显示当前用户的用户名
​
#who am i
#显示当前用户的用户名 终端 登录时间 来源IP
​
​
#who [选项]... [ 文件 | 参数1 参数2 ]
#显示当前已登录的用户信息。
who #列出在当前主机上所有登录用户
who -u | --users #列出当前主机上所有用户的空闲时间 . 表示最近一分钟还是活跃状态 old 表
示用户己经空闲超过24小时
who -s | --short #列出在当前主机上所有登录用户,等同于who
who -q | --count #登录用户统计
who -b | --boot #上次系统启动时间
who -a | --all #多选项组合
who -m #who am i
​
​
#w [options]
#显示当前所有登录用户的具体信息
w
19:19:03 up 28 min,  2 users, load average: 0.04, 0.05, 0.11
USER     TTY     FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.31.236   18:40    2.00s  0.09s  0.00s w
jose     tty2     tty2             18:41   38:45  24.98s  0.04s 
/usr/libexec/gsd-disk-utility-notify
#登录名 终端 来源IP 登录时间 空闲时间 当前终端中所有进程使用cpu的时间,不包括后台作业占用的时间 当前进程使用的cpu的时间
#load average 表示平均负载,最近一分钟,最近五分钟,最近15分钟
#查看特定用户
w root

 

文本编辑工具

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

  • gedit 工具是图形工具

 

会话管理

命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称"窗口"),在里面输入命 令。用户与计算机的这种临时的交互,称为一次"会话"(session)

会话的一个重要特点是,窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话 结束,会话内部的进程也会随之终止,不管有没有运行完

一个典型的例子就是,SSH 登录远程计算机,打开一个远程窗口执行命令。这时,网络突然断线,再次 登录的时候,是找不回上一次执行的命令的。因为上一次 SSH 会话已经终止了,里面的进程也随之消失 了。

为了解决这个问题,会话与窗口可以"解绑":窗口关闭时,会话并不终止,继续运行,等到以后需要的 时候,再让会话"绑定" 其他窗口

终端复用器软件就是会话与窗口的"解绑"工具,将它们彻底分离。

  1. 它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。

  2. 它可以让新窗口"接入"已经存在的会话。

  3. 它允许每个会话有多个连接窗口,因此可以多人实时共享会话。

  4. 它还支持窗口任意的垂直和水平拆分。

screen

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

screen命令常见用法:

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

输出信息 echo

echo 命令可以将后面跟的字符进行输出

功能:显示字符,echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加 上换行号

 

#echo: echo [-neE] [字符串]
-n  #输出完成后不换行
-e  #转义特定字符串
-E  #不转义,原样输出,默认选项


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


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

显示变量

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

echo 高级用法

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

可以显示具有颜色的字符,其格式如下:

"\033[字符背景颜色;字体颜色;特效m字符串\033[0m"
"\033[41;32mtest\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 #清屏且将光标置顶

字符集和编码及语言环境

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

charset是character set的简写,即字符集,即二进制和字符的对应关系,不关注最终的存储形式

encoding是charset encoding的简写,即字符集编码,简称编码,实现如何将字符转化为实际的二进制 进行存储,编码决定了空间的使用的大小

 

ASCII码

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

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

a-z 26

A-Z 26

0-9 10

符号

一共 128

Unicode

由于计算机是美国人发明的,因此,最早只有128个字符被编码到计算机里,即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 码来填充

 

语言环境

默认系统为英文环境,可以修改为中文环境,从而查看帮助或提示可以变为中文

实现中文语言提示操作

 

[root@centos7 ~]#echo $LANG #临时修改LANG变量实现中文语言提示
en_US.UTF-8
[root@centos7 ~]#magedu
-bash: magedu: command not found
[root@centos7 ~]#LANG=zh_CN.UTF-8
[root@centos7 ~]#echo $LANG
zh_CN.UTF-8
[root@centos7 ~]#magedu
-bash: magedu: 未找到命令

[root@rocky8 ~]#yum -y install langpacks-zh_CN.noarch #没有中文可以下载

#通用方法
[root@rocky8 ~]#localectl set-locale LANG=zh_CN.utf8
#或者下面方式,CentOS8支持,但ubuntu和Centos7不支持,不建议使用
[root@rocky8 ~]#localectl set-locale zh_CN.utf8
[root@rocky8 ~]#localectl status
   System Locale: LANG=zh_CN.utf8
       VC Keymap: us
     X11 Layout: us
[root@rocky8 ~]#echo $LANG
zh_CN.utf8
#重新登录后可以看到中文环境
[root@rocky8 ~]#exit

[root@ubuntu2204 ~]# apt install language-pack-zh-hans -y # Ubuntu 修改语言环境为中文
[root@ubuntu2204 ~]# localectl list-locales 
C.UTF-8
en_US.UTF-8
zh_CN.UTF-8
[root@ubuntu2204 ~]# localectl set-locale LANG=zh_CN.utf8

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

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

把一个命令的输出打印给另一个命令的参数,放在``中的一定是有输出信息的命令

$(COMMAND)
`COMMAND

变量

双引号,弱引用,可以解析内容

单引号,强引用,原样输出

 

命令

cmd 展开

$(cmd) 展开

比较 “ ” ,‘ ’, ``三者区别

" " :弱引用,不能识别命令,可以识别变量

' ' :强引用,变量和命令都不识别,都当成了普通的字符串

``:里面的内容必须是能执行的命令并且有输出信息,变量和命令都识别,并且会将反向单引号的内容 当成命令进行执行后,再交给调用反向单引号的命令继续

 

括号扩展:{ }

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

{元素1,元素2,元素3} #离散元素,不连接
{开始元素..对束元素}   #连续元素 

#示例
echo file{1,3,5} #结果为:file1 file3 file5
echo {1..10} #结果为1 2 3 4 5 6 7 8 9 10
echo {a..c}{1..3} #结果为 a1 a2 a3 b1 b2 b3 c1 c2 c3

关闭和启用{}的扩展功能

[root@ubuntu2204 ~]# echo $-
himBHs
[root@ubuntu2204 ~]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
[root@ubuntu2204 ~]# set +B
[root@ubuntu2204 ~]# echo $-
himHs
[root@ubuntu2204 ~]# echo {1..10}
{1..10}
[root@ubuntu2204 ~]# set -B
[root@ubuntu2204 ~]# echo $-
himBHs
[root@ubuntu2204 ~]# echo {1..10}
1 2 3 4 5 6 7 8 9 10

tab 键补全

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

命令补全

  • 内部命令:

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

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

用户给定的字符串只有一条惟一对应的命令,直接补全,否则,再次Tab会给出列表

路径补全

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

双击Tab键

  • command 2Tab 所有子命令或文件补全

  • string2Tab 以string开头命令

  • /2Tab 显示所有根目录下一级目录,包括隐藏目录

  • ./2Tab 当前目录下子目录,包括隐藏目录

  • *2Tab 当前目录下子目录,不包括隐藏目录

  • ~2Tab 所有用户列表 $2Tab 所有变量

  • @2Tab /etc/hosts记录 (centos7 不支持)

  • =2Tab 相当于ls –A (centos7不支持)

命令行历史

当执行某个命令后,系统会在内存中记录下此命令,此时只记录在内存中,

当正常退出终端后,内存中记录下来的执行命令的历史,会保存到用户家目录下的 .bash_history 文件 中

当用户下次登录,系统会自动将该文件中的内容加载到内存

被写入命令历史的,包括错误的命令

默认记录最近1000条,其配置在 /etc/profile 文件中的 HISTSIZE字段中,可以根据需要修改

利用命令历史,可以用它来重复执行命令,提高输入效率

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|erasedups #控制命令历史的记录方式


ignoredups #是默认值,可忽略重复的命令,连续且相同为“重复”
ignorespace #忽略所有以空白开头的命令
ignoreboth #相当于ignoredups, ignorespace的组合
erasedups   #删除重复命令
source #更改后可以用source读取配置文件

在不同用户的家目录下有一个 .bash_history 文件

在用户登录成功后,将该文件的内容加载到当前的终端中

后续用户继续执行命令,这些命令也会保存到内存中

退出登录后,会将执行的命令追加到.bash_history 文件中

持久保存变量

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

调用命令行历史

#重复前一个命令方法
重复前一个命令使用上方向键,并回车执行
按 !! 并回车执行
输入!-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 #光标在命令行首和光标之间移动
ctrl+ >(方向键)  #光标向右移动一个单词尾,相当于 Alt + f
ctrl+ <(方向键)  #光标向左移动一个单词首,相当于 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 + # #提示输入指定字符后,重复显示该字符#次

登录提示

登录前提示

在命令行模式下本地终端(tty1~tty6)登录界面,会有几行提示文字,这些文字都保存在/etc/issue文件中,可以自行修改.

/etc/issue
/etc/issue.d/*.issue

#issue 支持转义字符,全部可用的转义字符可以通过 man agetty 查看,这里列出常用的
\d #显示当前系统日期
\S #显示操作系统名称
\m #显示硬件体系结构,如i386、i686等
\n #显示主机名
\o #显示域名
\r #显示内核版本
\t #显示当前系统时间
\u #显示当前登录用户的序列号
vim /etc/ssh/sshd_config
#Banner none 将此处的banner 指向对应的文件即可
Banner /etc/issue.net
#重启sshd 服务
service sshd restart
/etc/motd

如果是远程终端ssh 登录,则其登录前信息,可以放在/etc/issue.net 中,但是该文件中的内容不支持转 义

如果要使用远程终端ssh 登录前的提示信息,还需要修改sshd的相关配置文件

vim /etc/ssh/sshd_config
#Banner none 将此处的banner 指向对应的文件即可
Banner /etc/issue.net
#重启sshd 服务
service sshd restart

登录后提示

motd:message of the day

当用户从终端登录时,此文件的内容将会显示在终端上,如果shell工具支持中文,也可显示。 内容由使用者定制,经常用于通告信息,欢迎提示等。 但是,此文件只适用于命令行界面,如果是图形界面登录,将不显示此文件内容。

/etc/motd
/etc/motd.d/

#ubuntu2204中没有该文件,可自行创建
[root@ubuntu2204 ~]# ls /etc/motd
ls: cannot access '/etc/motd': No such file or directory
#登录后的提示来自于此目录下不同文件,如果不需要默认提示,可以将该目录清空
[root@ubuntu2204 ~]# ls /etc/update-motd.d/
00-header             85-fwupd                   91-release-upgrade      98-
fsck-at-reboot
10-help-text          88-esm-announce            92-unattended-upgrades  98-
reboot-required
50-landscape-sysinfo  90-updates-available       95-hwe-eol
50-motd-news          91-contract-ua-esm-status  97-overlayroot

获得帮助

  • whatis & whereis 命令

  • command --help 选项

  • man 手册

  • 程序自带文档 /usr/share/doc

  • 项目官网文档

  • 行业网站

  • 搜索引擎

whatis & whereis

whatis 使用数据库来显示命令的简短描述,以及对应的man手册的章节

刚装完系统此命令不可用,其数据要进行初始化,

如果要立即使用,则可手动初始化

whereis 可以列出命令或系统文件路径,以及其对应的man 手册中的文档路径

#whatis 初始化
mandb
#whatis使用
[root@rocky8 ~]# whatis ls
ls (1)               - list directory contents
ls (1p)              - list directory contents
[root@ubuntu2204 ~]# whatis ls
ls (1)               - list directory contents
#whereis使用
[root@ubuntu2204 ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
[root@ubuntu2204 ~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man5/passwd.5.gz 
/usr/share/man/man1/passwd.1.gz /usr/share/man/man1/passwd.1ssl.gz

查看命令的帮助

内部命令帮助

help COMMAND
#内部命令都在bash中,包括一些全局变量,可以在man手册中查看全部bash信息
man bash

外部命令及软件帮助

COMMAND --help|-h

man COMMAND

info COMMAND

#程序自身的帮助文档:README、INSTALL、ChangeLog 等
#项目官网文档
#行业网站
#搜索引擎

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

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

 

常见用法含义
[]表示是可选项
CAPS或 <>表示变化的数据
...表示是一个列表,即可以有多个值
x|y|zx 或 y 或 z
-abc-a -b -c,多选项写一起
{}表示分组

 

man 命令

man 是单词 manual 的简写,是Linux系统中的帮助手册和文档

man 是一个外部命令,基本质就是读取特定文件,进行输出,其读取的文件一般位于/usr/share/man/ 目录下

新安装一个软件或程序后,对应的man手册也会放到/usr/share/man/目录下

几乎每个命令都有man的 “页面”

在线手册

https://man7.org/linux/man-pages/index.html
https://man7.org/linux/man-pages/dir_all_alphabetic.html

man 页面分组

不同类型的帮助称为不同的“章节”,统称为Linux手册,man 1 man

man 命令常见用法:

#man[选项...] [章节] 手册页...
man passwd #默认打开第一章帮助
man 5 passwd #指定第五章帮助
man 9 passwd #总共9个章节,中间的数字不能超过9,如果要找的章节里面
没有对应的内容,则会提示没有
man 10 passwd #总共9个章节,中间的数字不能超过9,如果是数字大于9,
则直接定位到最小的章
man -a passwd #打开所有帮助
man -f passwd #显示passwd 相关的章节,相当于 whatis passwd
man -k passwd #在man 手册中搜索所有与passwd 相关的内容,使用
whatis 数据库

man -w ls #显示ls的man 文件路径
man -aw passwd #显示所有跟passwd有关的man文件路径
man -w 5 passwd #显示第5章的passwd的man文件路径
man -M /usr/local/share/man/zh_CN #显示中文man 的内容

#常用快捷键
e|ctrl+E|j|ctrl+J|enter|往下方向键 往下一行
y|ctrl+Y|k|ctrl+K|ctrl+P|往上方向键 往上一行
z|f|ctrl+F|ctrl+V|space 往下一屏
w|b|ctrl+B|esc+v 往上一屏
d|ctrl+D 往下半屏
u|ctrl+U 往上半屏
1G 回到首行
G 跳转至结尾
/abc 向下搜索abc 按n向下跳转,按N向上跳转
?abc 向上搜索abc 按n向下跳转,按N向上跳转
q 退出


#常用关键字及格式
[] 可选项
<> 必选项
a|b 二选一
... 同一内容可出现多次
{ } 分组


#段落说明
NAME #名称及说明
DESCRIPTION #详细说明
SYNOPSIS #使用格式
FILES #相关文件
OPTIONS #选项
AUTHOR #作者
REPORTING BUGS #相关bug信息
COPYRIGHT #版权及开源协议信息
EXAMPLES #使用示例
SEE ALSO #可参考其它部份

#其它命令
#显示man手册文件路径
[root@ubuntu2204 ~]# manpath
/usr/local/man:/usr/local/share/man:/usr/share/man
#指定man手册文件路径
[root@ubuntu2204 ~]# manpath /path/dir

#在指定位置下搜索,自定义安装的软件,用man查看帮助时,可以指定man文件地址
[root@ubuntu2204 ~]# man -M /path/dir/ COMMAND

info 命令

info 是自由软件基金会的GNU项目,是GNU的超文本帮助系统,

整个结构类似于一个网站,有导航,支持链接跳转 不带参数,

默认进入的是首页

#info [OPTION]... [MENU-ITEM...]
info #进入整个info文档
info ls #在info 中查看ls的信息
#常用快捷键
向上方向键 #上移一行
向下方向键 #下移一行
PgUp       #向上一屏
PgDn       #向下一屏
Tab       #在链接间滚动
Enter     #进入链接查看具体内容
s|/       #搜索
n/p/u/l #进入下/前/上一层/最后一个链接
q       #退出

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

/usr/share/doc

多数安装了的软件包的子目录,包括了这些软件的相关原理说明

常见文档:README INSTALL CHANGES

不适合其它地方的文档的位置

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

Linux官方在线文档和知识库

通过发行版官方的文档光盘或网站可以获得安装指南、部署指南、虚拟化指南等

http://www.redhat.com/docs
http://kbase.redhat.com
http://access.redhat.com
https://help.ubuntu.com/lts/serverguide/index.html
http://tldp.org

通过在线文档获取帮助

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

TLDR 命令

当我们在使用一个不熟悉的命令时,可以使用 -h 或 --help 选项来查看帮助,或者使用 man 手册还查看 更详细的文档,但这两种方式,会列出所有选项,而有些选项很少使用,根据二八原则,只有一小部份 选项才是最常用的,如是基于此,有人开发了一个开源的查看命令工具,此工具只列出命令的常用选项 的帮助。

TLDR: Too Long;Didn’t Read(太长不看),也可以叫作 “偷懒的人”

#项目主页
https://github.com/tldr-pages/tldr
[root@ubuntu2204 ~]# apt install python3-pip
[root@ubuntu2204 ~]# pip3 install tldr
[root@ubuntu2204 ~]# vim /etc/hosts
185.199.109.133 raw.githubusercontent.com

#查看 ls 命令帮助
[root@ubuntu2204 ~]# tldr ls
  ls
 List directory contents.
 More information: https://www.gnu.org/software/coreutils/ls.
  - List files one per line:
    ls -1
  - List all files, including hidden files:
    ls -a
    ....

相关网站和搜索

http://www.google.com
http://bing.com 
http://www.baidu.com
http://www.slideshare.net

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值