当前位置: 首页 > article >正文

Linux(命令行扩展+命令行历史 大白话+图片)

后面也会持续更新,学到新东西会在其中补充。

建议按顺序食用,欢迎批评或者交流!

缺什么东西欢迎评论!我都会及时修改的!

在这里真的很感谢这位老师的教学视频让迷茫的我找到了很好的学习视频

王晓春老师的个人空间-王晓春老师个人主页-哔哩哔哩视频

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

举个栗子:

[root@RockyLinux9 ~]#echo $PATH
/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
[root@RockyLinux9 ~]#echo "$PATH"
/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
[root@RockyLinux9 ~]#echo '$PATH'
$PATH
[root@RockyLinux9 ~]#echo `$PATH`
-bash: /root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin: No such file or directory

可见'' 和 "" 处理变量的方式是不同的

不加$ echo认不出来PATH是变量

[root@RockyLinux9 ~]#echo PATH
PATH

 如果想把$也打印出来 

[root@RockyLinux9 ~]#echo \$PATH
$PATH

\ 是转义符 

功能是把特殊符号的本身它的原有含义给它改变了转换了它的原有含义

 打印\

直接echo不行 

[root@RockyLinux9 ~]#echo \
>

得转义

[root@RockyLinux9 ~]#echo \\
\

单引号可以

[root@RockyLinux9 ~]#echo '\'
\

双引号不行

[root@RockyLinux9 ~]#echo "\"
>

双引号单引号区别

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

"" '' ``三者区别

$hostname

[root@RockyLinux9 ~]#echo "My hostname is $HOSTNAME"
My hostname is RockyLinux9
[root@RockyLinux9 ~]#echo 'My hostname is $HOSTNAME'
My hostname is $HOSTNAME

hostname

[root@RockyLinux9 ~]#echo "My hostname is 'hostname'"
My hostname is 'hostname'
[root@RockyLinux9 ~]#echo "My hostname is `hostname`"
My hostname is RockyLinux9

变量名不能被执行 ``里面必须放命令

[root@RockyLinux9 ~]#echo "My hostname is `$HOSTNAME`"
-bash: RockyLinux9: command not found
My hostname is

双引号是把echo当成字符串

[root@RockyLinux9 ~]#echo "echo $HOSTNAME"
echo RockyLinux9
[root@RockyLinux9 ~]#echo 'echo $HOSTNAME'
echo $HOSTNAME
[root@RockyLinux9 ~]#echo `echo $HOSTNAME`
RockyLinux9

结论 :

单引号:六亲不认 来了什么都是字符串,变量和命令都不识别。

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

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

反向单引号里面必须是命令 可以理解成执行一条命令 echo 啥的

双引号和单引号里面放的可以是普通符号或者变量

 $() == ``

[root@RockyLinux9 ~]#echo `who am i`
root pts/1 2024-11-18 19:11 (192.168.111.1)
[root@RockyLinux9 ~]#echo $(whoami)
root
[root@RockyLinux9 ~]#echo "This system's name is $(hostname)"
This system's name is RockyLinux9

举几个常用的命令

显示当前时间

[root@RockyLinux9 ~]#date +%F
2024-11-18

创建文件时间

[root@RockyLinux9 data]#touch `date +%F`.txt
[root@RockyLinux9 data]#ll
total 0
-rw-r--r--. 1 root root 0 Nov 18 21:53 2024-11-18.txt

[root@RockyLinux9 data]#touch $(date +%F).txt
[root@RockyLinux9 data]#ll
total 0
-rw-r--r--. 1 root root 0 Nov 18 21:55 2024-11-18.txt

创建主机名和创建时间文件

[root@RockyLinux9 data]#touch `hostname`-`date +%F`.txt
[root@RockyLinux9 data]#ll
total 0
-rw-r--r--. 1 root root 0 Nov 18 21:55 2024-11-18.txt
-rw-r--r--. 1 root root 0 Nov 18 22:02 RockyLinux9-2024-11-18.txt

将我们创建的文件打印出来

[root@RockyLinux9 data]#touch `date +%F`.txt
[root@RockyLinux9 data]#ll
total 0
-rw-r--r--. 1 root root 0 Nov 18 22:22 2024-11-18.txt

[root@RockyLinux9 data]#ll $(echo $(date +%F).txt)
-rw-r--r--. 1 root root 0 Nov 18 22:22 2024-11-18.txt

括号扩展{}

[root@RockyLinux9 data]#echo file{1,3,5}
file1 file3 file5
[root@RockyLinux9 data]#echo file{1..10}
file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
[root@RockyLinux9 data]#echo {20..10}
20 19 18 17 16 15 14 13 12 11 10
[root@RockyLinux9 data]#echo {20..10..2}
20 18 16 14 12 10
[root@RockyLinux9 data]#echo {0000..10..2}
0000 0002 0004 0006 0008 0010
[root@RockyLinux9 data]#echo {0001..10..2}
0001 0003 0005 0007 0009
[root@RockyLinux9 data]#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

倒序输出

[root@RockyLinux9 data]#echo {a..Z}
a ` _ ^ ]  [ Z

 乘法分配律

[root@RockyLinux9 data]#echo file{1..10}.{txt,log}
file1.txt file1.log file2.txt file2.log file3.txt file3.log file4.txt file4.log file5.txt file5.log file6.txt file6.log file7.txt file7.log file8.txt file8.log file9.txt file9.log file10.txt file10.log

tab键补全

[root@RockyLinux9 data]#ll
total 0
-rw-r--r--. 1 root root 0 Nov 18 22:22 2024-11-18.txt
-rw-r--r--. 1 root root 0 Nov 19 09:15 RockyLinux9+2024-11-19.txt
[root@RockyLinux9 data]#ls -l R

按tab补全

[root@RockyLinux9 data]#ls -l RockyLinux9+2024-11-19.txt
-rw-r--r--. 1 root root 0 Nov 19 09:15 RockyLinux9+2024-11-19.txt

后面直接嵌入子命令,由一个命令套另一个子命令实现

子命令里面套子命令

[root@RockyLinux9 data]#nmcli
agent       device      help        networking
connection  general     monitor     radio
[root@RockyLinux9 data]#nmcli connection
add      delete   edit     help     load     modify   reload   up
clone    down     export   import   migrate  monitor  show

要求:必须安装这个软件

[root@RockyLinux9 data]#rpm -qa bash*
bash-completion-2.11-5.el9.noarch

命令行历史

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

当用户正常退出时,会将内存中的命令历史存放对应历史文件中,默认是~/.bash_history

~代表每个用户都有自己的历史文件

登录shell时,会读取命令历史文件中记录下的命令加载到内存中

登录进shell后新执行的命令只会记录在内存缓存中,这些命令会用户正常退出时“追加”至命令历史文件中

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

.bash_history是存在磁盘上history是内存中的

[root@RockyLinux9 ~]#cat .bash_history
vi /etc/sys/sshd_config
...

执行历史命令

  206  ll
  ...
[root@RockyLinux9 ~]#!206
ll
total 4
-rw-------. 1 root root 1177 Nov 14 00:37 anaconda-ks.cfg

执行倒数历史命令 

[root@RockyLinux9 ~]#!-5
echo $HISTSIZE
1000

记录历史的最大值

[root@RockyLinux9 ~]#echo $HISTSIZE
1000

配置历史最大值的文件

[root@RockyLinux9 ~]#vi /etc/profile

 -c 清除历史

密码显示到历史中,可能会被别人看到!不安全了

注意这里清理的是内存里的磁盘文件并没有被清理!

[root@RockyLinux9 ~]#history -c
[root@RockyLinux9 ~]#history
    1  history

彻底删除真正的历史记录

可以干坏事了(bushi

[root@RockyLinux9 ~]#rm -f .bash_history
[root@RockyLinux9 ~]#history -c
[root@RockyLinux9 ~]#exit

退出登录以后

[root@RockyLinux9 ~]#history
    1  exit
    2  history
[root@RockyLinux9 ~]#cat .bash_history
exit

假冒历史-s

[root@RockyLinux9 ~]#history
    1  exit
    2  history
[root@RockyLinux9 ~]#history -s rm -rf /*
[root@RockyLinux9 ~]#history
    1  exit
    2  history
    3  cat .bash_history
    4  rm -rf /afs /bin /boot /data /dev /etc /home /lib /lib64 /media /mnt /opt /proc /root /run /sbin /srv /sys /tmp /usr /var
    5  history

历史可相信,也不可相信。

 修改历史格式

[root@RockyLinux9 ~]#echo $HISTTIMEFORMAT

 %F 年月日 %T 时分秒

[root@RockyLinux9 ~]#vi .bashrc
export HISTTIMEFORMAT="%F %T "

[root@RockyLinux9 ~]#. .bashrc
[root@RockyLinux9 ~]#history
    1  2024-11-19 12:23:15 exit
    2  2024-11-19 12:23:17 history

还可以加上用户信息

export HISTTIMEFORMAT="%F %T `whoami` "
[root@RockyLinux9 ~]#export HISTTIMEFORMAT="%F %T `whoami` "
[root@RockyLinux9 ~]#history
    1  2024-11-19 16:57:03 root exit
    2  2024-11-19 16:57:03 root ls -l

永久修改历史格式

[root@RockyLinux9 ~]#vi .bash_profile

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
export HISTTIMEFORMAT="%F %T `whoami` "

!d 找到 第一个和d命令相似

[root@RockyLinux9 ~]#date
Tue Nov 19 05:20:06 PM CST 2024
[root@RockyLinux9 ~]#!d
date
Tue Nov 19 05:30:09 PM CST 2024

!?at 包含at

[root@RockyLinux9 ~]#!?at
date
Tue Nov 19 05:32:06 PM CST 2024

!*

[root@RockyLinux9 ~]#cat /etc/redhat-release /etc/hosts
Rocky Linux release 9.4 (Blue Onyx)
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@RockyLinux9 ~]#ll !*
ll /etc/redhat-release /etc/hosts
-rw-r--r--. 1 root root 158 Jun 23  2020 /etc/hosts
lrwxrwxrwx. 1 root root  13 May  1  2024 /etc/redhat-release -> rocky-release

!$

[root@RockyLinux9 ~]#cat /etc/redhat-release /etc/hosts
Rocky Linux release 9.4 (Blue Onyx)
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@RockyLinux9 ~]#ll !$
ll /etc/hosts
-rw-r--r--. 1 root root 158 Jun 23  2020 /etc/hosts

bash的快捷键

ctrl + s 锁定键盘

ctrl + q 解锁键盘

ctrl + l 清屏

Alt + r 删除整行

ctrl + u整行前面

ctrl + k整行后面

ctrl + a命令移到行首

ctrl + e命令移到行尾

参考文献

1SHELL中各种特殊符号用法和区别详解_哔哩哔哩_bilibili

2命令历史和Linux各种快捷键使用技巧_哔哩哔哩_bilibili

总结

所有命令都需要反复敲来实验来记忆,本人基本上是个人理解加参考其他大佬的肯定有很多问题欢迎指正,我会及时修改。


http://www.kler.cn/a/401871.html

相关文章:

  • [JavaWeb]微头条项目
  • 青少年编程与数学 02-003 Go语言网络编程 21课题、Go语言WebSocket编程
  • Python世界:力扣题110,平衡二叉树判别,easy
  • 1+X应急响应(网络)网络流量分析技术:
  • 跨平台WPF框架Avalonia教程 一
  • Isaac Sim+SKRL机器人并行强化学习
  • 查询我正在学习的课程
  • C++:指针和引用
  • 速盾:cdn影响获取ip吗?
  • 21-JavaScript 解构赋值简介
  • Android:任意层级树形控件(有效果图和Demo示例)
  • 项目-摄像
  • python学习笔记1
  • 基于深度学习的文本信息提取方法研究(pytorch python textcnn框架)
  • 机器学习笔记 // 度量ML预测的准确率
  • Marin说PCB之电源完整性之电源网络的PDN仿真CST---04
  • 如何确保爬取的数据准确性和完整性?
  • 完整http服务器
  • 单片机智能家居火灾环境安全检测-分享
  • Modbus TCP转Modbus ASCII解决方案
  • 2、PyTorch张量的运算API(上)
  • 经验笔记:从生成 SSH 密钥到成功连接测试(以Gitee为例)
  • 微软Office 2021 24年11月授权版
  • c语言金典100题“从入门到放弃”10-15
  • Dubbo自定义扩展注册中心
  • Jav项目实战II基于微信小程序的助农扶贫的设计与实现(开发文档+数据库+源码)