小编dot*_*hen的帖子

带有 .bak _before_ 文件扩展名的备份文件

我通常在没有版本控制的服务器上备份配置文件,如下所示:

# cp httpd.conf{,.bak}
# ls
httpd.conf    httpd.conf.bak
Run Code Online (Sandbox Code Playgroud)

但是,对于 web 根目录中的文件,我会花时间小心地将.bak文件扩展名放在文件扩展名之前,以便.php如果有人设法猜测或探测服务器以获取此类文件,则 Apache 仍将通过 PHP 解释器发送文件:

$ cp index.php index.bak.php
$ ls
index.php    index.bak.php
Run Code Online (Sandbox Code Playgroud)

有没有办法使用制表符完成和肌肉记忆将.bak文件扩展名放在前面?我已经Tab{}?,.bak陷入了肌肉记忆,我无法在 web 根目录中的文件上使用这个漂亮的“肉宏”。

谢谢。

shell rename

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

什么时候不希望 `cp` 是递归的?

在什么情况下可能希望cp在目录上使用该命令但它不是递归的?考虑:

$ tree
.
??? old
    ??? inner
        ??? a.txt

2 directories, 1 file

$ cp old/inner/ .
cp: omitting directory `old/inner/'

$ tree
.
??? old
    ??? inner
        ??? a.txt

2 directories, 1 file
Run Code Online (Sandbox Code Playgroud)

那到底做了什么?那么为什么人们永远不会使用该-r标志,因此为什么不指定它就暗示它呢?请注意,该-r标志对常规文件没有不良影响:

$ cp -r old/inner/a.txt .
$ ls
a.txt  old
Run Code Online (Sandbox Code Playgroud)

我确实意识到我可以别名cpcp -r但我的目标是了解原因是什么,而不是解决任何问题。

bash cp

7
推荐指数
1
解决办法
3177
查看次数

复制除 `.git` 和 `..` 之外的所有点文件

我知道使用.[!.]*来引用目录中除 之外的所有点文件..,但是如何引用除..and之外的所有点文件.git?我已经尝试了几种变体.[!.||.git]*等等.[!.][!.git]*,但没有一个是指预期的文件。

bash wildcards dot-files

7
推荐指数
1
解决办法
6889
查看次数

ext(4?) 文件系统是否本质上以更容易损坏的方式存储较新的数据?

我最近有一个损坏的 ext4 文件系统抛出这些错误:

kubuntu@kubuntu:~$ sudo mount -t ext4 /dev/sdc2 c1
mount: wrong fs type, bad option, bad superblock on /dev/sdc2,
  missing codepage or helper program, or other error
  In some cases useful info is found in syslog - try
  dmesg | tail  or so

kubuntu@kubuntu:~$ sudo fsck.ext4 -v /dev/sdc2
e2fsck 1.42.5 (29-Jul-2012)
    fsck.ext4: Attempt to read block from filesystem resulted in short read while trying to open /dev/sdc2
Could this be a zero-length partition?

kubuntu@kubuntu:~$ dmesg | tail …
Run Code Online (Sandbox Code Playgroud)

ext4 corruption

7
推荐指数
1
解决办法
428
查看次数

确定进程在哪个屏幕实例中运行

侦听端口 8113 (Solr) 的进程没有响应。我找到了它的 PID,netstat但是服务器有大约两打 Solr 进程在不同的screen会话中运行。

3607.foobar-client2  (12/27/14 20:54:02)     (Detached)
3797.solr.bo.app    (12/25/14 11:51:30)     (Detached)
2962.solr       (12/25/14 11:47:23)     (Detached)
1410.solrTester         (12/25/14 11:39:41)     (Detached)
1348.solrReports (12/25/14 11:38:41)     (Detached)
....
Run Code Online (Sandbox Code Playgroud)

我发现识别它们的唯一方法是停止进程。我尝试通过哪些文件打开它们来识别它们,lsof但这在这种情况下根本没有帮助。有什么方法可以根据 PID 确定screen进程在哪个会话中运行?

process gnu-screen

7
推荐指数
1
解决办法
1461
查看次数

什么`. /路径/命令`做什么?(点后空格,绝对路径)

本 Bash 完成指南中我们了解到,为了让 Bash 执行自动完成,必须执行. /etc/etc/bash_completion.d/foobar注意后面的空格.)才能使 Bash 完成工作。

$ /etc/bash_completion.d/ssh
bash: /etc/bash_completion.d/ssh: Permission denied
$ . /etc/bash_completion.d/ssh
$ ls -l /etc/bash_completion.d | grep ssh
-rw-r--r-- 1 root root   297 Jan 28 18:04 ssh
Run Code Online (Sandbox Code Playgroud)

是命令.的快捷方式source吗?如果不是,那是什么?这是不可能的谷歌,man source回报什么,apropos sourceinfo source给这么多不相关的信息,我不能告诉我们,如果有什么我要找的是在那里。我什至如何开始 RTFM 自己找到这个问题的答案?

bash

7
推荐指数
1
解决办法
3676
查看次数

不会破坏长命令的 Bash 提示

我正在尝试设置一个 bash 提示,- hostname(screen#):directory$如果最后一个命令成功完成则为绿色,否则为红色。到目前为止,这是我所拥有的,它实际上完成了这项工作,但如果命令换行,似乎会导致显示问题:

 PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m'; else echo '\e[31m' ; fi\` - \h(${WINDOW}):\W$\e[00m "
Run Code Online (Sandbox Code Playgroud)

谷歌搜索这个问题,我发现这个有用的 SO 帖子有一条评论,其中提到了将非打印字符包裹起来\\[\\]避免这个问题。因此,我尝试了以下方法,但并没有解决问题,而且还破坏了颜色变化:

PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m'; else echo '\e[31m' ; fi\`\] - \h(${WINDOW}):\W$\[\e[00m\] "
Run Code Online (Sandbox Code Playgroud)

如何使用颜色保留此提示的结构,但对其进行修复以便正确显示长命令?

bash prompt

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

我刚才杀了什么?

有什么办法可以查出我刚才杀了什么?

$ ps -A -o pid,cmd | grep someApp | grep -v grep
2802 python someApp.py
$ sudo kill 2302
$
Run Code Online (Sandbox Code Playgroud)

编辑:为了澄清,我需要在杀死它之前知道 PID 2302 是什么。这ps条线是为了说明我是如何杀死 2302 的,而我什至不知道它是什么。

linux kill

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

面向儿童的 Linux 命令

我最小的女儿 (6) 对slgti命令很着迷。她甚至学会了将它们与它们结合起来,;当需要教她返回值时,我会向她展示如何sl && gti工作但gti && sl不工作 ,作为gti返回1

我还能教她什么命令?ls当她要求我向她解释我在做什么时,她会及时学习和其他有用的命令,但我正在寻找其他有趣的命令,例如slgtiaafire并且cowsay有点有趣,但是如果有其他令人兴奋的命令slgti我们很想知道。

她说谢谢!

command-line

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

为不在 /etc/passwd 中的用户设置默认 shell 为 bash

在我公司的 Ubuntu 15.10 桌面系统上,我使用一些基于PBIS 的魔法通过 Active Directory 登录。因此,即使我的主目录在/home/local/FOOBAR/dotancohen/. 当没有要编辑的 /etc/passwd 行因此无法使用时,如何将 bash 配置为 shell chsh

我在这台机器上有另一个具有管理员访问权限的帐户,因此我可以根据需要将系统配置为管理员。但是,如果有一个仅限用户使用的解决方案,我希望将来在我没有管理员访问权限时使用它!

以下是在 Unity(Ubuntu 桌面)中打开 Gnome 终端运行的几个关键命令的结果:

$ echo $HOME
/home/local/TECHMARKETING/dotan
$ whoami
FOOBAR\dotancohen
$ grep dotan /etc/passwd
$ grep sourced ~/.profile
echo 'sourced .profile'
$ grep sourced ~/.bashrc
echo "sourced .bashrc"
$ echo $SHELL
/bin/sh
$ echo $TERM
xterm
$ bash
sourced .bashrc
 - dotan-tm():~$ echo $SHELL
/bin/sh
 - dotan-tm():~$ echo $TERM
xterm-256color
Run Code Online (Sandbox Code Playgroud)

可以看出,当它们被获取时,.bashrc和 都.profile回显。似乎.profile …

command-line bash active-directory

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