Bash Shell怎样检查文件是否存在?

在类Unix系统的Bash环境下,怎样检查文件是否存在呢?

Shell中的test命令,可以用来检测文件的类型或者比较数值是否相等,该命令也能用来检查文件是否存在。

可以用如下的命令来进行检查:

test -e filename
[ -e filename ]
 
test -f filename
[ -f filename ]

下面的命令,则使用Shell的条件表达式,判断/etc/hosts文件是否存在:

[ -f /etc/hosts ] && echo "Found" || echo "Not found"

该组合命令会输出以下内容:

Found

更常见的用法,则是将test命令放置在if..else..fi条件判断的条件表达式,然后在其中写上不同的分支逻辑

#!/bin/bash
file="/etc/hosts"
if [ -f "$file" ]
then
	echo "$file found."
else
	echo "$file not found."
fi

检测文件属性的相关操作符

如果文件存在,并且具有相应的属性,如下的操作符都会返回true:

       -b FILE
              FILE exists and is block special
       -c FILE
              FILE exists and is character special
       -d FILE
              FILE exists and is a directory
       -e FILE
              FILE exists
       -f FILE
              FILE exists and is a regular file
       -g FILE
              FILE exists and is set-group-ID
       -G FILE
              FILE exists and is owned by the effective group ID
       -h FILE
              FILE exists and is a symbolic link (same as -L)
       -k FILE
              FILE exists and has its sticky bit set
       -L FILE
              FILE exists and is a symbolic link (same as -h)
       -O FILE
              FILE exists and is owned by the effective user ID
       -p FILE
              FILE exists and is a named pipe
       -r FILE
              FILE exists and read permission is granted
       -s FILE
              FILE exists and has a size greater than zero
       -S FILE
              FILE exists and is a socket
       -t FD  file descriptor FD is opened on a terminal
       -u FILE
              FILE exists and its set-user-ID bit is set
       -w FILE
              FILE exists and write permission is granted
       -x FILE
              FILE exists and execute (or search) permission is granted

以上命令,从man test复制而来。

使用上述符号的方法一模一样:

if [ operator FileName ]
then
     echo "FileName - Found, take some action here"
else
   echo "FileName - Not found, take some action here"
fi

文章翻译自:http://www.cyberciti.biz/faq/unix-linux-test-existence-of-file-in-bash/

本文地址:http://crazyant.net/1895.html,转载请注明来源。

重装Win7后恢复和找回Ubuntu启动项

如果电脑之前装了ubuntu,后来又重装了win7,结果发现ubuntu的启动项不见了,是因为重装windows7后,安装系统将把MBR重写,所以安装完成后就会直接进入windows7而不再出现grub2的系统选择界面了。如果您遇到这种情况,完全不需要再把ubuntu重装,因为 ubuntu并未被破坏,只是少了一道通往ubuntu的“门”而已。我们现在就要设法重建一道这样的“门”。

修复的方法很多,如果您不想涉及到启动代码的处理,而且对windows7的启动管理器情有独钟,希望把ubuntu加入到其中可以与windows7及其他一键还原软件并列以便选择。一款软件EasyBCD便可以实现。下面是软件的界面(推荐下载地址:点击):

708f633db6003af36532ebc0352ac65c1138b662

下面先介绍一下添加ubuntu10.04的方法,这里以EasyBCD2.0.2为例:
在windows7下安装完成后打开EasyBCD,单击左侧的“Add New Entry”,然后在“Operating Systems”中选择“Linux/BSD”选项卡,“Type”中选择“GRUB 2”,下面的名字可以改,比如改为“ubuntu”,然后点击下面的“Add Entry”即可。可以参照下面的图示:

539280d7d539b60064563817e950352ac75cb752

重新启动计算机后,会出现windows7的启动管理器,您会发现已经加入了ubuntu(若您没有为其改名将显示NeoSmart Linux)。当您选择进入时,系统会自动搜索到正确位置,然后熟悉的Grub2界面就会出现在您面前了。您可以选择进入各种ubuntu模式,或者再次进入windows7。

其实EasyBCD是一款很好用的小软件,并不局限在windows7下使用,也并不局限修复ubuntu,您可以利用它做很多的有关启动参数的修改而无需记忆繁琐的代码,当然在这里还要给您一些附加的建议:

1.若您要修复的是如ubuntu10.04及以上的版本的话,请务必选择“GRUB2”;若您要修复以“Grub”为引导的Linux系统时,请选择“GRUB”,并手动选择正确的位置;

2.若您是在windows7下使用EasyBCD,请务必使用较新的版本,如本篇演示的版本;

3.若您是要修复其他版本的windows或apple公司的Mac,也可以在相应的选项卡中选择;但请在高版本windows下安装此软件并修复低版本的windows,如windows7下修复windows xp;

4.使用EasyBCD时具有一定的危险性,在删除系统启动相关参数时请慎重,一旦误删可能导致不必要的麻烦;

python在linux下安装方法(解决旧版本冲突)

1.下载源代码 http://www.python.org/ftp/python/2.5.2/Python-2.5.2.tar.bz2

2.  安装

$ tar –jxvf Python-2.5.2.tar.bz2

$ cd Python-2.5.2

$ ./configure

$ make

$ make install

3. 测试

在命令行下输入python,出现python解释器即表示已经正确安装。

在suse10或rhel5(es5)下系统默认已经装了python但版本是2.4.x;本次安装后在shell中输入

#python

会发现显示结果:

# python

Python 2.4.3 (#1, Dec 11 2006, 11:38:52)

[GCC 4.1.1 20061130 (Red Hat 4.1.1-43)] on linux2

Type “help”, “copyright”, “credits” or “license” for more information.

>>>

版本还是2.4.x的

解决办法:

#cd /usr/bin

#ll |grep python   //查看该目录下python

#rm -rf python

#ln -s PREFIX/Python-2.5.2/python ./python  //PREFIX为你解压python的目录

#python

# python

Python 2.5.2 (#1, Dec 11 2006, 11:38:52)

[GCC 4.1.1 20061130 (Red Hat 4.1.1-43)] on linux2

Type “help”, “copyright”, “credits” or “license” for more information.

>>>

OK!问题解决!

按大小拆分超大文件的方法(本文测试了一个62G的文件)

遇到一个问题,从网络上下载了一个62G的文件(新浪微博的语料集,地址:http://itee.uq.edu.au/~dke/WISE2012.htm),之后要进行其他处理,很显然先拆分成小文件再处理比较好。

我当时用的是windows系统,貌似没有这种拆分如此大的文件的工具,我本人试着用C++的内存映射方法(在内存里建一个内存映射文件,然后把超大文件的一部分映射到内存,然后分片读文件),将文件的一部分一部分读出来,读一部分换掉一部分然后写入小文件,从而达到拆分文件的目的,然而网上找了好多文章,内存映射这块还是没搞懂,尤其是参数很是复杂,只好放弃。

最后才发现,windows下面难以解决的问题,linux早就存在了现成的方案来解决,那就是split命令。split具体的使用方法贴一下:

linux split 命令

功能说明:切割文件。

语  法:split [–help][–version][-<行数>][-b <字节>][-C <字节>][-l <行数>][要切割的文件][输出文件名]

补充说明:split可将文件切成较小的文件,预设每1000行会切成一个小文件。

参  数:

-<行数>或-l<行数>  指定每多少行就要切成一个小文件。

-b<字节>  指定每多少字就要切成一个小文件。支持单位:m,k

-C<字节>  与-b参数类似,但切割时尽量维持每行的完整性。

–help  显示帮助。

–version  显示版本信息。

[输出文件名]  设置切割后文件的前置文件名,split会自动在前置文件名后再加上编号。

使用例子:

  split -b 100m filename

看过命令后,会发现其中的-C命令,会照顾到行,就是说截取的时候,不会将一行从中间截断,最终我只用了一行命令解决了问题:

split -C 1024m 62G.txt output

该命令将一个62G的文件,拆分成每个1G的小文件,并且不会将行拆开(新浪微博这个数据,每行一条,不能拆分)

 

Linux下GCC和Makefile实例(从GCC的编译到Makefile的引入)

一、确认已经装好了GCC和Make的软件包

可以使用whereis命令查看:

如果whereis  gcc和whereis  make命令有结果,说明安装了这两个软件,可以继续往下做。 继续阅读Linux下GCC和Makefile实例(从GCC的编译到Makefile的引入)

linux下禁止机箱蜂鸣方法

1、在图像界面下 ,注意,是图形界面下,即使在图像界面下按快捷键出现的虚拟终端里

用xset b off命令关闭蜂鸣声

2、在纯粹的终端下 ,指的是当inittab中的启动级别是第三级别的时候出现的终端用 setterm -blength 0即可

以上两个命令可以直接加入到

/etc/bashrc中,以永久生效