和绝地武士的原力一样,-f 参数是很强大的,并伴随着潜在的毁灭性,在你能用好的时候又很便利。

近些年来,科幻发烧友开始在每年的 5 月 4 日庆祝星战节,其口号是绝地武士的祝福语”愿原力Force和你同在“。虽然大多数 Linux 用户可能不是绝地武士,但我们依然可以使用原力Force。自然,如果尤达大师只是叫天行者卢克输入什么 “man X-Wing 战机“、“man 原力”,或者 RTFM(去读原力手册,肯定是这个意思对不对),那这电影肯定没啥意思。(LCTT 译注:RTFM 是 “Read The Fucking Manual” 的缩写 —— 读读该死的手册吧)。

很多 Linux 命令都有 -f 选项,意思你现在肯定也知道了,原力(LCTT 译注:force 选项原意是“强制”)!很多时候你先尝试执行命令然后失败了,或者提示你需要补充输入更多选项。通常这都是为了保护你试着改变的文件,或者告诉用户该设备正忙或文件已经存在之类的。

如果你不想被这些提醒打扰或者压根就不在乎,就使用原力吧!

不过要小心,通常使用原力选项是摧毁性的。所以用户一定要格外注意!并且确保你知道自己在做什么!用原力就要承担后果!

以下是一些常见 Linux 命令的原力选项和它们的效果,以及常见使用场景。

cp

cp 是 “copy” 的缩写,这是个被用来复制文件或者目录的命令。其 man 页面 说:

-f, –force

如果已经存在的目标文件无法被打开,删除它并重试

你可能会用它来处理只读状态的文件:

[alan@workstation ~]$ ls -l

total 8

-rw-rw---- 1 alan alan 13 May 1 12:24 Hoth

-r--r----- 1 alan alan 14 May 1 12:23 Naboo

[alan@workstation ~]$ cat Hoth Naboo

Icy Planet

Green Planet

如果你想要复制一个叫做 Hoth 的文件到 Naboo,但因为 Naboo 目前是只读状态,cp 命令不会执行:

[alan@workstation ~]$ cp Hoth Naboo

cp: cannot create regular file 'Naboo': Permission denied

但通过使用原力,cp 会强制执行。Hoth 的内容和文件权限会直接被复制到 Naboo:

[alan@workstation ~]$ cp -f Hoth Naboo

[alan@workstation ~]$ cat Hoth Naboo

Icy Planet

Icy Planet

[alan@workstation ~]$ ls -l

total 8

-rw-rw---- 1 alan alan 12 May 1 12:32 Hoth

-rw-rw---- 1 alan alan 12 May 1 12:38 Naboo

ln

ln 命令是用来在文件之间建立链接的,其 man 页面 描述的原力选项如下:

-f, –force

移除当前存在的文件

假设莱娅公主在维护一个 Java 应用服务器,并且她又一个存放这所有 Java 版本的目录,比如:

leia@workstation:/usr/lib/java$ ls -lt

total 28

lrwxrwxrwx 1 leia leia 12 Mar 5 2018 jdk -> jdk1.8.0_162

drwxr-xr-x 8 leia leia 4096 Mar 5 2018 jdk1.8.0_162

drwxr-xr-x 8 leia leia 4096 Aug 28 2017 jdk1.8.0_144

正如你所看到的,这里有很多个版本的 JDK,并有一个符号链接指向最新版的 JDK。她接着用一个脚本来安装最新版本的 JDK。但是如果没有原力选项的话以下命令是不会成功的:

tar xvzmf jdk1.8.0_181.tar.gz -C jdk1.8.0_181/

ln -vs jdk1.8.0_181 jdk

tar 命令会解压 .gz 文件到一个特定的目标目录,但 ln 命令会失败,因为这个链接已经存在了。这样的结果是该符号链接不会指向最新版本的 JDK:

leia@workstation:/usr/lib/java$ ln -vs jdk1.8.0_181 jdk

ln: failed to create symbolic link 'jdk/jdk1.8.0_181': File exists

leia@workstation:/usr/lib/java$ ls -lt

total 28

drwxr-x--- 2 leia leia 4096 May 1 15:44 jdk1.8.0_181

lrwxrwxrwx 1 leia leia 12 Mar 5 2018 jdk -> jdk1.8.0_162

drwxr-xr-x 8 leia leia 4096 Mar 5 2018 jdk1.8.0_162

drwxr-xr-x 8 leia leia 4096 Aug 28 2017 jdk1.8.0_144

她可以通过使用原力选项强制 ln 更新链接,但这里她还需要使用 -n,-n 是因为这个情况下链接其实指向一个目录而非文件。这样的话,链接就会正确指向最新版本的JDK了。

leia@workstation:/usr/lib/java$ ln -vsnf jdk1.8.0_181 jdk

'jdk' -> 'jdk1.8.0_181'

leia@workstation:/usr/lib/java$ ls -lt

total 28

lrwxrwxrwx 1 leia leia 12 May 1 16:13 jdk -> jdk1.8.0_181

drwxr-x--- 2 leia leia 4096 May 1 15:44 jdk1.8.0_181

drwxr-xr-x 8 leia leia 4096 Mar 5 2018 jdk1.8.0_162

drwxr-xr-x 8 leia leia 4096 Aug 28 2017 jdk1.8.0_144

你可以配置 Java 应用使其一直使用在 /usr/lib/java/jdk 处的 JDK,而不用每次升级都更新。

rm

rm 命令是 “remove” 的缩写(也叫做删除,因为某些系统 del 命令也干这事)。其 man 页面 对原力选项的描述如下:

-f, –force

无视不存在的文件或者参数,不向用户确认

如果你尝试删除一个只读的文件,rm 会寻求用户的确认:

[alan@workstation ~]$ ls -l

total 4

-r--r----- 1 alan alan 16 May 1 11:38 B-wing

[alan@workstation ~]$ rm B-wing

rm: remove write-protected regular file 'B-wing'?

你一定要输入 y 或者 n 来回答确认才能让 rm 命令继续。如果你使用原力选项,rm 就不会寻求你的确认而直接删除文件:

[alan@workstation ~]$ rm -f B-wing

[alan@workstation ~]$ ls -l

total 0

[alan@workstation ~]$

最常见的 rm 原力选项用法是用来删除目录。 -r(递归)选项会让 rm 删除目录,当和原力选项结合起来,它会删除这个文件夹及其内容而无需用户确认。

rm 命令和一些选项结合起来是致命的,一直以来互联网上都有关于误用 rm 删除整个系统之类的玩笑和鬼故事。比如最出名的一不当心执行 rm -rf . 会直接删除目录和文件(没有用户确认)。(LCTT 译注:真的这么干过的校对飘过~~请按下回车前再三确认:我是谁,我在哪里,我在干什么)

userdel

userdel 命令使用来删除用户的。其 man 页面 是这样描述它的原力选项的:

-f, –force

这个选项会强制移除用户,即便用户当前处于登入状态。它同时还会强制 删除用户的目录和邮件存储,即便这个用户目录被别人共享或者邮件存储并不 属于这个用户。如果 USERGROUPS_ENAB 在 /etc/login.defs 里是 yes 并且有一个组和此用户同名的话,这个组也会被移除,即便这个组还是别 的用户的主要用户组也一样。

注意:这个选项有风险并可能让系统处于不稳定状态。

当欧比旺抵达穆斯塔法星的时候,他知道自己的使命。他需要删掉达斯·维达的用户账户——而达斯还在里面呢。

[root@workstation ~]# ps -fu darth

UID PID PPID C STIME TTY TIME CMD

darth 7663 7655 0 13:28 pts/3 00:00:00 -bash

[root@workstation ~]# userdel darth

userdel: user darth is currently used by process 7663

因为达斯还登在系统里,欧比旺需要使用原力选项操作 userdel。这能强制删除当前登入的用户。

[root@workstation ~]# userdel -f darth

userdel: user darth is currently used by process 7663

[root@workstation ~]# finger darth

finger: darth: no such user.

[root@workstation ~]# ps -fu darth

error: user name does not exist

正如我们所见到的一样,finger 和 ps 命令让我们确认了达斯已经被删除了。

在 Shell 脚本里使用原力

很多命令都有原力选项,而在 shell 脚本里他们特别有用。因为我们经常使用脚本完成定期或者自动化的任务,避免用户输入至关重要,不然的话自动任务就无法完成了

我希望上面的几个例子能帮你理解一些需要使用原力的情况。你在命令行使用原力或把它们写入脚本之前应当完全理解它们的作用。误用原力会有毁灭性的后果——时常是对整个系统,甚至不仅限于一台设备。

本文由 LCTT 原创编译,Linux中国 荣誉推出

stol函数在linux下使用,技术|在 Linux 命令行下使用“原力”相关推荐

  1. linux无线网卡的拨号状态获取,命令行下获取无线网卡相关数据

    经讨论,了解到ralink原生驱动才带有ap client功能,其他厂家的IC默认只支持station模式.但ap_client必须和ap server在同一频道. 对此我万分纠结,到底是继续使用MT ...

  2. Linux(CentOS 6.X)命令行下安装Oracle 11g

    一.系统要求 1.1.内存及swap(交换空间)要求 RAM swap 1~2G RAM的1.5倍 2~16G 与RAM相等 大于16G 16G 查看内存大小: grep MemTotal /proc ...

  3. linux 的一些实用工具,linux 命令行下的一些实用工具

    linux 命令行下的一些实用工具 命令行下的一些常用应用: awesome                        适合geek的桌面管理器VM mc                     ...

  4. linux命令行下读取u盘内容_Linux命令行下的快捷键

    1. 命令行下的快捷键 经常在命令行下工作的同志们,可能用的最多的就是两个上下键,主要用来调出 历史命令:使用左右箭头使光标向后或向前移动以修改上次使用过的命令.其实 这样做效率并不是很高,有了快捷键 ...

  5. 命令行下执行带参数php

    命令行下执行带参数php 命令行下执行php,不走apache等通信流程,没有http协议,所有get,post传参数不起作用.按普通应用程序传参数的方法进行. 1.test.php测试文件 查看复制 ...

  6. Linux快捷键-命令行下

    LINUX中命令行下是没有鼠标的,所以所有的操作只能通过键盘来实现.确实,鼠标对于电脑而言感觉还是很重要的,相对与Windows,Linux在易操作性上差的很多.所以,对于我们技术人员来讲,刚开始学习 ...

  7. 一招教你在Linux命令行下测网速

    前言 大家平时使用电脑.手机进行上网的时候,网络的速度往往是你最关心的指标,而网络的好坏我们一般都会使用专业的网速测试软件,根据测试数据来判断网络好坏.那么本文将介绍Linux 命令行下的网络测速工具 ...

  8. linux 命令行下wlan无线网卡配置 2

    linux 命令行下wlan无线网卡配置 [上海央邦]学一送一,超值! 必读版<十一攻破RHCE6.0.OCP>安博亚威]CCIE考试通过率第一! 中国IT实验室收集整理 佚名 2012- ...

  9. Linux 命令行下的好东西

    Linux 命令行下的好东西 本文转载自简书http://www.jianshu.com/p/5ca890e5bdbf 现在做网站做移动应用最讲究的就是推广了,推广做的好那就成功了一大半,相对的没曝光 ...

  10. 在Windows和Linux系统上,用C语言实现命令行下输入密码回显星号和完全隐藏密码

    本篇目录 引子 在Windows 上实现 在Linux上实现 回显星号 代码解读 运行 完全隐藏 运行 引子 在Windows系统上,当我们使用命令行和MySQL进行交互时,第一步就是要输入密码: - ...

最新文章

  1. 近期必读的6篇NeurIPS 2019零样本学习论文
  2. 微软被指责暗藏Windows API
  3. 怎么会执行sql 懒加载 没用_太神奇的 SQL 查询经历,group by 慢查询优化!
  4. python输出举例_python字符串格式化输出及相关操作代码举例
  5. 心电信号去噪(part5)--小波及其他技术方面问题
  6. 「PPT模板」 商务UI风格
  7. matlab的图形绘制实验,(完整版)Matlab实验7图形绘制
  8. 合肥师范学院c语言题库,二级c语言题库
  9. ftp上传当天文件的方法_8uftp上传工具,8uftp上传工具的使用方法只需8步
  10. NGS数据分析实践:03. 涉及的常用数据格式[5] - vcf格式
  11. pyqt 控件焦点_PyQt5 控件学习(一个一个学习之QTextEdit)
  12. sqlite附加数据库操作实例
  13. NTL密码算法开源库——模二整数上的矩阵(mat_GF2)
  14. 从酷狗的网络红歌说起
  15. Eureka的InstanceInfoReplicator类(服务注册辅助工具)
  16. 春江花月夜 唐 张若虚
  17. linux系统下搜索文件,Linux系统下搜索文件的方法
  18. word2016加载MathType打开时显示“安全警告,宏已被禁用”解决办法
  19. ​向死而生,浴火重生,创新能让AI芯片新生?
  20. 地理坐标的六边形编码(PHXIS)

热门文章

  1. 【业余无线电】Python程序模拟CW电报发报与译码(包含英文和中文,方便练习发报节奏和听音解码)
  2. 智能车竞赛技术报告 | 节能信标组 - 中南民族大学 - 双子星
  3. 第五章——决策树笔记(《统计学习方法》-李航)
  4. 24岁本命年的几点感悟——新的起点,立个flag
  5. 支付宝扫码支付,回调和退款(沙箱环境配置和完整代码)
  6. 斧子演示(AxeSlide)网页演示端(asweb)
  7. 统信UOS操作系统启动不了问题
  8. 基于点云的深度学习方法预测蛋白-配体结合亲和力【Briefings in Bioinformatics, 2022】
  9. 关于代价敏感随机森林的总结
  10. 华为交换机命令 端口速率_华为交换机限制端口速率