当前位置: 技术问答>linux和unix
用shell编程判断一文件是不是字符设备文件
来源: 互联网 发布时间:2016-07-01
本文导语: 有一道shell编程的题目:用shell编程,判断一文件是不是字符设备文件,如果是将其拷贝到/dev目录下。 给出的答案如下: #!/bin/bash directory=/dev for file in anaconda-ks.cfg install.log install.log.syslog do if [ -f $file ] then c...
有一道shell编程的题目:用shell编程,判断一文件是不是字符设备文件,如果是将其拷贝到/dev目录下。
给出的答案如下:
#!/bin/bash
directory=/dev
for file in anaconda-ks.cfg install.log install.log.syslog
do
if [ -f $file ]
then
cp $file $directory/$file.bak
echo " HI, $LOGNAME $file is backed up already in $directory !!"
fi
done
我觉得这个答案有点问题。
(1)首先anaconda-ks.cfg install.log install.log.syslog是什么文件?跟字符设备文件有什么关系?
(2)为什么要把文件拷贝到$directory/$file.bak?
如果这个程序有错的话,应该如何正确写这个程序?
给出的答案如下:
#!/bin/bash
directory=/dev
for file in anaconda-ks.cfg install.log install.log.syslog
do
if [ -f $file ]
then
cp $file $directory/$file.bak
echo " HI, $LOGNAME $file is backed up already in $directory !!"
fi
done
我觉得这个答案有点问题。
(1)首先anaconda-ks.cfg install.log install.log.syslog是什么文件?跟字符设备文件有什么关系?
(2)为什么要把文件拷贝到$directory/$file.bak?
如果这个程序有错的话,应该如何正确写这个程序?
|
anaconda-ks.cfg install.log install.log.syslog
一般系统安装完成后, 在/root目录下会有这三个文件, 都是文本文件, 分别是安装系统所用的kickstart配置, 安装系统log, 和syslog记录的一些log.
显然所给的shell程序是不符合要求的. 判断文件是否是字符设备文件可以用
if [ -c $file ] ; then
....
else
....
fi
一般系统安装完成后, 在/root目录下会有这三个文件, 都是文本文件, 分别是安装系统所用的kickstart配置, 安装系统log, 和syslog记录的一些log.
显然所给的shell程序是不符合要求的. 判断文件是否是字符设备文件可以用
if [ -c $file ] ; then
....
else
....
fi
|
(2)为什么要把文件拷贝到$directory/$file.bak?
就是把文件拷贝到/dev下 并加了个.bak的后缀 这没什么错误啊 改个名而已啊
就是把文件拷贝到/dev下 并加了个.bak的后缀 这没什么错误啊 改个名而已啊
|
字符型设备是在/dev目录下,属性为c的,属性为b的是块设备文件。看ls出来的属性列的第一个字母
[root][~]# ls -l /dev/
total 0
crw-rw---- 1 root video 10, 175 2009-08-27 10:51 agpgart
drwxr-xr-x 2 root root 620 2009-08-27 10:51 block
drwxr-xr-x 2 root root 60 2009-08-27 10:51 bsg
drwxr-xr-x 3 root root 60 2009-08-27 10:51 bus
lrwxrwxrwx 1 root root 3 2009-08-27 10:51 cdrom -> hda
drwxr-xr-x 2 root root 2.6K 2009-08-27 10:52 char
crw------- 1 root root 5, 1 2009-08-27 10:52 console
lrwxrwxrwx 1 root root 11 2009-08-27 10:51 core -> /proc/kcore
crw-rw---- 1 root root 10, 63 2009-08-27 10:51 cpu_dma_latency
drwxr-xr-x 5 root root 100 2009-08-27 10:51 disk
crw-rw---- 1 root audio 14, 9 2009-08-27 10:51 dmmidi
lrwxrwxrwx 1 root root 13 2009-08-27 10:51 fd -> /proc/self/fd
crw-rw-rw- 1 root root 1, 7 2009-08-27 10:51 full
brw-rw---- 1 root cdrom 3, 0 2009-08-27 10:51 hda
你可以ls一下/dev的目录,然后看下有没有这三个文件,要是有看看他们的属性。我的系统不是redhat的,
所以没有这三个文件...
[root][~]# ls -l /dev/
total 0
crw-rw---- 1 root video 10, 175 2009-08-27 10:51 agpgart
drwxr-xr-x 2 root root 620 2009-08-27 10:51 block
drwxr-xr-x 2 root root 60 2009-08-27 10:51 bsg
drwxr-xr-x 3 root root 60 2009-08-27 10:51 bus
lrwxrwxrwx 1 root root 3 2009-08-27 10:51 cdrom -> hda
drwxr-xr-x 2 root root 2.6K 2009-08-27 10:52 char
crw------- 1 root root 5, 1 2009-08-27 10:52 console
lrwxrwxrwx 1 root root 11 2009-08-27 10:51 core -> /proc/kcore
crw-rw---- 1 root root 10, 63 2009-08-27 10:51 cpu_dma_latency
drwxr-xr-x 5 root root 100 2009-08-27 10:51 disk
crw-rw---- 1 root audio 14, 9 2009-08-27 10:51 dmmidi
lrwxrwxrwx 1 root root 13 2009-08-27 10:51 fd -> /proc/self/fd
crw-rw-rw- 1 root root 1, 7 2009-08-27 10:51 full
brw-rw---- 1 root cdrom 3, 0 2009-08-27 10:51 hda
你可以ls一下/dev的目录,然后看下有没有这三个文件,要是有看看他们的属性。我的系统不是redhat的,
所以没有这三个文件...
|
$ file /dev/tty1
/dev/tty1: character special (4/1)
/dev/tty1: character special (4/1)