header image

如何删除有特殊字符的文件或目录

最近在NAS上遇到了一个头痛的问题,由于NAS的Shell功能有限,SSH连过去之后虽然能显示中文,但是却无法输入,复制粘贴也不行。于是上网到处找,没想到中文搜索竟一无所获,最终找到了英文的,在这里搬运翻译一下。

虽说我的情况是删除中文文件,但其实这些情况适用于任何特殊字符(比如还有>(输出重定向)、*(通配符)、-(命令选项)、$(变量引用)、(空格,分隔参数和选项)等),也可以举一反三用在其他操作上。

把文件名放到引号中

这可以说是最基本的方法了,Shell中引号表示字符串,所以有些字符放到引号中就不具有本来在Shell命令中的功能了。单引号'或者双引号"都可以,但注意要配对。例如删除名为my file的文件:

rm "my file"

用反斜杠转义

用反斜杠\转义字符相信编写过程序的都不陌生,有的特殊字符是可以用反斜杠转义的,转义之后就失去在Shell命令中的功能了。实际上如果经常用Tab来自动完成命令的话就会发现,自动完成的就是用反斜杠来转义的。例如删除名为[my file]的文件:

rm \[my\ file\]

在文件名前加上./

./表示当前目录,有的字符如果出现在空格后面就有特殊含义(比如-表示命令选项),但加上./之后就不是了。比如删除名为-my-file的文件:

rm ./-my-file

在文件名前加上--

--表示结束命令选项,在其之后的字符都被视为参数。当然,--两边要加上空格,而且只对文件开头的是-的有效,其他特殊字符还是要用其他办法。比如删除名为-my-file的文件:

rm -- -my-file

用inode编号删除

上面的方法只能针对某些特殊字符,对于我在本文开头说到的情况无能为力,但是我们还有最终解决方案。关于什么是inode就不详细说了,反正这里只要知道在一个文件系统上每个文件或目录都有一个inode编号。这个编号可以通过ls-i选项来查看,为了看得清楚,我们再加上选项-1来让一项结果占一行。

li -i1

比如我这里有三个特殊文件名的文件file-file$file的结果如下:

63184461  file
63181495 -file
63184295 $file

文件名前面的数字就是inode编号了。

可是rm并不支持用inode来删除,怎么办呢,这里就要请出另一个命令了,这就是find。这是个查找文件的命令,它有个选项-inum可以指定inode编号,还有个选项-delete可以直接删除文件。

find . -inum 63181495 -delete

.表示在当前目录查找,-inum 63181495就是查找inode编号为63181495的文件,-delete就是将找到的文件删除。

-delete选项只能删除文件和空目录,要删除有文件的目录怎么办呢,这个时候就要另一个选项出场了——-exec,表示将查找到的文件放到其后的命令中。在命令中{}会用查找到的文件代替。

find . -inum 63181495 -exec rm -ri {} \;

rm的选项-r表示递归删除目录和里面的内容,-i表示删除每一个项之前都弹出提示询问以免误删。

于是,目录被我快乐地删除掉了。

Ubuntu Server 14.04 LTS上编译安装PHP7

由于是在服务器上安装,所以都是命令行,下面就列出命令不给出结果了,如果出现错误请自行查找原因。

本文是在Ubuntu Server 14.04 LTS上编译的,因为15.04之后Ubuntu换用了systemd来管理服务,所以本文的内容并不适用。

本文章编译的是FPMNginxApache2都可以使用,如果要编译Apache2的模块,请不要参考本文。

由于PHP7废弃了很多功能,所以一些依赖这些功能的程序可能无法运行,尝鲜前请三思。比如很多国产软件都在依赖的mysql相关函数,如果自己开发php应用请用mysqli代替。不过WordPress是没有问题的,尽情使用吧。

阅览更多内容……

在WordPress中使用Markdown

Markdown是一种非常好的格式化纯文本文件的方式,具有很好的可读性,也可以方便地转换为HTML。GitHub的README等地方都是使用Markdown语法的,简洁高效。

可以说,学会了Markdown之后,你就不会想去编辑麻烦的HTML了。要想学习Markdown,可以参考这里:Markdown语法说明

当然,Markdown并不能完全代替HTML,但是没关系,Markdown是完全兼容HTML的,你可以在其中任意插入HTML标签,实现Markdown之外的功能。

这么好用的东西,WordPress居然不支持(其实WordPress.com是支持的,但是WordPress程序本身却没有),那我们只有自食其力了。

插件里搜Markdown,能搜到不少工具,各有各的特点,但试用了几个之后,我最终决定使用JP Markdown。第一,它没有明显的Bug,对语法支持比较完善。第二,它没有多余的东西,编辑完全是在WP自带的编辑器里进行。而且Markdown只是在编辑器中使用,保存进数据的文章还是HTML的,所以即使以后停用了插件也不会有任何影响。

当然,可视化编辑器会干扰Markdown的使用(在可视化和代码之间切换会丢失格式),所以我们最好关掉,WP自带了选项,隐藏得有点深,在后台的用户我的个人资料里有个撰写文章时不使用可视化编辑器的选项,勾上就可以了。

最后还有一点,纯文本编辑使用非等宽字体实在太难看了,这里我们需要另一个插件,Admin Font Editor,安装之后会在后台的设置下面多出同名的选项页面,进去之后设置Font Size(字号,我设置的是14)和Font Family(字体,选择Select font from list or type a font name below之后在下面的输入框中输入Inconsolata, monospaceInconsolata是一个不错的等宽字体,需要在电脑上自行安装),然后Save Changes就行了。

PS:安装了插件之后,评论中也支持Markdown语法了。

禁用Firefox附加组件签名验证

曾经,我们禁用过附加组件的兼容性检查,然而Mozilla并不想让我们好过,于是现在又搞了签名。

然而我使用的开发版的插件,并没有经过签名。要等插件作者去弄签名,那估计得好一段时间没法用了。

于是,我们依旧要禁用这个签名检查。

还是老样子,在地址栏中输入about:config,然后搜索找到xpinstall.signatures.required,双击一下把值改为false

当然,签名是为了保证不会有恶意插件被安装,如果你无法保证插件来源的安全,还是老老实实地开着验证吧。

高分屏下调整Ubuntu的鼠标指针尺寸

拿到了4K屏,由于才有23吋,不可能按原始比例使用桌面环境(否则界面太小),于是就放大了2倍来使用(系统设置 -> 显示 -> 菜单和标题栏缩放比例)。

虽然各个软件还是需要自己支持高分屏,但至少系统界面和使用系统提供的控件的界面不会显得太小了。这点比闻道死直接把程序界面放大出现一堆狗牙要好多了。

但是,在支持的程序下鼠标指针倒是没问题,但在边栏上鼠标却小得可怜,所以就要调整。以下所说的选项均使用dconf-editor或者gsettings来设置。

过去是调整org.gnome.desktop.interface下的cursor-size,把数值增大2倍就行了,但是Ubuntu 14.04以后就不管用了。

问题肯定不是我第一个遇到的,终于还是在这里找到了解决方法。

首先,在自己的用户目录下新建一个叫做.Xresources的文件,内容是Xcursor.size:48(根据显示设置的缩放比例来修改,1倍是24,这里48就是2倍)。

然后,修改com.canonical.Unity.Interface下的cursor-scale-factor值,改成和显示设置里面的缩放比例一致就行。

或者一行命令搞定:

echo "Xcursor.size:48" > ~/.Xresources && gsettings set com.canonical.Unity.Interface cursor-scale-factor 2