linux基础和帮助-2

1. 字符集和编码

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

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

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

 

 

1.1 ASCII码

计算机内部,所有信息最终都是一个二进制值。上个世纪60年代,美国制定了一套字符编码,对英语字

符与二进制位之间的关系,做了统一规定,即ASCII(American Standard Code for Information Interchange) 码

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

 

 

例:查看 ascii 表

[root@Lisa ~]# yum install man-pages -y

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

[root@centos8 ~]#man ascii

 

 

1.2 Unicode

由于计算机是美国人发明的,因此,最早只有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://javawind.net/tools/native2ascii.jsp?action=transform

http://tool.oschina.net/encode

 

Unicode和UTF-8

Unicode符号范围(十六进制)  UTF-8编码方式二进制)
0000 0000-0000 007F 0xxxxxxx
0000 0080-0000  07FF 110xxxxx 10xxxxxx
0000 0800-0000 FFFF 

1110xxxx 10xxxxxx 10xxxxxx

0001 0000-0010 FFFF

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

 

 

 

 

 

 

 

 

例:

“汉”的 Unicode 码 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@centos7 ~]#echo $LANG

en_US.UTF-8

[root@centos7 ~]#LANG=zh_CN.UTF-8

[root@centos7 ~]#echo $LANG

zh_CN.UTF-8

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

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

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

$(COMMAND) 或 `COMMAND`

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

 

[root@Lisa ~]# echo "echo $HOSTNAME"

echo Lisa

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

echo $HOSTNAME

[root@centos8 ~]#echo `echo $HOSTNAME`

Lisa

结论:

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

反向单引号:变量和命令都识别,并且会将反向单引号的内容当成命令进行执行后,再交给调用反向单引号的命令继续

双引号:不能识别命令,可以识别变量

 

案例:

[root@Lisa ~]# echo "This system's name is $(hostname)"

This system's name is Lisa

[root@Lisa ~]# echo "I am `whoami`"

I am root

[root@Lisa ~]# touch $(date +%F).log

[root@Lisa ~]# ls

2022-4-14.log

[root@Lisa ~]# ls

2022-04-14.log

[root@Lisa ~]# touch `date +%F`.txt

[root@Lisa ~]# #ls

2022-04-14.log

2022-04-14.txt

[root@Lisa ~]# touch `hostname`-`date +%F`.log

[root@Lisa ~]# ls

total 0

 2022-04-14.log

 2022-04-14.txt

Lisa-2022-04-14.log

[root@Lisa ~]# touch `date +%F_%H-%M-%S`.log

[root@Lisa ~]# touch `date -d '-1 day' +%F`.log

范例:$( ) 和 ``

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

[root@Lisa ~]# ls $(echo $(date +%F).txt)

2022-04-14.txt

[root@Lisa ~]# ls`echo $(date +%F).txt`

2022-04-14.txt

[root@Lisa ~]# ls $(echo `date +%F`.txt)

2022-04-14.txt

 

1.4 括号扩展:{ }

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

例1:

echo file{1,3,5} 结果为:file1 file3 file5

rm -f file{1,3,5}

echo {1..10}

echo {a..z}

echo {000..20..2}

例2:

[root@Lisa ~]# echo {000..20..2}

000 002 004 006 008 010 012 014 016 018 020

[root@Lisa ~]# echo {a..z..2}

a c e g i k m o q s u w y

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

 

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

[root@Lisa ~]# echo $-

569XZilms

[root@Lisa ~]# set +X

[root@Lisa ~]# echo $-

569Zilms

 

1.5 tab 键补全

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

命令补全

内部命令:

外部命令:bash根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给定命令名命的文

件,第一次找到的命令即为要执行的命令

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

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

[root@centos8 ~]# nmcli connection 2TAB

add    delete  edit      help     load     monitor  show

clone down    export  import  modify reload     up

 

1.5.2 路径补全

把用户给出的字符串当做路径开头,并在其指定上级目录下搜索以指定的字符串开头的文件名

如果惟一:则直接补全

否则:再次Tab给出列表

 

双击Tab键

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

string2Tab 以 string 开头命令

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

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

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

~2Tab 所有用户列表

$2Tab 所有变量

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

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

 

1.6 命令行历史

在用户的家目录里面就会有一个,.bash_history文件,命令最开始执行是被存放到内存中的,然后有的命令就会被存放到了用户家目录中的.bash_history文件。

[root@Lisa ~]# cat .bash_history

当执行命令后,系统默认会在内存记录执行过的命令

当用户正常退出时,会将内存的命令历史存放对应历史文件中,默认是~/.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 忽略所有以空白开头的命令

 

持久保存变量

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

[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 "

 

[root@Lisa ~]#history

1 2022-04-14 08:39:05 ls /data

2 2022-04-14  08:39:05 date

3 2022-04-14  08:39:05 vie0

4 2022-04-14  08:39:05 nano .bash_profile

5 2022-04-14  08:39:05 exit

 

调用命令行历史

#重复前一个命令方法

重复前一个命令使用上方向键,并回车执行

按 !! 并回车执行

输入 !-1 并回车执行

按 Ctrl+p 并回车执行

!:0 执行前一条命令(去除参数)

!n 执行history命令输出对应序号n的命令

!-n 执行history历史中倒数第n个命令

!string 重复前一个以“string”开头的命令

!?string 重复前一个包含string的命令

!string:p 仅打印命令历史,而不执行

!$:p 打印输出 !$ (上一条命令的最后一个参数)的内容

!*:p 打印输出 !*(上一条命令的所有参数)的内容

^string 删除上一条命令中的第一个string

^string1^string2 将上一条命令中的第一个string1替换为string2

 

!$ 表示前一个命令的最后一个参数

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 开头的命令,并获取它的所有参数

 

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

 

注意:Alt组合快捷键经常和其它软件冲突

例:xshell中启动 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

例1:

[root@Lisa ~]#whatis cal

cal (1) - display a calendar

cal (1p) - print a calendar

[root@Lisa ~]#man -f cal

cal (1) - display a calendar

cal (1p) - print a calendar

例2:

[root@centos8 ~]#whatis ls

ls: nothing appropriate.

#生成man相关数据库

[root@Lisa ~]#mandb

Processing manual pages under /usr/share/man...

Updating index cache for path `/usr/share/man/mann'. Wait...done.

Checking for stray cats under /usr/share/man...

...省略...

0 old database entries were purged.

[root@Lisa ~]#whatis ls

ls (1) - list directory contents

 

2.2 查看命令的帮助

内部命令查找方法:

help COMMAND

man bash

怎么样查看是不是内部命令:

[root@Lisa ~]#type history

history is a shell builtin

例:

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

...

 

外部命令和软件

1)外部命令和软件:

     COMMAND --help 或 COMMAND -h

2)使用手册(manual):man COMMAND

3)信息页:info COMMAND

4)程序自身的帮助文档:README  (INSTALL ,ChangeLog)

5)程序官方文档

6)官方站点:Documentation

     发行版的官方文档

7)Google

 

2.3 --help 或 -h 选项

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

[root@Lisa ~]#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@Lisa ~]#cal -h

Usage:

cal [options] [[[day] month] year]

cal [options] <timestamp|monthname>

[root@Lisa ~]#strace --help

strace: invalid option -- '-'

Try 'strace -h' for more information.

[root@Lisa ~]#date -h

date: invalid option -- 'h'

Try 'date --help' for more information.

帮助格式说明:

[] 表示可选项

CAPS或 <> 表示变化的数据

... 表示一个列表

x |y| z 的意思是“ x 或 y 或 z ”

-abc的 意思是 -a -b –c

{ } 表示分组

 

2.4 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

 

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 [章节] keyword

man 帮助段落说明

  1)NAME 名称及简要说明

  2)SYNOPSIS 用法格式说明

  3)[] 可选内容

  4)<> 必选内容

  5)a|b 二选一

  6){ } 分组

  7)... 同一内容可出现多次

  8)DESCRIPTION 详细说明

  9)OPTIONS 选项说明

  10)EXAMPLES 示例

  11)FILES 相关文件

  12)AUTHOR 作者

  13)COPYRIGHT 版本信息

  14)REPORTING BUGS bug信息

  15)SEE ALSO 其它帮助参考

列出所有帮助

man -a keyword

相当于 whatis:  man -f keyword

 

打印man帮助文件的路径

man -w [章节] keyword

案例:

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

[root@centos8 ~]#man -w 1 passwd

/usr/share/man/man1/passwd.1.gz

[root@centos8 ~]#whatis passwd

openssl-passwd (1ssl) - compute password hashes

passwd (1) - update user's authentication tokens

[root@centos8 ~]#man 1ssl openssl-passwd

[root@centos8 ~]#man 7 ascii

[root@centos8 ~]#man 7 utf8

 

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:跟搜索命令反方向,上一个

 

2.5 info

man常用于命令参考 ,GNU工具 info 适合通用文档参考

没有参数,列出所有的页面

info 页面的结构就像一个网站

每一页分为“节点”

链接节点之前 *

info 命令格式     # info [ 命令 ]

导航info页

  方向键,PgUp,PgDn 导航

  Tab键 移动到下一个链接

  d 显示主题目录

  Home 显示主题首部

  Enter进入 选定链接

  n/p/u/l 进入下/前/上一层/最后一个链接

  s 文字 文本搜索

  q 退出 info

 

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

Applications -> documentation->help(centos7)

System->help(centos6)

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

/usr/share/doc 目录

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

  常见文档:README INSTALL CHANGES

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

  配置文件范例

  HTML/PDF/PS 格式的文档

  授权书详情

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

 

2.8.1 通过在线文档获取帮助

 

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

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

红帽全球技术支持服务

rhn.redhat.com或者本地卫星服务器/代理服务器

RHN账户为及其注册和基于网络管理的RHN用户

sosreport 收集所有系统上的日志信息的工具,并自动打成压缩包,方便技术支持人员和红帽全球支持提供分析问题依据

例:

[root@centos8 ~]#dnf -y install sos

[root@centos8 ~]# sosreport

sosreport (version 3.6)

This command will collect diagnostic and configuration information from

this CentOS Linux system and installed applications.

...

 

2.9 网站和搜索

http://www.google.com

 

 

 

 

posted @   jefferyone  阅读(99)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示