Linux 入门基础知识(一)—— Linux的基本使用

Linux 入门基础知识

一、Linux的基本使用和配置

1.1、终端

bash 复制代码
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/N
    • pts是伪文件系统,所以称为伪终端
    • 在其他命令执行结果中,有显示TTY这列信息,就是指终端名称信息,其对应的记录是进一步的详细说明。

1、只有一台主机使用时:

2、使用有远程登录时:

  • 远程工具查看,可以看到产生一个新的终端 pts/2 ,是通过远程工具xshell连接下产生的:

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

1.2、消耗内存

bash 复制代码
free	#查看当前系统消耗的内存数

1.3、运行级别

bash 复制代码
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系统时,该文件将被用来显示欢迎信息。
  • 这个需要使用字符系统登录看,用远程工具看不到。
bash 复制代码
cat /etc/issue
  • 以下是 /etc/issue文件的一些常见选项说明:
bash 复制代码
\n:换行符,用于在欢迎信息中添加新行。
\l:显示本地终端设备名称。
\m:显示计算机的硬件架构。
\s:显示操作系统的名称。
\r:显示内核的版本号。
\t:显示当前时间。
\u:显示当前用户名。
\v:显示操作系统的发行版本号。
\\:显示反斜杠字符。

其他自定义文本:可以在文件中添加其他自定义文本或标记。
  • 使用这些选项,你可以根据需要定制并个性化系统登录时的欢迎信息。例如,可以使用\s\v选项来显示操作系统的名称和发行版本号,\l 选项来显示本地终端设备名称,以及\t选项来显示当前时间等。

1.5、登录后欢迎语

  • /etc/motd文件用来显示Linux系统的欢迎信息。当用户第一次登录到Linux系统时,该文件将被用来显示欢迎信息。
bash 复制代码
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

bash 复制代码
 echo $SHELL
  • 查看系统支持的shell
bash 复制代码
cat /etc/shells

1.7、ps aux

  • ps aux :给出当前系统中正在运行的进程的详细信息,用于查看当前系统中运行的进程,以及它们所占用的资源和状态信息。可以通过对输出进行筛选和排序,进一步了解进程的性能和行为,以及对系统资源的使用情况进行监控和分析。
    • 下面对 ps aux 的输出进行详细讲解:
bash 复制代码
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、设置主机名

bash 复制代码
hostname NAME	# 临时性的更改,不是永久性的更改
  • 注意:主机名不要使用下划线
  • 要想永久保存需要写进文件里:/etc/hostname
bash 复制代码
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、命令提示符

  • 普通用户:$符号

  • 管理员用户:#符号

bash 复制代码
sudo -i		# 切换成管理员
  • 提示符也可以更改:PS1

    • 在Linux中,PS1(Prompt String 1)是一个环境变量,用来定义shell命令提示符的显示内容和格式。当在终端中输入命令时,PS1定义的就是那个通常显示在光标左侧的提示符。 PS1可以包含纯文本和特殊的转义序列。转义序列以反斜杠开始,用来插入例如日期、时间、用户名、当前目录等动态信息。
    • 查看 PS1 当前配置:echo $PS1
  • /etc/.bashrc 中找 PS1变量的定义,如果没有,可以手动加上。

bash 复制代码
export PS1="\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$"
  • 临时修改(重新打开恢复):

  • PS1 纯文本和特殊的转义序列

bash 复制代码
#下面简单说说上文环境下默认的特殊符号所代表的意义:
\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~37B为背景色,编号40~47
    • 可通过 \e[0m 关闭颜色输出;特别的,当B1时,将显示加亮加粗的文字,详细请看下面的颜色表与代码表。
前景 背景 颜色
30 40 黑色
31 41 红色
32 42 绿色
33 43 黃色
34 44 蓝色
35 45 紫紅色
36 46 青蓝色
37 47 白色
代码 意义
0 OFF
1 高亮显示
4 underline
5 闪烁
7 反白显示
8 不可见

二、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缓存表可大大提高命令的调用速率。
bash 复制代码
hash	#  查看曾经执行过的外部命令 hits(命中)代表执行了几次该命令
  • hash命令常见用法
    • hash 显示hash缓存
    • hash -I 显示hash缓存,可作为输入使用
    • hash -p path name 将命令全路径path起别名为name
    • hash -t name 打印缓存中name的路径
    • hash -d name 清除name缓存
    • hash -r 清除缓存

2.3、内部命令

bash 复制代码
help	# 显示所有内部命令
enable	# 显示所有内部命令


  • enable管理内部命令
    • enable cmd 启动内部命令
    • enable -n cmd 禁用内部命令(临时禁用)
    • enable -n 查看所有禁用的内部命令

2.4、外部命令的路径

  • which cmd 查看外部命令的路径
  • whereis cmd 显示出外部命令的路径以及该命令对应的帮助文档的路径

2.5、.(点)命令

  • "."点命令是shell的一个内部命令,它从指定的shell 文件中读入所有命令语句并在当前进程中执行(将配置文件生效)
  • source 等价

2.6、命令别名

  • 对于经常执行的较长的命令,可以将其定义成较短的别名,以方便执行
  • 定义别名的时候,不要和本身已经存在的内部命令和外部命令冲突,别名的优先级高于内部命令
bash 复制代码
alias	# 显示当前shel进程所有可用的命令别名
alias NAME='VALUE'	# 定义别名NAME,其相当于执行命令VALUE,临时失效
  • 永久写入:

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

  • 如果想永久有效,要定义在配置文件中

    • 仅对当前用户:~/.bashrd
    • 对所有用户有效:/etc/bashrc
bash 复制代码
echo "alias free='free -h'" >> .bashrc 	# 永久生效
. .bashrc 			# 重新运行配置文件
  • 撤消别名:unalias
bash 复制代码
unalias [-a] name [name...]
unalias -a		# 取消所有别名,临时取消
  • 当别名与内部或者外部命令重名时,又想执行命令时,可以使用\,在命令前加\,如 \enable
  • 也可以使用单引号,如'enable',如下详细:
bash 复制代码
\ALIASNAME
"ALIASNAME"
'ALIASNAME'
command ALIASNAME
/path/command	# 加上路径,只适合外部命令

三、命令格式详解和基本命令介绍

3.1、命令格式

  • 命令格式:COMMAND [OPTIONS...] [ARGUMENTS...]

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

    • 短选项:UNIX风格选项,-c 例如:-l-h
    • 长选项:GNU风格选项,-word 例如:-all--human
    • BSD风格选项:一个字母,例如:a
  • 参数:命令的作用对象,比如:文件名,用户名等

  • 注意:

    • 多个选项以及多参数和命令之间使用空白字符分隔
    • 取消和结束命令执行:Ctrl+cCtrl+d
    • 多个命令可以用";"符号分开
    • 一个命令可以用\ 分成多行

3.2、常见命令

  • bc 计算器


3.2.1、查看硬件信息

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

3.2.1.2、查看内存大小
bash 复制代码
free
bash 复制代码
cat /proc/meminfo
3.2.1.3、查看硬盘和分区情况
bash 复制代码
lsblk
bash 复制代码
cat /proc/partitions

3.2.2、查看系统版本信息

3.2.2.1、查看内核版本
bash 复制代码
uname -r
3.2.2.2、查看操作系统发行版本
bash 复制代码
cat /etc/os-release

3.2.3、日期和时间

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


bash 复制代码
clock,hwclock:显示硬件时钟
-s,--hctosys	以硬件时钟为准,校正系统时钟
-w,--systohc	以系统时钟为准,校正硬件时钟
bash 复制代码
/etc/localtime	# 时区
ll	/etc/localtime		# 查看时区 或者cat /etc/localtime
bash 复制代码
timedatectl list-timezones		# 列出现有的时区列表
bash 复制代码
timedatectl set-timezone Asia/Shanghai		# 修改时区
bash 复制代码
cal -y		# 显示整年的日历
bash 复制代码
cal		# 显示当前月份的日历
bash 复制代码
cal 月 年	# 指定年月的日历

3.2.4、关机和重启

  • 关机:

    • halt
    • poweroff
  • 重启:

    • reboot
    • -f:强制,不调用shutdown
    • -p:切断电源
  • 关机或重启:shutdown

    • shutdown [OPTION]... [TIME] [MESSAGE]
    • -r:reboot
    • -h:halt
    • -c:cancel
    • TIME:无指定,默认相当于+1(CentOS7)
      • now:立刻,相当于+0
      • +#:相对时间表示法,几分钟之后;例如+3
      • hh: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]
bash 复制代码
screen -S test		# 用户A 创建一个会话,名字叫 test
bash 复制代码
 screen -ls		# 用户B 查看会话
bash 复制代码
screen -x test		# 用户B 加入一个名字叫 test 的会话
  • 左侧屏幕为用户B ,右侧屏幕为用户A用户B 可以远程查看到用户A 的操作界面,用户A 也可以远程查看到用户B 的操作界面,两边的屏幕同步了
3.2.7.2、tmux
  • Tmux是一个终端复用器,类似screen,但是更易用,也更强大
  • Tmux就是会话与窗口的"解绑"工具,将它们彻底分离,功能如下:
    • 它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
    • 它可以让新窗口"接入"已经存在的会话。
    • 它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
    • 它还支持窗口任意的垂直和水平拆分。
bash 复制代码
tmux	# 启动
exit	# 退出
  • mux窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是ctrI+b,即先按下ctrI+b,快捷键才会生效。帮助命令的快捷键是ctrI+b? 然后,按下q键,就可以退出帮助
  • 新建会话
    • 第一个启动的Tmux窗口,编号是0,第二个窗口的编号是1,以此类推。这些窗口对应的会话,就是0号会话、1号会话。使用编号区分会话,不太直观,更好的方法是为会话起名。下面命令新建一个指定名称的会话。
bash 复制代码
tmux new -s <session-name>
  • tmux lsCtrl+b,s,可以查看当前所有的Tmux会话
bash 复制代码
tmux ls
tmux list-session
  • 分离会话
    • 在Tmux窗口中,按下Ctrl+b d或者输入tmux detach命令,就会将当前会话与窗口分离。
bash 复制代码
tmux detach
  • 接入会话
    • tmux attach 命令用于重新接入某个已存在的会话。
bash 复制代码
tmux attach -t <session-name>
  • 杀死会话
    • tmux kill-session命令用于杀死某个会话
bash 复制代码
tmux kill-session -t <session-name>
  • 切换会话
    • tmux switch命令用于切换会话
bash 复制代码
tmux switch -t <session-name>
  • 可以将窗口分成多个窗口(pane),每个窗口运行不同的命令
  • 上下分窗口
bash 复制代码
tmux split-window
ctrl+b,"
  • 左右分窗口
bash 复制代码
tmux split-window-h
ctrl+b,%
  • 切换窗口
    • tmux select-window 命令用来切换窗口
    • 切换到指定编号的窗口:tmux select-window -t <window-number>
    • 切换到指定名称的窗口:tmux select-window -t <window-name>
  • 窗口快捷键
bash 复制代码
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会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开,并在最后加上换行号
  • 语法:
bash 复制代码
echo [-neE][字符串]
  • 选项:

    • -E (默认)不支持 \ 解释功能
    • -n 不自动换行
    • -e 启用 \ 字符的解释功能
  • 显示变量

bash 复制代码
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)

3.2.9、字符集和编码

bash 复制代码
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、命令行扩展

  • 把一个命令的输出打印给另一个命令的参数
bash 复制代码
$(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 展开历史参数成一行,附加在历史列表后(加入历史,并不执行)
bash 复制代码
history [-c] [-d offset] [n]
history -anrw [filename]
history -ps arg [arg...]
  • 命令历史相关环境变量
    • HISTSIZE 命令历史记录的条数
    • HISTFILE 指定历史文件,默认为~/.bash_history
    • HISTFILES1ZE 命令历史文件记录历史的条数
    • HISTIGNORE="str1:str2*:..." 忽略str1命令,str2开头的历史
    • HISTCONTROL 控制命令历史的记录方式
      • ignoredups 是默认值,可忽略重复的命令,连续且相同为"重复"
      • ignorespace忽略所有以空白开头的命令
      • ignoreboth相当于ignoredupsignorespace的组合
      • erasedups 删除重复命令
bash 复制代码
HISTTIMEFORMAT="%F %T `whoami` "		# 显示时间和用户
bash 复制代码
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、调用命令行历史

bash 复制代码
#重复前一个命令方法
重复前一个命令使用上方向键,并回车执行
按  !! 并回车执行
输入 !-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的快捷键

  • 编辑命令
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 类似,分隔符有些差别
  • 重新执行命令
bash 复制代码
Ctrl + r:逆向搜索命令历史
Ctrl + g:从历史搜索模式退出
Ctrl + p:历史中的上一条命令
Ctrl + n:历史中的下一条命令
Alt + .:使用上一条命令的最后一个参数
  • 控制命令
bash 复制代码
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 使用数据库来显示命令的简短描述
  • 刚安装后不可立即使用,需要制作数据库
bash 复制代码
# Centos 7 版本以后
mandb

# Centos 6 版本之前
makewhatis

4.3.2、查看命令的帮助

  • 内部命令:

    • help COMMAND
    • man bash
  • 外部命令和软件:

    • COMMAND --heIpCOMMAND -h
    • 使用手册(manual)
      • man COMMAND
    • 信息页
      • info COMMAND
    • 程序自身的帮助文档
      • README
      • INSTALL
      • ChangeLog
    • 程序官方文档
      • 官方站点:Documentation
    • 发行版的官方文档
    • Google
  • 格式说明:

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

4.3.3、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命令的配置文件:

bash 复制代码
# Centos 6 之前版man的配置文件
/etc/man.config
# Centos 7 之后版 man的配置文件
/etc/man_db.conf
# ubuntu man 的配置文件
/etc/manpath.config
  • 格式:
bash 复制代码
MANPATH /PATH/TO/SOMEWHERE	# 指明man文件搜索位置
  • 也可以指定位置下搜索COMMAND命令的手册页并显示
bash 复制代码
man -M /PATH/TO/SOMEWHERE COMMAND
  • 查看man手册页
bash 复制代码
man [章节] keyword
  • man帮助段落说明

    • NAME 名称及简要说明
    • SYNOPSIS 用法格式说明
    • [] 可选内容
    • <> 必选内容
    • a | b 二选一
    • {} 分组
    • ... 同一内容可出现多次
    • DESCRIPTION 详细说明
    • OPTIONS 选项说明
    • EXAMPLES 示例
    • FLES 相关文件
    • AUTHOR 作者
    • COPYRIGHT 版本信息
    • REPORTING BUGS bug信息
    • SEE ALSO 其它帮助参考
  • 列出所有帮助

bash 复制代码
man -a keyword
  • 搜索man手册
bash 复制代码
# 列出所有匹配的页面,使用 whatis 数据库
man -k keyword
  • 相当于whatis
bash 复制代码
man -f keyword
  • 打印man帮助文件的路径
bash 复制代码
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 跟搜索命令反方向,上一个

4.3.4、info

  • man常用于命令参考,GNU工具info适合通用文档参考
  • 没有参数,列出所有的页面
  • info页面的结构就像一个网站
  • 每一页分为"节点"
  • 链接节点之前 *
  • info命令格式:
bash 复制代码
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 目录
  • 多数安装了的软件包的子目录,包括了这些软件的相关原理说明
  • 常见文档:README INSTALL CHANGES
  • 不适合其它地方的文档的位置
  • 配置文件范例
  • HTML/PDF/PS 格式的文档
  • 授权书详情
相关推荐
fnd_LN几秒前
Linux文件目录 --- mkdir命令,创建目录,多级目录,设置目录权限
linux·运维·服务器
会飞的土拨鼠呀11 分钟前
Flannel是什么,如何安装Flannel
运维·云原生·kubernetes
木与子不厌12 分钟前
微服务自定义过滤器
运维·数据库·微服务
达帮主18 分钟前
7.C语言 宏(Macro) 宏定义,宏函数
linux·c语言·算法
行思理30 分钟前
Linux 下SVN新手操作手册
linux·运维·svn
初学者丶一起加油42 分钟前
C语言基础:指针(数组指针与指针数组)
linux·c语言·开发语言·数据结构·c++·算法·visual studio
ai产品老杨1 小时前
报警推送消息升级的名厨亮灶开源了。
vue.js·人工智能·安全·开源·音视频
沛沛老爹1 小时前
CI/CD是什么?
运维·git·ci/cd
一只搬砖的猹1 小时前
cJson系列——常用cJson库函数
linux·前端·javascript·python·物联网·mysql·json
IPdodo全球网络服务2 小时前
如何通过TikTok引流到私域流量池
运维·服务器·网络