Linux 入门基础知识(一)—— Linux的基本使用
Linux 入门基础知识
- 一、Linux的基本使用和配置
- 1.1、终端
- 1.2、消耗内存
- 1.3、运行级别
- 1.6、登录前欢迎语
- 1.5、登录后欢迎语
- 1.6、shell
- 1.7、ps aux
- 1.8、设置主机名
- 1.9、whoami和who am i
- 1.10、命令提示符
- 二、Linux执行命令的过程详解和命令类型
- 2.1、命令执行
- 2.2、hash缓存表
- 2.3、内部命令
- 2.4、外部命令的路径
- 2.5、.(点)命令
- 2.6、命令别名
- 三、命令格式详解和基本命令介绍
- 3.1、命令格式
- 3.2、常见命令
- 3.2.1、查看硬件信息
- 3.2.1.1、查看cpu
- 3.2.1.2、查看内存大小
- 3.2.1.3、查看硬盘和分区情况
- 3.2.2、查看系统版本信息
- 3.2.2.1、查看内核版本
- 3.2.2.2、查看操作系统发行版本
- 3.2.3、日期和时间
- 3.2.4、关机和重启
- 3.2.5、用户登录信息查看命令
- 3.2.6、文本编辑
- 3.2.7、会话管理
- 3.2.7.1、screen
- 3.2.7.2、tmux
- 3.2.8、输出信息echo
- 3.2.9、字符集和编码
- 3.2.9.1、ASCII码
- 3.2.9.2、Unicode
- 四、SHELL中各种特殊符号用法和区别详解
- 4.1、命令行扩展和括起来的集合
- 4.1.1、命令行扩展
- 4.1.2、括号扩展
- 4.2、tab键补全
- 4.2.1、命令补全
- 4.2.2、路径补全
- 4.2.3、双击Tab键
- 4.2.4、命令行历史
- 4.2.5、调用命令行历史
- 4.2.6、bash的快捷键
- 4.3、获得帮助
- 4.3.1、whatis
- 4.3.2、查看命令的帮助
- 4.3.3、man命令
- 4.3.4、info
- 4.3.5、Linux安装提供的本地文档获取帮助
- 4.3.6、命令自身提供的官方使用指南
- 参考视频:https://www.bilibili.com/video/BV1cT411P7sC/?spm_id_from=333.337.search-card.all.click&vd_source=93ef4007c464e7143f2a9fb5be297117
一、Linux的基本使用和配置
1.1、终端
tty # 查看当前所在的终端
who # 当前主机上有哪些人在哪些终端上登录
who am i # 类似tty
-
控制台终端:
/dev/console -
串行终端:
/dev/ttyS# -
虚拟终端:tty:teletypewriters,
/dev/tty#,tty可有n个,Ctrl+AIt+F# -
图形终端:startx,xwindows
- CentOS 6:Ctrl Alt F7
- CentOS7:在哪个终端启动,即位于哪个虚拟终端
-
伪终端:pty:pseudo-tty,
/dev/pts/#如:SSH远程连接 -
tty有两类:
dev/ttyN/dev/pts/Npts是伪文件系统,所以称为伪终端- 在其他命令执行结果中,有显示TTY这列信息,就是指终端名称信息,其对应的记录是进一步的详细说明。
1、只有一台主机使用时:

2、使用有远程登录时:
-
远程工具查看,可以看到产生一个新的终端
pts/2,是通过远程工具xshell连接下产生的:

-
每个终端支持不同的用户进行登录(可以看到登录的用户名有kali和root)。

1.2、消耗内存
free #查看当前系统消耗的内存数

1.3、运行级别
init +N
| 运行级别 | 作用 |
|---|---|
| 0 | 关机 |
| 1、S、emergency | 都是单用户模式,只允许root登录,作为维护使用(相当于Windows的安全模式) |
| 2 | 多用户,不支持网络功能(没NFS) |
| 3 | 多用户,带网络(有NFS),默认进入文本模式(shell) |
| 4 | 系统保留,但是默认和级别3相同 |
| 5 | 多用户带网络,默认进入图形界面 |
| 6 | 重启 |
-
查看运行级别:
runlevel

-
进入其它运行级别:
init N -
init 0为关机,init 6为重启系统
1.6、登录前欢迎语
/etc/issue文件用来显示Linux系统的基本信息,例如发行版本、内核版本、安装日期等。当用户登录到Linux系统时,该文件将被用来显示欢迎信息。- 这个需要使用字符系统登录看,用远程工具看不到。
cat /etc/issue

- 以下是
/etc/issue文件的一些常见选项说明:
\n:换行符,用于在欢迎信息中添加新行。
\l:显示本地终端设备名称。
\m:显示计算机的硬件架构。
\s:显示操作系统的名称。
\r:显示内核的版本号。
\t:显示当前时间。
\u:显示当前用户名。
\v:显示操作系统的发行版本号。
\\:显示反斜杠字符。其他自定义文本:可以在文件中添加其他自定义文本或标记。
- 使用这些选项,你可以根据需要定制并个性化系统登录时的欢迎信息。例如,可以使用
\s和\v选项来显示操作系统的名称和发行版本号,\l选项来显示本地终端设备名称,以及\t选项来显示当前时间等。
1.5、登录后欢迎语
/etc/motd文件用来显示Linux系统的欢迎信息。当用户第一次登录到Linux系统时,该文件将被用来显示欢迎信息。
vim /etc/motd
-
修改欢迎信息。

-
添加并保存。

-
出现

1.6、shell
-
shell是Linux系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行
-
shell也被称为LINUX的命令解释器(command interpreter)
-
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
-
怎么确认当前使用的shell
echo $SHELL

- 查看系统支持的shell
cat /etc/shells

1.7、ps aux
ps aux:给出当前系统中正在运行的进程的详细信息,用于查看当前系统中运行的进程,以及它们所占用的资源和状态信息。可以通过对输出进行筛选和排序,进一步了解进程的性能和行为,以及对系统资源的使用情况进行监控和分析。
- 下面对 ps aux 的输出进行详细讲解:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
# USER: 显示每个进程所属的用户。
# PID: 进程的唯一标识符(Process ID)。
# %CPU: 进程当前使用的 CPU 百分比。
# %MEM: 进程当前使用的内存百分比。
# VSZ: 进程的虚拟内存大小(以 KB 或 MB 为单位)。
# RSS: 进程使用的物理内存大小(以 KB 或 MB 为单位)。
# TTY: 进程关联的终端设备。
# STAT: 进程的状态,包括运行状态(R,表示运行)、睡眠状态(S,表示睡眠)、僵尸状态(Z,表示僵尸进程)等。
# START: 进程启动的时间。
# TIME: 进程占用的 CPU 时间。
# COMMAND: 进程所对应的命令。
ps aux输出的是所有用户的进程信息,其中a表示显示所有用户的进程,u表示显示进程的详细信息,x表示显示没有控制终端的进程。- 请注意,
ps aux命令的输出结果可能会因为操作系统的不同而有所差异。在某些系统上,可能需要使用ps -ef或其他类似的命令来达到相同的效果。建议在使用时参考相关系统的文档和命令手册,以确保正确使用和解读输出结果。
1.8、设置主机名
hostname NAME # 临时性的更改,不是永久性的更改
- 注意:主机名不要使用下划线

- 要想永久保存需要写进文件里:
/etc/hostname
vim /etc/hostname
- 还可以使用命令:
hostnamectl hostname NAME

1.9、whoami和who am i
-
whoami显示的是当前“操作用户”的用户名,而who am i显示的是“登录用户”的用户名。

-
who后面可以跟很多参数:-q列出当前用户个数–H在每列前面加上列名称-b列出系统上一次启动的时间–r列出系统当前运行级别–l列出系统登录进程

- 如果
who am i没有内容输出,说明是当前用户没有登录或者登录信息已经过期。
1.10、命令提示符
-
普通用户:
$符号

-
管理员用户:
#符号

sudo -i # 切换成管理员
-
提示符也可以更改:
PS1- 在Linux中,PS1(Prompt String 1)是一个环境变量,用来定义shell命令提示符的显示内容和格式。当在终端中输入命令时,PS1定义的就是那个通常显示在光标左侧的提示符。 PS1可以包含纯文本和特殊的转义序列。转义序列以反斜杠开始,用来插入例如日期、时间、用户名、当前目录等动态信息。
- 查看 PS1 当前配置:
echo $PS1

-
在
/etc/.bashrc中找PS1变量的定义,如果没有,可以手动加上。
export PS1="\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$"
-
临时修改(重新打开恢复):

-
PS1 纯文本和特殊的转义序列:
#下面简单说说上文环境下默认的特殊符号所代表的意义:
\d :代表日期,格式为weekday month date,例如:“Mon Aug1”
\H:完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux
\h :仅取主机的第一个名字,如上例,则为fc4,.linux则被省略
\t :显示时间为24小时格式,如:HH:MM:SS
\T :显示时间为12小时格式
\A :显示时间为24小时格式:HH:MM
\u :当前用户的账号名称
\v :BASH的版本信息
\w :完整的工作目录名称。家目录会以 ~代替
\W :利用basename取得工作目录名称,所以只会列出最后一个目录
\# :下达的第几个命令
\$ :提示字符,如果是root时,提示符为:# ,普通用户则为:$
\!:表示历史命令计数。
- PS1 颜色设置:
- 我们可以通过设置PS1变量使提示符成为彩色。在PS1中设置字符序列颜色的格式为:
\[\e[F;Bm\] - 其中
F为字体颜色,编号30~37;B为背景色,编号40~47。 - 可通过
\e[0m关闭颜色输出;特别的,当B为1时,将显示加亮加粗的文字,详细请看下面的颜色表与代码表。
- 我们可以通过设置PS1变量使提示符成为彩色。在PS1中设置字符序列颜色的格式为:
| 前景 | 背景 | 颜色 |
|---|---|---|
| 30 | 40 | 黑色 |
| 31 | 41 | 红色 |
| 32 | 42 | 绿色 |
| 33 | 43 | 黃色 |
| 34 | 44 | 蓝色 |
| 35 | 45 | 紫紅色 |
| 36 | 46 | 青蓝色 |
| 37 | 47 | 白色 |
| 代码 | 意义 |
|---|---|
| 0 | OFF |
| 1 | 高亮显示 |
| 4 | underline |
| 5 | 闪烁 |
| 7 | 反白显示 |
| 8 | 不可见 |
- 永久修改(不同的shell或者版本可能会不一样):
https://blog.csdn.net/omaidb/article/details/120384944
二、Linux执行命令的过程详解和命令类型
2.1、命令执行
-
执行命令过程:输入命令后回车,提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来
-
shell中可执行的两类命令:
- 内部命令:由shell自带的,而且通过某命令形式提供
- 外部命令:在文件系统路径下有对应的可执行程序文件
-
区别指定的命令是内部或外部命令:
type COMMAND -
如果是内部命令是不会显示出路径来,以下是外部命令:

-
如果是内部命令则会提示:
.... is a shell builtin

-
当用户输入一个指令后,系统先判断该命令是否是集成在shell中的内部命令,如果是的话就运行,不是的话就是外部命令,按下图进行依次搜索该外部命令,如果找到的话就加载进内存进行运行,如果找不到就报提示错误:
Command 'xxx' not found

-
如果每一次执行外部命令的时候都按照路径一点点去查找,效率偏低。因此为了加速访问,Linux会把上次执行该外部命令时查找到的路径记录到内存里面(这个动作就被称为
hash)。
2.2、hash缓存表
- hash缓存表:系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的路径记录到hash中,当再次使用该命令时,shell解释器首先会查看hash表,存在将执行之,如果不存在,将会去PATH路径下寻找,利用hash缓存表可大大提高命令的调用速率。
hash # 查看曾经执行过的外部命令 hits(命中)代表执行了几次该命令

- hash命令常见用法:
hash显示hash缓存hash -I显示hash缓存,可作为输入使用hash -p path name将命令全路径path起别名为namehash -t name打印缓存中name的路径hash -d name清除name缓存hash -r清除缓存
2.3、内部命令
help # 显示所有内部命令
enable # 显示所有内部命令


enable管理内部命令enable cmd启动内部命令enable -n cmd禁用内部命令(临时禁用)enable -n查看所有禁用的内部命令
2.4、外部命令的路径
which cmd查看外部命令的路径whereis cmd显示出外部命令的路径以及该命令对应的帮助文档的路径

2.5、.(点)命令
- “
.”点命令是shell的一个内部命令,它从指定的shell 文件中读入所有命令语句并在当前进程中执行(将配置文件生效) - 与
source等价
2.6、命令别名
- 对于经常执行的较长的命令,可以将其定义成较短的别名,以方便执行
- 定义别名的时候,不要和本身已经存在的内部命令和外部命令冲突,别名的优先级高于内部命令
alias # 显示当前shel进程所有可用的命令别名
alias NAME='VALUE' # 定义别名NAME,其相当于执行命令VALUE,临时失效

-
永久写入:


-
注意:在命令行中定义的别名,仅对当前shell进程有效
-
如果想永久有效,要定义在配置文件中
- 仅对当前用户:
~/.bashrd - 对所有用户有效:
/etc/bashrc
- 仅对当前用户:
echo "alias free='free -h'" >> .bashrc # 永久生效
. .bashrc # 重新运行配置文件
- 撤消别名:
unalias
unalias [-a] name [name...]
unalias -a # 取消所有别名,临时取消
- 当别名与内部或者外部命令重名时,又想执行命令时,可以使用
\,在命令前加\,如\enable - 也可以使用单引号,如
'enable',如下详细:
\ALIASNAME
"ALIASNAME"
'ALIASNAME'
command ALIASNAME
/path/command # 加上路径,只适合外部命令
三、命令格式详解和基本命令介绍
3.1、命令格式
-
命令格式:
COMMAND [OPTIONS...] [ARGUMENTS...] -
选项:用于启用或关闭命令的某个或某些功能
- 短选项:UNIX风格选项,-c 例如:
-l,-h - 长选项:GNU风格选项,-word 例如:
-all,--human - BSD风格选项:一个字母,例如:
a

- 短选项:UNIX风格选项,-c 例如:
-
参数:命令的作用对象,比如:文件名,用户名等
-
注意:
- 多个选项以及多参数和命令之间使用空白字符分隔
- 取消和结束命令执行:
Ctrl+c,Ctrl+d - 多个命令可以用"
;"符号分开 - 一个命令可以用
\分成多行
3.2、常见命令
bc计算器


3.2.1、查看硬件信息
3.2.1.1、查看cpu
lscpcu可以查看cpu信息cat /proc/cpuinfo也可以查看到


3.2.1.2、查看内存大小
free

cat /proc/meminfo

3.2.1.3、查看硬盘和分区情况
lsblk

cat /proc/partitions

3.2.2、查看系统版本信息
3.2.2.1、查看内核版本
uname -r

3.2.2.2、查看操作系统发行版本
cat /etc/os-release

3.2.3、日期和时间
- Linux的两种时钟
- 系统时钟:由Linux内核通过CPU的工作频率进行的
- 硬件时钟:主板
date # 显示和设置系统时间
date 月日小时分年.秒 # 临时设置时间



clock,hwclock:显示硬件时钟
-s,--hctosys 以硬件时钟为准,校正系统时钟
-w,--systohc 以系统时钟为准,校正硬件时钟

/etc/localtime # 时区
ll /etc/localtime # 查看时区 或者cat /etc/localtime

timedatectl list-timezones # 列出现有的时区列表

timedatectl set-timezone Asia/Shanghai # 修改时区

cal -y # 显示整年的日历

cal # 显示当前月份的日历

cal 月 年 # 指定年月的日历


3.2.4、关机和重启
-
关机:
haltpoweroff
-
重启:
reboot-f:强制,不调用shutdown-p:切断电源
-
关机或重启:
shutdownshutdown [OPTION]... [TIME] [MESSAGE]-r:reboot-h:halt-c:cancel- TIME:无指定,默认相当于
+1(CentOS7)now:立刻,相当于+0+#:相对时间表示法,几分钟之后;例如+3hh:mm:绝对时间表示,指明具体时间
3.2.5、用户登录信息查看命令
whoami:显示当前登录有效用户who:系统当前所有的登录会话w:系统当前所有的登录会话及所做的操作

3.2.6、文本编辑
- nano:工具可以实现文本的编辑,上手容易,适合初学者
- gedit:工具是图形工具
3.2.7、会话管理
- 命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称“窗口”),在里面输入命令。用户与计算机的这种临时的交互,称为一次“会话”(session)
- 会话的一个重要特点是,窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束,会内部的进程也会随之终止,不管有没有运行完
- 一个典型的例子就是,SSH登录远程计算机,打开一个远程窗口执行命令。这时,网络突然断线,再次登录的时候,是找不回上一次执行的命令的。因为上一次SSH会话已经终止了,里面的进程也随之消失了。为了解决这个问题,会话与窗口可以“解绑”:窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话“绑定”其他窗口
- 终端复用器软件就是会话与窗口的“解绑”工具,将它们彻底分离。
- 它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
- 它可以让新窗口“接入”已经存在的会话。
- 它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
- 它还支持窗口任意的垂直和水平拆分。
- 类似的终端复用器还有Screen,TmuX
3.2.7.1、screen
利用screen可以实现会话管理,如:新建会话,共享会话等
需要连接到同一个账户和同一台电脑上
- screen命令常见用法:
- 创建新screen会话:
screen -S [SESSION] - 加入screen会话:
screen -x [SESSION] - 退出并关闭screen会话:
exit - 剥离当前的会话:
Ctrl+a,d按Ctrl a和d - 显示所有已经打开的screen会话:
screen -Is - 恢复某screen会话:
screen -r [SESSION]
- 创建新screen会话:
screen -S test # 用户A 创建一个会话,名字叫 test

screen -ls # 用户B 查看会话

screen -x test # 用户B 加入一个名字叫 test 的会话

- 左侧屏幕为用户B,右侧屏幕为用户A,用户B可以远程查看到用户A的操作界面,用户A也可以远程查看到用户B的操作界面,两边的屏幕同步了

3.2.7.2、tmux
- Tmux是一个终端复用器,类似screen,但是更易用,也更强大
- Tmux就是会话与窗口的“解绑”工具,将它们彻底分离,功能如下:
- 它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
- 它可以让新窗口“接入”已经存在的会话。
- 它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
- 它还支持窗口任意的垂直和水平拆分。
tmux # 启动
exit # 退出
- mux窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是ctrI+b,即先按下
ctrI+b,快捷键才会生效。帮助命令的快捷键是ctrI+b?然后,按下q键,就可以退出帮助 - 新建会话
- 第一个启动的Tmux窗口,编号是0,第二个窗口的编号是1,以此类推。这些窗口对应的会话,就是0号会话、1号会话。使用编号区分会话,不太直观,更好的方法是为会话起名。下面命令新建一个指定名称的会话。
tmux new -s <session-name>
tmux ls或Ctrl+b,s,可以查看当前所有的Tmux会话
tmux ls
tmux list-session
- 分离会话
- 在Tmux窗口中,按下
Ctrl+b d或者输入tmux detach命令,就会将当前会话与窗口分离。
- 在Tmux窗口中,按下
tmux detach
- 接入会话
tmux attach命令用于重新接入某个已存在的会话。
tmux attach -t <session-name>
- 杀死会话
tmux kill-session命令用于杀死某个会话
tmux kill-session -t <session-name>
- 切换会话
tmux switch命令用于切换会话
tmux switch -t <session-name>
- 可以将窗口分成多个窗口(pane),每个窗口运行不同的命令
- 上下分窗口
tmux split-window
ctrl+b,"
- 左右分窗口
tmux split-window-h
ctrl+b,%
- 切换窗口
tmux select-window命令用来切换窗口- 切换到指定编号的窗口:
tmux select-window -t <window-number> - 切换到指定名称的窗口:
tmux select-window -t <window-name>
- 窗口快捷键
CtrI+b c:创建一个新窗口,状态栏会显示多个窗口的信息。
CtrT+b p:切换到上一个窗口(按照状态栏上的顺序)。
ctr1+b n:切换到下一个窗口。
ctrI+b <number>:切换到指定编号的窗口,其中的<number>是状态栏上的窗口编号
ctrI+b w:从列表中选择窗口
Ctrl+b ,:窗口重命名
- 列出所有快捷键,及其对应的Tmux命令:
tmux list-keys - 列出所有Tmux命令及其参数:
tmux list-commands
3.2.8、输出信息echo
- echo命令可以将后面跟的字符进行输出
- 功能:显示字符,echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开,并在最后加上换行号
- 语法:
echo [-neE][字符串]
-
选项:
-E(默认)不支持\解释功能-n不自动换行-e启用\字符的解释功能

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

- 启用命令选项
-e,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出\a发出警告声\b退格键\c最后不加上换行符号\eescape,相当于\033\n换行且光标移至行首\r回车,即光标移至行首,但不换行\t插入tab\\插入\字符\0nnn插入nnn(八进制)所代表的ASCII字符\xHH插入HH(十六进制)所代表的ASCII数字(man 7 ascii)
3.2.9、字符集和编码
echo $LANG --> en_US.UTF-8 # en_US 提示是英文

- 许多场合下,字符集与编码这两个概念常被混为一谈,但两者是有差别的。字符集与字符集编码是两个不同层面的概念
- charset是character set的简写,即字符集,即二进和字符的对应关系,不关注最终的存储形式
- encoding是charset encoding的简写,即字符集编码,简称编码,实现如何将字符转化为实际的二进制进行存储或相反,编码决定了空间的使用的大小
3.2.9.1、ASCII码
- 计算机内部,所有信息最终都是一个二进制值。上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定,即ASCll码,ASCII码一共规定了128个字符的编码,占用了一个字节的后面7位,最前面的一位统一规定为0

3.2.9.2、Unicode
- 为了表示世界上所有语言中的所有字符。每一个符号都给予一个独一无二的编码数字,Unicode是一个很大的集合,现在的规模可以容纳100多万个符号。Unicode仅仅只是一个字符集,规定了每个字符对应的二进制代码,至于这个二进制代码如何存储则没有规定
- Unicode编码方案:
- UTF-8:变长,1到4个字节
- UTF-16:变长,2到4个字节
- UTF-32:固定长度,4个字节
四、SHELL中各种特殊符号用法和区别详解
4.1、命令行扩展和括起来的集合
4.1.1、命令行扩展
- 把一个命令的输出打印给另一个命令的参数
$(CMD) 或 `CMD`
`CMD`:变量和命令都识别,将里面的内容当成命令执行
`CMD`:不支持嵌套
$(CMD):支持嵌套

- 结论:
- 单引号:变量和命令都不识别,当成普通的字符串
- 反向单引号:变量和命令都识别,并且会将反向单引号的内容当成命令执行后,再交给调用反向单引号的命令继续
- 双引号: 不能识别命令,可以识别变量
4.1.2、括号扩展
{}:可以实现打印重复字符串的简化形式





4.2、tab键补全
- tab键可以实现命令及路径等补全,提高输入效率,避免出错
4.2.1、命令补全
- 内部命令:
- 外部命令:bash根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给定命令名命名的文件,第一次找到的命令即为要执行的命令
- 注意:用户给定的字符串只有一条惟一对应的命令,直接补全,否则,再次Tab会给出列表
4.2.2、路径补全
- 把用户给出的字符串当做路径开头,并在其指定上级目录下搜索以指定的字符串开头的文件名
- 如果惟一:则直接补全
- 否则:再次Tab给出列表
4.2.3、双击Tab键
command 2Tab所有子命令或文件补全string 2Tab以string开头命令/2Tab显示所有根目录下一级目录,包括隐藏目录./2Tab当前目录下子目录,包括隐藏目录*2Tb当前目录下子目录,不包括隐藏目录~2Tab所有用户列表$2Tab所有变量@2Tab /etc/hosts记录(centos7不支持)=2Tab相当于ls -A(centos?7不支持)
4.2.4、命令行历史
- 保存你输入的命令历史。可以用它来重复执行命令
- 当用户正常退出时,会将内存的命令历史存放对应历史文件中
~/.bash_history - 登录shell时,会读取命令历史文件中记录下的命令
~/.bash_history - 登录进shell后新执行的命令只会记录在缓存中;这些命令会用户正常退出时“追加”至命令历史文件中
- 命令:
history-c清空命令历史-d offset删除历史中指定的第offset个命令n显示最近的n条历史-a追加本次会话新执行的命令历史列表至历史文件-r读历史文件附加到历史列表-w保存历史列表到指定的历史文件-n读历史文件中未读过的行到历史列表-p展开历史参数成多行,但不存在历史列表中-s展开历史参数成一行,附加在历史列表后(加入历史,并不执行)
history [-c] [-d offset] [n]
history -anrw [filename]
history -ps arg [arg...]
- 命令历史相关环境变量
HISTSIZE命令历史记录的条数HISTFILE指定历史文件,默认为~/.bash_historyHISTFILES1ZE命令历史文件记录历史的条数HISTIGNORE="str1:str2*:..."忽略str1命令,str2开头的历史HISTCONTROL控制命令历史的记录方式ignoredups是默认值,可忽略重复的命令,连续且相同为“重复”ignorespace忽略所有以空白开头的命令ignoreboth相当于ignoredups,ignorespace的组合erasedups删除重复命令
HISTTIMEFORMAT="%F %T `whoami` " # 显示时间和用户

echo $HISTSIZE # 可以记录多少条历史,可以在 /etc/profile 文件里面修改

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

- 实用技巧和技巧
- 使用
Ctrl+R搜索历史命令:Ctrl+R可以在历史命令记录中搜索命令。只需按下Ctrl+R,然后输入要搜索的命令的一部分,就可以找到最近包含该字符串的命令。 - 使用
!执行历史命令:!可以用来执行历史命令。例如,!ls可以执行最近执行的以ls开头的命令。 - 使用
!!执行上一条命令:!!可以用来执行上一条命令。例如,如果上一条命令是ls -l,则!!将执行ls -l命令。 - 使用
!$引用上一条命令的最后一个参数:!$可以用来引用上一条命令的最后一个参数。例如,如果上一条命令是ls -l /var/log,则!$将引用/var/log。 - 使用
history | grep:搜索历史命令history | grep可以在历史命令记录中搜索命令。例如,history | grep ls可以找到所有包含ls的历史命令。 - 使用
HISTSIZE环境变量设置历史命令记录的长度:HISTSIZE环境变量可以用来设置历史命令记录的长度。例如,HISTSIZE=1000可以将历史命令记录的长度设置为1000。 - 使用
history -w && history -c清空历史命令记录:history -w && history -c可以用来清空历史命令记录。该命令将当前会话的历史命令记录写入历史命令文件,并清空当前会话的历史命令记录。 - 使用
fc编辑历史命令:fc命令可以用来编辑历史命令。例如,fc -e vim可以用vim编辑器打开最近执行的命令。
- 使用
4.2.5、调用命令行历史
#重复前一个命令方法
重复前一个命令使用上方向键,并回车执行
按 !! 并回车执行
输入 !-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 # 在命令历史中搜索命令
Ctrl+g # 从历史搜索模式退出#要重新调用前一个命令中最后一个参数
!$ 表示
ESC,· 点击ESC键后松开,然后点击 . 键
Alt+. 按住Alt键的同时点击 . 键
command !^ 利用上一个命令的第一个参数做cmd的参数
command !$ 利用上一个命令的最后一个参数做cmd的参数
command !* 利用上一个命令的全部参数做cmd的参数
command !:n 利用上一个命令的第n个参数做cmd的参数
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开头的命令,并获取它的所有参数
4.2.6、bash的快捷键
- 编辑命令
Ctrl + a :移到命令行首
Ctrl + e :移到命令行尾
Ctrl + f :按字符前移(右向)
Ctrl + b :按字符后移(左向)
Alt + f :按单词前移(右向)
Alt + b :按单词后移(左向)
Ctrl + xx:在命令行首和光标之间移动
Ctrl + u :从光标处删除至命令行首
Ctrl + k :从光标处删除至命令行尾
Ctrl + w :从光标处删除至字首
Alt + d :从光标处删除至字尾
Ctrl + d :删除光标处的字符
Ctrl + h :删除光标前的字符
Ctrl + y :粘贴至光标后
Alt + c :从光标处更改为首字母大写的单词
Alt + u :从光标处更改为全部大写的单词
Alt + l :从光标处更改为全部小写的单词
Ctrl + t :交换光标处和之前的字符
Alt + t :交换光标处和之前的单词
Alt + Backspace:与 Ctrl + w 类似,分隔符有些差别
- 重新执行命令
Ctrl + r:逆向搜索命令历史
Ctrl + g:从历史搜索模式退出
Ctrl + p:历史中的上一条命令
Ctrl + n:历史中的下一条命令
Alt + .:使用上一条命令的最后一个参数
- 控制命令
Ctrl + l:清屏
Ctrl + o:执行当前命令,并选择上一条命令
Ctrl + s:阻止屏幕输出,锁定
Ctrl + q:允许屏幕输出,解锁
Ctrl + c:终止命令
Ctrl + z:挂起命令
4.3、获得帮助
- 获取帮助的能力决定了技术的能力!
- 多层次的帮助
- whatis
- command --help
- man and info
- /usr/share/doc/
- Red Hat documentation
- 其它网站和搜索
4.3.1、whatis
whatis使用数据库来显示命令的简短描述- 刚安装后不可立即使用,需要制作数据库
# Centos 7 版本以后
mandb# Centos 6 版本之前
makewhatis

4.3.2、查看命令的帮助
-
内部命令:
help COMMANDman bash

-
外部命令和软件:
COMMAND --heIp或COMMAND -h- 使用手册(manual)
man COMMAND
- 信息页
info COMMAND
- 程序自身的帮助文档
READMEINSTALLChangeLog
- 程序官方文档
- 官方站点:
Documentation
- 官方站点:
- 发行版的官方文档
-
格式说明:
[]表示可选项CAPS或<>表示变化的数据...表示一个列表x|y|z的意思是“x或y或z”-abc的意思是 -a -b -c{}表示分组
4.3.3、man命令
-
man提供命令帮助的文件,手册页存放在
/usr/share/man -
几乎每个命令都有man的“页面”
-
中文man需安装包
man-pagesman-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手册页
man [章节] keyword
-
man帮助段落说明
NAME名称及简要说明SYNOPSIS用法格式说明[]可选内容<>必选内容a | b二选一{}分组...同一内容可出现多次DESCRIPTION详细说明OPTIONS选项说明EXAMPLES示例FLES相关文件AUTHOR作者COPYRIGHT版本信息REPORTING BUGSbug信息SEE ALSO其它帮助参考
-
列出所有帮助
man -a keyword
- 搜索man手册
# 列出所有匹配的页面,使用 whatis 数据库
man -k keyword
- 相当于whatis
man -f keyword
- 打印man帮助文件的路径
man -w [章节] keyword
man命令的操作方法:使用less命令实现space,^v,^f,^F向文件尾翻屏b,^b向文件首部翻屏y or ^Y or ^P or k or ^K向文件首部翻一行q退出#跳转至第#行G回到文件首部/KEYWORD- 以
KEYWORD指定的字符串为关键字,从当前位置向文件尾部搜索;不区分字符大小写n下一个N上一个
- 以
?KEYWORD- 以KEYWORD指定的字符串为关键字,从当前位置向文件首部搜索;不区分字符大小写
n跟搜索命令同方向,下一个N跟搜索命令反方向,上一个
- 以KEYWORD指定的字符串为关键字,从当前位置向文件首部搜索;不区分字符大小写
4.3.4、info
- man常用于命令参考,GNU工具info适合通用文档参考
- 没有参数,列出所有的页面
- info页面的结构就像一个网站
- 每一页分为“节点”
- 链接节点之前
* - info命令格式:
info[命令]
- 导航info页
方向键PgUp,PgDn导航Tab键移动到下一个链接d显示主题目录Home显示主题首部Enter进入选定链接n/p/u/l进入下前/上一层/最后一个链接s 文字文本搜索q退出info

4.3.5、Linux安装提供的本地文档获取帮助
- Applications -> documentation -> help(centos7)
- System -> help(centos6)
4.3.6、命令自身提供的官方使用指南
/usr/share/doc目录- 多数安装了的软件包的子目录,包括了这些软件的相关原理说明
- 常见文档:
READMEINSTALLCHANGES - 不适合其它地方的文档的位置
- 配置文件范例
HTML/PDF/PS格式的文档- 授权书详情
相关文章:
Linux 入门基础知识(一)—— Linux的基本使用
Linux 入门基础知识 一、Linux的基本使用和配置1.1、终端1.2、消耗内存1.3、运行级别1.6、登录前欢迎语1.5、登录后欢迎语1.6、shell1.7、ps aux1.8、设置主机名1.9、whoami和who am i1.10、命令提示符 二、Linux执行命令的过程详解和命令类型2.1、命令执行2.2、hash缓存表2.3、…...
纯静态微信小程序水果商城
首页代码 <view class"container"><!-- 轮播图 --><view class"swiper-container"><swiper class"screen-swiper" indicator-dots"true" circular"true" autoplay"true" interval"300…...
操作系统-线程的实现方式和多线程模型(用户级线程 内核级线程 多线程模型的情况)和线程的状态,转换,组织,控制
文章目录 线程的实现方式和多线程模型总览线程的实现方式用户级线程内核级线程多线程模型一对一多对一多对多 小结 线程的状态,转换,组织,控制总览 线程的状态与转换线程的组织与控制 线程的实现方式和多线程模型 总览 线程的实现方式 用户级线程 程序自己通过自己设计的线程…...
计算机网络 应用层
文章目录 应用层域名系统 DNS域名系统概述互联网的域名结构域名服务器 文件传送协议FTP 概述FTP 的基本工作原理简单文件传送协议 TFTP 远程终端协议 TELNET万维网 WWW统一资源定位符 URL超文本传送协议 HTTP万维网的信息检索系统 电子邮件电子邮件概述简单邮件传送协议 SMTP邮…...
拥有你的微调大模型,零代码定制+算力免费送
2023年,ChatGPT的横空出世掀起了人工智能领域的新一轮革命。 很快大模型的潮水就越过广袤的太平洋,席卷国内科技圈和投资圈,几乎所有科技公司都在押注大模型。根据工信部赛迪研究院数据,预计2023年我国语言大模型市场规模将达到1…...
《Docker技术革命:从虚拟机到容器化,全面解析Docker的原理与应用-上篇》
文章目录 Docker为什么会出现总结 Docker的思想Docker历史总结 Docker能干嘛虚拟机技术虚拟机技术的缺点 容器化技术Docker和虚拟机技术的区别 Docker概念Docker的基本组成镜像(image)容器(container)仓科(repository)…...
C,C++,C# 的区别
C,C,C# 是三种不同的编程语言。它们有一些共同点,但也有很多区别。 C是一种过程式编程语言,被广泛用于系统级编程和嵌入式开发。它具有简单的语法和较小的标准库,适合于高效的低级编程和处理底层细节。 C是一种面向对…...
操作筛选器的 1 个应用实例:自动启用事务
前言 在数据库操作过程中,有一个概念是绕不开的,那就是事务。 事务能够确保一系列数据库操作要么全部成功提交,要么全部失败回滚,保证数据的一致性和完整性。 在 Asp.Net Core Web API 中,我们可以使用操作筛选器给…...
搭建基于Java的分布式爬虫系统
目录 前言 一、分布式爬虫系统的架构设计 二、系统搭建步骤 1. 创建爬虫项目 2. 导入相关依赖 3. 编写分布式爬虫系统的核心代码 3.1 节点管理器(Node Manager) 3.2 调度器(Scheduler) 3.3 下载器(Downloader…...
rancher证书过期问题处理
问题 起初,打开rancher ui页面打不开,telnet rancher的服务端口也不通。查看rancher 控制节点,日志显示,X509:certificate has expired or is not ye valid。证书已过期 解决 现在网上大部分的解决方案都是针对的2…...
Spring Boot 中文件上传
Spring Boot 中文件上传 一、MultipartFile二、单文件上传案例三、多文件上传案例四、Servlet 规范五、Servlet 规范实现文件上传 上传文件大家用的最多的就是 Apache Commons FileUpload,这个库使用非常广泛。Spring Boot3 版本中已经不能使用了。代替它的是 Sprin…...
2023年06月CCF-GESP编程能力等级认证Python编程一级真题解析
一、单选题(共15题,共30分) 第1题 以下不属于计算机输出设备的有()。 A:麦克风 B:音箱 C:打印机 D:显示器 答案:A 第2题 ChatGPT 是 OpenAI 研发的聊天机器人程序,它能通过理解和学习人类的语言来进行对话,还能根据聊天的上下文进行互动,完成很多工作。请你…...
unity 使用数字图片来代替数字0到9显示
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Trackracecomplete : MonoBehaviour { /// /// 数字图片 /// [SerializeField] private Sprite[] sprites; private string _Time “23:57:49”; [Ser…...
单片机如何实现延时1ms或者1us
1us //适配主频为120MHz的单片机 void Delay_us(int16_t nus) {int32_t temp; SysTick->LOAD nus*15; //120MHzSysTick->VAL0X00;SysTick->CTRL0X01;do { tempSysTick->CTRL;}while((temp&0x01)&&(!(temp&(1<<16))));SysTick->CTRL0x0…...
全国网络安全行业职业技能大赛WP
word_sercet 文档被加密 查看图片的属性 在备注可以看到解压密码 解密成功 在选项里面把隐藏的文本显示出来 可以看到ffag easy_encode 得到一个bmp二维码 使用qr research 得到的密文直接放瑞士军刀 base32解码base64解码hex解码 dir_pcap 直接搜索flag 发现flag…...
【Python函数与模块】(7)模块的分类与好处
文章目录 一、模块分类二、模块的好处 一、模块分类 Python标准模块(内置模块,标准库) 第三方模块/库(pypi.org) 自定义模块 二、模块的好处 可维护性更强 方便代码重用...
如何安全地多开Facebook/Twitter/TK/Ins等账号?
随着社交媒体的普及,人们需要在不同平台上管理多个账号。然而,如何安全地多开这些账号却是一个需要关注的问题。本文将介绍如何安全地多开Facebook、twitter、YouTube、TikTok等平台账号的方法。 重要关联因素: 1. 隐私和安全:保…...
ChatGPT学python: 用json文件传参
目录 json语法最简陋版python解析语法小结 json语法最简陋版 param.json [{"Table_name": "table1","Event_name_colum": 4,"update_colum": 9},{"Table_name": "table2","Event_name_colum": 3,&quo…...
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
目录 1 -> 引用 1.1 -> 引用概念 1.2 -> 引用特性 1.3 -> 常引用 1.4 -> 使用场景 1.5 -> 传值、传引用效率比较 1.6 -> 值和引用作为返回值类型的性能比较 1.7 -> 引用和指针的区别 2 -> 内联函数 2.1 -> 概念 2.2 -> 特性 3 -…...
已实现:vue、h5项目如何使用echarts实现雷达图、六边形图表
说实话,要说图表里,最强的应该属于echarts了,不管是接入难度上,还是样式多样性上,还有社区庞大程度上,都是首屈一指的,反观有的人习惯用chart.js了,这个无可厚非,但是如果…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
对象回调初步研究
_OBJECT_TYPE结构分析 在介绍什么是对象回调前,首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例,用_OBJECT_TYPE这个结构来解析它,0x80处就是今天要介绍的回调链表,但是先不着急,先把目光…...
