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