千家信息网

在Linux命令行下如何使用原力选项

发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,小编给大家分享一下在Linux命令行下如何使用原力选项,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!cpcp 是 "cop
千家信息网最后更新 2024年11月19日在Linux命令行下如何使用原力选项

小编给大家分享一下在Linux命令行下如何使用原力选项,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!


cp

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

-f, –force

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

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

[alan@workstation ~]$ ls -ltotal 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 NabooIcy Planet Green Planet

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

[alan@workstation ~]$ cp Hoth Naboocp: cannot create regular file 'Naboo': Permission denied

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

[alan@workstation ~]$ cp -f Hoth Naboo[alan@workstation ~]$ cat Hoth NabooIcy Planet Icy Planet [alan@workstation ~]$ ls -ltotal 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 -lttotal 28lrwxrwxrwx 1 leia leia   12 Mar  5  2018 jdk -> jdk1.8.0_162drwxr-xr-x 8 leia leia 4096 Mar  5  2018 jdk1.8.0_162drwxr-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 jdkln: failed to create symbolic link 'jdk/jdk1.8.0_181': File existsleia@workstation:/usr/lib/java$ ls -lttotal 28drwxr-x--- 2 leia leia 4096 May  1 15:44 jdk1.8.0_181lrwxrwxrwx 1 leia leia   12 Mar  5  2018 jdk -> jdk1.8.0_162drwxr-xr-x 8 leia leia 4096 Mar  5  2018 jdk1.8.0_162drwxr-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 -lttotal 28lrwxrwxrwx 1 leia leia 12 May 1 16:13 jdk -> jdk1.8.0_181drwxr-x--- 2 leia leia 4096 May 1 15:44 jdk1.8.0_181drwxr-xr-x 8 leia leia 4096 Mar 5 2018 jdk1.8.0_162drwxr-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 -ltotal 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 -ltotal 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 darthUID        PID  PPID  C STIME TTY          TIME CMDdarth     7663  7655  0 13:28 pts/3    00:00:00 -bash[root@workstation ~]# userdel darthuserdel: user darth is currently used by process 7663

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

[root@workstation ~]# userdel -f darthuserdel: user darth is currently used by process 7663[root@workstation ~]# finger darthfinger: darth: no such user.[root@workstation ~]# ps -fu dartherror: user name does not exist

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

以上是"在Linux命令行下如何使用原力选项"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0