小编Hus*_*oli的帖子

为 root 用户清空文件不起作用

我使用以下命令清空文件

> file.txt
Run Code Online (Sandbox Code Playgroud)

它工作得很好!但是有一些文件具有root用户权限。所以我试过了

sudo > different-file.txt
Run Code Online (Sandbox Code Playgroud)

我得到了以下详细信息

usage: sudo [-D level] -h | -K | -k | -V
usage: sudo -v [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-u user name|#uid]
usage: sudo -l[l] [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-U user name] [-u user name|#uid] [-g groupname|#gid] [command]
usage: sudo [-AbEHknPS] [-C fd] [-D level] [-g groupname|#gid] [-p prompt] [-u user name|#uid] [-g groupname|#gid] [VAR=value] [-i|-s]
        [<command>]
usage: sudo -e [-AknS] [-C fd] [-D level] …
Run Code Online (Sandbox Code Playgroud)

root sudo

25
推荐指数
4
解决办法
1万
查看次数

如何检测 getopts 没有传递任何选项?

我有这个代码 -

#getoptDemo.sh
usage()
{
    echo "usage: <command> options:<w|l|h>"
}
while getopts wlh: option
do
    case $option in
            (w)
                    name='1';;
            (l)
                    name='2';;
            (h)
                    name='3';;
            (*)
                    usage
                    exit;;
    esac
done
print 'hi'$name
Run Code Online (Sandbox Code Playgroud)

当我运行bash getoptDemos.sh(不带选项)时,它会打印hi而不是调用函数usage。当给出 w、h 和 l 以外的选项时,它调用用法。那么当没有指定选项时它就不能工作。

我曾尝试使用?, \?,:代替,*但我无法实现我想要的。我的意思是所有的docsgetopt说它使用?

我究竟做错了什么?

shell bash options getopts

21
推荐指数
3
解决办法
9万
查看次数

为什么终端区分大小写?

当我这样做 -CD ..而不是cd ..
它给我错误说 -

CD: command not found
Run Code Online (Sandbox Code Playgroud)

为什么在涉及 linux 命令时终端区分大小写?我的意思是您应该能够使用“全部大写”或“全部小写”字符执行命令。

我知道这是由于某种原因,但我只是好奇。

shell user-interface

14
推荐指数
3
解决办法
2万
查看次数

只允许一个文件名出错

有时我会忘记sudo vim打开我没有写权限的文件。我看到了这个帖子,它真的很有帮助。

当我这样做时,:w !sudo tee %它要求我输入密码,然后是选项(O)K(L)OAD. 这工作得很好。但是当我这样做时:wq !sudo tee %vim给了我一个错误-

E172: Only one file name allowed
Run Code Online (Sandbox Code Playgroud)

为什么它不让我在wq. 我不明白这个错误。

vim sudo

6
推荐指数
1
解决办法
4936
查看次数

grep 不在列表的 for 循环中工作

我有一些日志文件。我有一个用户 ID 列表。我的日志文件采用特定格式

log-yyyy-mm-dd
e.g. log-2014-09-30
Run Code Online (Sandbox Code Playgroud)

我正在尝试在日志文件中搜索每个用户 ID。这就是我正在做的 -

for userid in 234, 283, 893, 982, 323; do cat log-2014-09-30 | grep -a "user deleted "$userid  | tail -1; done
Run Code Online (Sandbox Code Playgroud)

理想情况下,它应该搜索文件中的每个用户 ID 并打印最后一个匹配项。然后我将搜索log-2014-09-29剩余的用户 ID 等等。

但它只打印最后一个用户 ID 的匹配项。

INFO - 2014-09-30 22:49:00 - user deleted 323
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?请帮帮我。

grep shell-script tail cat

6
推荐指数
1
解决办法
4914
查看次数

当标题设置为终端选项卡时如何运行脚本?

在我的日常工作中,我保留了许多终端标签。所以为了识别那些,我设置了标题

终端选项卡 > 设置标题

例如 IRC、API 代码库、API 日志、Server1 等

我想做的是根据选项卡的标题在选项卡中做一些事情。例如

  1. 当我设置“API Codebase”时,它应该转到我的代码库并激活适当的 python 虚拟环境
  2. 当我设置“IRC”时,它应该运行 irssi
  3. 当我设置“Server1”时,它应该运行 ssh 命令来连接到服务器

等等。

如何才能做到这一点?

gnome-terminal

5
推荐指数
1
解决办法
773
查看次数

创建 www-data 和 myuser 都可以编辑的文件

我有一个目录来存储发票 -

drwxrwxr-x  2 me www-data   49152 Sep  9 13:38 invoices
Run Code Online (Sandbox Code Playgroud)

有两个应用程序将文件写入此目录。

  1. PHP 网络应用程序

    -rw-r--r-- 1 www-data www-data 7681 Sep 9 13:38 invoice_1.html

  2. Python脚本

    -rw-rw-r-- 1 me me 8911 Sep 4 06:04 invoice_2.html

现在我想从 Web 应用程序覆盖 invoice_2.html。我怎么做?

我不想添加www-datame组。我不知道怎么做,但这会使我的服务器容易受到安全威胁。

帮帮我。

谢谢。

permissions webserver

3
推荐指数
1
解决办法
7126
查看次数