linux中叹号(!)的10个技巧
'!'
Linux 中的符号或运算符可以作为逻辑取反运算符,也可以通过改变从历史记录中获取命令,或通过修改执行之前执行的命令。以下所有命令都已在 bash Shell 中明确验证。虽然我没有验证过,但其中大多数不会在其他 shell 中有效。
- 按命令编号运行历史记录中的命令。
“
您可能不知道您可以从历史命令(已经 / 较早执行的命令)运行命令这一事实。要开始,首先通过运行 “history” 命令找到命令编号。
”
$ history
“
现在,在history的输出中,仅按照它出现的编号运行来自history的命令。假设运行出现在’history‘ 命令输出中编号为1551的命令。
”
$ !1551
“
并且,它运行在编号1551中列出的命令。这种检索已执行命令的方法非常有用,特别是在那些很长的命令的情况下。您只需要使用**!**来调用它。
”
- 将先前执行的命令作为倒数第二个命令、倒数第 7 个命令等运行。
“
你可以运行那些你之前运行过的命令,它们的运行顺序是最后一个运行命令将表示为**-1,倒数第二个为-2,倒数第七个为-7**,……。
”
“
首先运行history命令以获取上次执行命令的列表。有必要运行history命令,这样您就可以确保没有类似的命令
rm command > file
和其他命令,只是为了确保您不会意外运行任何危险的命令。然后检查第六个最后一个命令,八个最后一个命令和第十个最后一个命令。”
$ history $ !-6 $ !-8 $ !-10
“
按数字运行上次执行的命令
”
- 将我们运行的最后一个命令的参数传递给新命令,无需重新输入
“
我需要列出目录 “**/home/$USER/Binary/firefox**” 的内容。
”
$ ls /home/$USER/Binary/firefox
“
然后我意识到我应该触发 “ls -l” 以查看哪个文件在那里可执行?所以我应该再次输入整个命令!不,我不需要。我只需要将这个新命令的最后一个参数作为:
”
$ ls -l !$
“
这里
!$
将携带在最后一个命令中传递给这个新命令的参数。”
“
将上次执行命令的参数传递给新命令
”
- 如何使用 (!) 处理两个或多个参数
“
假设我在桌面上创建了一个文本文件1.txt。
”
$ touch /home/avi/Desktop/1.txt
“
然后使用cp命令在任一侧使用完整路径将其复制到 “**/home/avi/Downloads**”。
”
$ cp /home/avi/Desktop/1.txt /home/avi/downloads
“
现在我们已经使用cp命令传递了两个参数。第一个是 “**/home/avi/Desktop/1.txt”,第二个是 “/home/avi/Downloads**”,让我们以不同的方式处理它们,只需执行
echo [arguments]
以不同方式打印两个参数。”
$ echo "1st Argument is : !^" $ echo "2nd Argument is : !cp:2"
“
注意第一个参数可以打印为
“!^”
,其余参数可以通过执行“![Name_of_Command]:[Number_of_argument]”
.”
“
在上面的例子中,第一个命令是 “cp”,第二个参数需要打印。因此
“!cp:2”
,如果任何命令说xyz使用 5 个参数运行并且您需要获得第 4 个参数,您可以使用“!xyz:4”
,并根据需要使用它。所有参数都可以通过 访问“!*”
。”
“
处理两个或更多参数
”
- 根据关键字执行最后一条命令我们可以根据关键字执行上次执行的命令。我们可以这样理解:
$ ls /home > /dev/null [Command 1] $ ls -l /home/avi/Desktop > /dev/null [Command 2] $ ls -la /home/avi/Downloads > /dev/null [Command 3] $ ls -lA /usr/bin > /dev/null [Command 4]
“
在这里,我们使用了相同的命令**(ls),但使用了不同的开关和不同的文件夹。此外,我们已将每个命令的输出发送到 “/dev/null**”,因为我们不会处理命令的输出,控制台也保持干净。
”
“
现在根据关键字执行上次运行命令。
”
$ ! ls [Command 1] $ ! ls -l [Command 2] $ ! ls -la [Command 3] $ ! ls -lA [Command 4]
“
检查输出,您会惊讶地发现您只是通过
ls
关键字运行已执行的命令。”
“
根据关键字运行命令
”
-
神奇的
!!
“
您可以使用
(!!)
.它将在当前命令中使用 alter/tweak 调用最后一个运行命令。给你看场景”
“
最后一天我运行了一个单行脚本来获取我的私有 IP,所以我运行,
”
$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/
“
然后我突然发现我需要将上面脚本的输出重定向到一个文件ip.txt,那我该怎么办?我应该再次重新输入整个命令并将输出重定向到文件吗?那么一个简单的解决方案是使用
UP
导航键并添加'> ip.txt'
将输出重定向到文件。”
$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/ > ip.txt
“
UP
键可以快速找到历史命令。现在考虑以下条件,下次我在单行脚本下运行时。”
$ ifconfig | grep "inet addr:" | awk '{print $2}' | grep -v '127.0.0.1' | cut -f2 -d:
“
一旦我运行脚本,bash 提示符就会返回一个错误消息
“bash: ifconfig: command not found”
,我不难猜测我以用户身份运行此命令,而它应该以 root 身份运行。”
“
那么有什么解决办法呢?很难登录到 root 然后再次键入整个命令!此外,上一个示例中的(向上导航键)在这里也没有出现。所以?我们需要
“!!”
不带引号调用,这将调用该用户的最后一个命令。”
$ su -c !! root
“
这里su是切换用户,也就是 root,
-c
以用户身份运行特定的命令,最重要的部分!!
将被命令替换,最后运行的命令将在这里替换。是的!您需要提供 root 密码。”
!!
主要在以下场景中使用,
“
当我以普通用户身份运行apt-get命令时,我通常会收到一个错误,说您无权执行。
”
$ apt-get upgrade && apt-get dist-upgrade
“
Opps 错误… 不要担心执行以下命令以使其成功..
”
$ su -c !! $ service apache2 start or $ /etc/init.d/apache2 start or $ systemctl start apache2
“
OOPS 用户无权执行此类任务,所以我运行..
”
$ su -c 'service apache2 start' or $ su -c '/etc/init.d/apache2 start' or $ su -c 'systemctl start apache2'
- 运行影响除 ![FILE_NAME] 之外的所有文件的命令
“
该
!
(逻辑 NOT)可以用来运行所有命令的文件 / 文件扩展名,除了后面'!'
。”
A.**从目录中删除所有文件,但名称为**2.txt的文件除外。
$ rm !(2.txt)
B.从文件夹中删除所有文件类型,除了扩展名为 “pdf”的文件类型。
$ $ rm !(*.pdf)
- 检查一个目录(比如 / home/avi/Tecmint)是否存在?printf 如果所述目录存在与否。
“
在这里,我们将使用
'! -d'
来验证目录是否存在,然后使用逻辑 AND 运算符(&&)
来打印该目录不存在,然后使用逻辑 OR 运算符(||)
来打印目录是否存在。”
“
逻辑是,当输出
[ ! -d /home/rumenz ]
为0 时,它将执行超出 Logical 的内容,否则它将转到 Logical OR(||)
并执行超出 LogicalOR 的内容。”
$ [ ! -d /home/rumenz ] && printf '\nno such /home/rumenz directory exist\n' || printf '\n/home/rumenz directory exist\n'
- 检查目录是否存在?如果没有退出命令。与上述条件类似,但这里如果所需目录不存在,它将退出命令。
$ [ ! -d /home/rumenz ] && exit
- 如果它不存在,则在您的主目录中创建一个目录(比如 rumenz)。脚本语言中的一种通用实现,如果所需目录不存在,它将创建一个。
[ ! -d /home/rumenz ] && mkdir /home/rumenz
以上是linux中叹号(!)的10个技巧的详细内容。更多信息请关注PHP中文网其他相关文章!

Linux和Windows在处理设备驱动程序上的差异主要体现在驱动管理的灵活性和开发环境上。1.Linux采用模块化设计,驱动可以动态加载和卸载,开发者需深入理解内核机制。2.Windows依赖微软生态,驱动需通过WDK开发并签名认证,开发相对复杂但保证了系统的稳定性和安全性。

Linux和Windows的安全模型各有优势。Linux提供灵活性和可定制性,通过用户权限、文件系统权限和SELinux/AppArmor实现安全。Windows则注重用户友好性,依赖WindowsDefender、UAC、防火墙和BitLocker保障安全。

Linux和Windows在硬件兼容性上不同:Windows有广泛的驱动程序支持,Linux依赖社区和厂商。解决Linux兼容性问题可通过手动编译驱动,如克隆RTL8188EU驱动仓库、编译和安装;Windows用户需管理驱动程序以优化性能。

Linux和Windows在虚拟化支持上的主要区别在于:1)Linux提供KVM和Xen,性能和灵活性突出,适合高定制环境;2)Windows通过Hyper-V支持虚拟化,界面友好,与Microsoft生态系统紧密集成,适合依赖Microsoft软件的企业。

Linux系统管理员的主要任务包括系统监控与性能调优、用户管理、软件包管理、安全管理与备份、故障排查与解决、性能优化与最佳实践。1.使用top、htop等工具监控系统性能,并进行调优。2.通过useradd等命令管理用户账户和权限。3.利用apt、yum管理软件包,确保系统更新和安全。4.配置防火墙、监控日志、进行数据备份以确保系统安全。5.通过日志分析和工具使用进行故障排查和解决。6.优化内核参数和应用配置,遵循最佳实践提升系统性能和稳定性。

学习Linux并不难。1.Linux是一个开源操作系统,基于Unix,广泛应用于服务器、嵌入式系统和个人电脑。2.理解文件系统和权限管理是关键,文件系统是层次化的,权限包括读、写和执行。3.包管理系统如apt和dnf使得软件管理方便。4.进程管理通过ps和top命令实现。5.从基本命令如mkdir、cd、touch和nano开始学习,再尝试高级用法如shell脚本和文本处理。6.常见错误如权限问题可以通过sudo和chmod解决。7.性能优化建议包括使用htop监控资源、清理不必要文件和使用sy

Linux管理员的平均年薪在美国为75,000至95,000美元,欧洲为40,000至60,000欧元。提升薪资可以通过:1.持续学习新技术,如云计算和容器技术;2.积累项目经验并建立Portfolio;3.建立职业网络,拓展人脉。

Linux的主要用途包括:1.服务器操作系统,2.嵌入式系统,3.桌面操作系统,4.开发和测试环境。Linux在这些领域表现出色,提供了稳定性、安全性和高效的开发工具。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

WebStorm Mac版
好用的JavaScript开发工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

记事本++7.3.1
好用且免费的代码编辑器