在不同的shell中,使用’!’符号的大多数Linux命令用法可能会有所不同。虽然我提供的示例通常在bash shell中使用,但其他一些Linux shell可能具有不同的实现,或者可能根本不支持某些对’!’符号的使用。
让我们深入了解Linux命令中’!’符号的令人惊奇和神秘的用法。
1、使用命令编号从历史记录中运行命令
一个有用的提示是,你可以从之前执行过的命令中找到历史命令并再次运行。首先,通过运行’history’命令找到命令的编号。
linuxmi@linuxmi:~/www.linuxmi.com$ history
在Linux中查找最近执行的命令
要通过命令编号从历史记录中运行命令,可以使用’!’符号后跟命令编号,如下所示。
$ !58
按命令编号运行命令
当你执行上述命令时,它将运行历史记录中第58行的命令。
请注意,实际的命令编号可能因你的命令历史而有所不同。你可以使用history命令查看命令列表及其行号。
2、在Linux中运行先前执行的命令
你可以通过命令的运行顺序来运行先前运行过的命令,最后运行的命令将表示为-1,倒数第二个为-2,倒数第七个为-7,依此类推。你可以使用!-n,其中n是你要引用的命令的倒数编号。如下图
$ history$ !-3$ !-6$ !-10
在Linux中重新运行命令
3、将先前命令的参数传递给新命令
我需要列出目录’/home/linuxmi/snap’的内容,所以我执行了以下命令:
$ ls /home/linuxmi/snap
接着我意识到,应该运行"ls -l"命令以查看哪些文件可执行。不必重新输入整个命令,只需传递上个命令的参数给这个新命令即可,如下所示:
$ ls -l !$
在这里,’!$’将上个命令中传递的参数传递给这个新命令。
4、如何处理命令中的两个或多个参数
假设我在桌面上创建了一个名为1.txt的文本文件。
linuxmi@linuxmi ~/www.linuxmi.com% touch /home/linuxmi/linuxmi.go
然后使用完整路径将其复制到’/home/avi/Downloads’目录中,使用cp命令。
linuxmi@linuxmi ~/www.linuxmi.com% cp /home/linuxmi/linuxmi.go /home/linuxmi/go
现在我们在cp命令中传递了两个参数。第一个是’/home/avi/Desktop/1.txt’,第二个是’/home/avi/Downloads’。我们可以通过执行echo命令,并使用不同的参数,以不同的方式打印两个参数。
linuxmi@linuxmi ~/www.linuxmi.com% echo "第一个参数是:!^"echo "第一个参数是:/home/linuxmi/linuxmi.go"第一个参数是:/home/linuxmi/linuxmi.golinuxmi@linuxmi ~/www.linuxmi.com% echo "第二个参数是:!cp:2"echo "第二个参数是:/home/linuxmi/go"第二个参数是:/home/linuxmi/go
请注意,第一个参数可显示为“!^”,而其它参数可通过执行“![命令名称]:[参数编号]”进行打印。
在上面的示例中,第一个命令是’cp’,需要打印第二个参数。因此是”!cp:2″。对于具有5个参数的xyz命令,如果需要获取第4个参数,可以使用“!xyz:4”,并根据需要使用该参数。可以通过”!*”访问所有的参数。
处理两个或多个参数
5、根据特定关键词运行最近的命令
我们可以根据关键词执行最近执行的命令。具体如下所示:
$ ls /home > /dev/null [Command 1]$ ls -l /home/linuxmi/linuxmi > /dev/null [Command 2] $ ls -la /home/linuxmi/linuxmi.com > /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关键词。
6、在Linux中重复上次执行的命令
你可以使用(!!)操作符来运行/修改你上次执行的命令,这是一个简写符号,允许你引用在命令行中执行的上一个命令。
例如,我运行了一个单行脚本来查找Linux机器的IP地址:
$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/
然后突然我发现我需要将上述脚本的输出重定向到一个名为ip.txt的文件中,那么我该怎么办呢?我需要重新输入整个命令并将输出重定向到文件吗?好吧,一个简单的解决方案是使用上箭头键来调出上一条命令,并在末尾添加’> ip.txt’来将输出重定向到文件。
$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/ > ip.txt
感谢上箭头键的救命作用。现在考虑以下情况,下次我运行下面的单行脚本。
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密码。
7、使用’!’操作符删除除一个文件之外的所有文件
在Linux中,’!’操作符(也称为”bang”操作符)用于历史扩展,它允许你引用先前的命令并对其执行各种操作。要从目录中删除除了特定文件(important_file.txt)之外的所有文件,可以使用带有’!’操作符的rm命令,如下所示。
$ rm !(important_file.txt)
要从文件夹中删除除了扩展名为’.pdf’之外的所有文件类型。
$ $ rm !(*.pdf)
8、检查Linux中的目录是否存在
在这里,我们将使用’! -d’来验证目录是否存在,如果目录不存在,则紧随其后的是逻辑与操作符(&&),打印出目录不存在,如果目录存在,则紧随其后的是逻辑或操作符(||),打印出目录存在。
逻辑是,当[ ! -d /home/linuxmi/linuxmi.com ]的输出为0时,它将执行逻辑与之后的内容,否则它将转到逻辑或(||)并执行逻辑或之后的内容。
$ [ ! -d /home/linuxmi/linuxmi.com ] && printf '\nno such /home/linuxmi/linuxmi.com directory exist\n' || printf '\n/home/linuxmi/linuxmi.com directory exist\n'
类似于上面的条件,但是如果所需目录不存在,它将退出命令。
$ [ ! -d /home/linuxmi/linuxmi.com] && exit
在脚本语言中的一般实现,如果所需目录不存在,它将创建一个目录。
[ ! -d /home/linuxmi/linuxmi.com] && mkdir /home/linuxmi/linuxmi.com
以上是Linux 命令中“!”操作符的八个神秘用途的详细内容。更多信息请关注PHP中文网其他相关文章!

新年伊始,雷军抖音跨年直播分享了2025年的三个新年愿望,这场长达四个半小时的直播吸引了众多关注。雷军的三大愿望分别是:第一,实现30万辆汽车交付目标,缓解压力,不再被进度追赶。第二,拥有更多旅行时间,欣赏各地美景、品尝特色美食,并结合工作进行汽车测试。第三,坚持健身,计划在健身房打卡100次,强身健体。雷军在直播中坦言,2024年奔波于各地,行程安排紧凑,往往只能短暂停留,难以深入体验当地文化。例如,在德国纽北赛道,他仅停留了8个小时。因此,在新的一年里,他希望能够更好地平衡工作与生活,在旅行

九号公司携手品牌代言人易烊千玺打造的微电影《记忆奇旅》,在2024年荣获多项权威媒体大奖,成为年度口碑佳作。这部作品以独特的叙事风格、精湛的制作和真挚的情感,赢得了业界的高度赞誉。2024年度获奖荣誉:2024金触点全球商业创新大奖-年度影视广告2024中国广告营销大奖-娱乐营销组银奖2024TopDigital创新营销奖-影视制作类金奖2024上海国际广告节-微电影银奖2024第十一届中国创新传播大奖-整合营销类银奖WISE2024商业之王-年度案例第31届中国国际广告节2024数字营销实战大

近日,PConline2024智臻科技奖正式揭晓,AGON爱攻QD-OLED电竞显示器AG326UD荣获“年度技术创新”奖项。此项殊荣不仅代表了业界对其技术优势与市场表现的高度认可,更充分体现了AGON爱攻在电竞显示器技术领域的创新能力和卓越成就。01.瞰科技未来,品技术革命PConline智臻科技奖的权威含金量作为科技行业的风向标,PConline智臻科技奖凭借其严谨的评审体系和深度的行业分析,成功赢得广泛的行业认可。该奖项始终致力于表彰推动科技行业发展的优秀产品和品牌,涵盖从技

SonyInteractiveEntertainment(SIE,索尼互动娱乐)首席架构师MarkCerny公开更多次世代主机PlayStation5Pro(PS5Pro)硬体细节,包括性能升级的AMDRDNA2.x架构GPU,以及与AMD合作代号「Amethyst」的机器学习/人工智慧计划。 PS5Pro性能提升的重点仍集中在更强大的GPU、先进的光线追踪与AI驱动的PSSR超解析度功能等3大支柱上。 GPU采用客制化的AMDRDNA2架构,索尼将其命名为RDNA2.x,它拥有部分RDNA3架构才

微软针对Windows搜索功能的改进,目前已在欧盟地区部分WindowsInsider频道展开测试。此前,整合后的Windows搜索功能饱受用户诟病,体验欠佳。此次更新将搜索功能拆分为本地搜索和基于Bing的网络搜索两部分,以提升用户体验。新版搜索界面默认进行本地文件搜索,如需进行网络搜索,需点击“MicrosoftBingWebSearch”标签进行切换。切换后,搜索栏将显示“MicrosoftBingWebSearch:”,用户可在此输入关键词。此举有效避免了本地搜索结果与Bing搜索结果混

为庆祝卡普空《怪物猎人》系列20周年,宝岛社推出了一款别具匠心的杂志套装——《怪物猎人》主题烧烤计时器及随行杯。该套装将于12月27日在日本全国全家便利店发售,售价3498日元。这款杂志套装最大的亮点在于其互动式烧烤计时器,完美复刻了系列游戏中的经典烧烤场景。计时器采用旧版烤肉工具的设计,配有LED火焰灯效和游戏BGM,让您在实际烧烤过程中也能体验到狩猎的乐趣。旋转手柄模拟翻转烤肉,成功烤熟后更会播放“烤好了!”的语音提示。计时器尺寸约为9.5cm(高)x10.7cm(宽)x8cm(深),内置L

小米汽车一周年庆典,为车主送上新年大礼!继去年交付量突破13万辆后,小米汽车官方微博宣布,将为每位小米SU7车主及准车主赠送雷军经典语录“AreyouOK?”主题气门芯帽,数量有限,免费领取!活动时间:2024年12月28日下午4点至2025年1月20日23:59:59。在2024年12月31日23:59:59前购车或完成订单的用户,即可免费获得一套四件套“AreyouOK?”气门芯帽。这款气门芯帽于今年9月首发,采用亮黄色PVC和黄铜材质制成,黄铜芯直接嵌入,确保行驶安全,不易脱落。用途广泛,

据报道,HDMI2.2标准有望在2025年CES展会前夕正式发布,HDMIForum计划于1月6日公布这一新一代视频信号传输协议规范。2017年发布的HDMI2.1标准,最大带宽为48Gbps,支持4K144Hz和8K30Hz视频传输,结合DSC技术最高可达10K120Hz。预计HDMI2.2将大幅提升带宽,支持更高分辨率和刷新率,并采用新型线材。虽然具体规格尚未公开,但HDMI2.2势必超越HDMI2.1的48Gbps带宽和10240*4320分辨率限制。鉴于DisplayPort2.1在20


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver CS6
视觉化网页开发工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

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

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。