一 利用ls取得目录内容
DestDir=~/tmp ###查看目录~/tmp
这里需要注意~不可以放到单引号或双引号中去,否则会失去家目录的替换效果
DestDir=~/tmp ###查看目录~/tmp
这里需要注意~不可以放到单引号或双引号中去,否则会失去家目录的替换效果
DirCnt=$(ls $DestDir) ###变量DirCnt的内容即为DestDir目录内的文件列表,运用for循环,可以逐一处理列表中每个文件
****DirCnt=$(ls -A $DestDir) ###包括隐藏文件
for f in $DirCnt
do
echo $f
done
****DirCnt=$(ls -A $DestDir) ###包括隐藏文件
for f in $DirCnt
do
echo $f
done
范例:listtoolong.sh
#!/bin/bash
shopt -s -o nounset
DestDir=/home/shellstudy
while read f
do
echo $f
done < <(find $DestDir -name '*.txt') ###这里两个左向箭头之间需要加空格,否则会出现错误。 将/home/shellstudy目录中后面符合*.txt的文件找出来,然后放入循环while中。
#!/bin/bash
shopt -s -o nounset
DestDir=/home/shellstudy
while read f
do
echo $f
done < <(find $DestDir -name '*.txt') ###这里两个左向箭头之间需要加空格,否则会出现错误。 将/home/shellstudy目录中后面符合*.txt的文件找出来,然后放入循环while中。
xargs命令 调整一次要取用的文件个数
xargs -n number 一行显示number个文件个数
[root@bogon shellstudy]# find /home/shellstudy -name '*.txt'|xargs -n 1 一行显示1个文件个数
/home/shellstudy/quote.txt
/home/shellstudy/number.txt
/home/shellstudy/file001.txt
/home/shellstudy/grade.txt
[root@bogon shellstudy]# find /home/shellstudy -name '*.txt'|xargs -n 2 一行显示2个文件个数
/home/shellstudy/quote.txt /home/shellstudy/number.txt
/home/shellstudy/file001.txt /home/shellstudy/grade.txt
[root@bogon shellstudy]# find /home/shellstudy -name '*.txt'|xargs -n 10 一行显示10个文件个数
/home/shellstudy/quote.txt /home/shellstudy/number.txt /home/shellstudy/file001.txt /home/shellstudy/grade.txt
二 判断文件是否存在
if [ -f /etc/rc.d/rc.firewall ];
then
. /etc/rc.d/rc.firewall
fi
#####用-f 判断rc.firewall 是否存在,存在就用. 来执行
if [ -f /etc/rc.d/rc.firewall ];
then
. /etc/rc.d/rc.firewall
fi
#####用-f 判断rc.firewall 是否存在,存在就用. 来执行
if [ -d /etc/rc.d ]
then
echo 'this is redhat base.'
elif[ -d /etc/rc.d ]
then
echo 'this is debian base.'
else
echo 'this is unknown.'
fi
####用-d 判断目录/etc/rc.d是否存在
then
echo 'this is redhat base.'
elif[ -d /etc/rc.d ]
then
echo 'this is debian base.'
else
echo 'this is unknown.'
fi
####用-d 判断目录/etc/rc.d是否存在
三建立文件
意见文件建立方式
> test.txt 使用转向输出建立
:> test.txt 配合空命令:建立
:> .test.txt 建立隐藏文件
touch test.txt 修改文件,如果不存在,会新建一个文件
echo 'hello bash.' > test.txt 建立文件时,初始化内容
ln test.txt test2.txt 利用ln,建立另外一个文件的复本
删除就很简单了 rm test.txt 这里的rm实际是rm -i 可以通过alias查看
意见文件建立方式
> test.txt 使用转向输出建立
:> test.txt 配合空命令:建立
:> .test.txt 建立隐藏文件
touch test.txt 修改文件,如果不存在,会新建一个文件
echo 'hello bash.' > test.txt 建立文件时,初始化内容
ln test.txt test2.txt 利用ln,建立另外一个文件的复本
删除就很简单了 rm test.txt 这里的rm实际是rm -i 可以通过alias查看
四建立目录
mkdir testit 建立目录 0777-0022=0755
mkdir -m 711 testit 建立目录,并给定权限值 0711
mkdir -m 700 .testit 建立隐藏目录
mkdir -p testit/t1/t2/t3 建立多层目录
mkdir -m 711 -p testit/t1/t2/t3 最下层t3权限为711,其他未755
rmdir testit 删除目录
rmdir -p testit/t1/t2/t3 删除多层目录
rm -Rf testit 删除非空目录 -R 递归式删除 -f 强制删除
mkdir testit 建立目录 0777-0022=0755
mkdir -m 711 testit 建立目录,并给定权限值 0711
mkdir -m 700 .testit 建立隐藏目录
mkdir -p testit/t1/t2/t3 建立多层目录
mkdir -m 711 -p testit/t1/t2/t3 最下层t3权限为711,其他未755
rmdir testit 删除目录
rmdir -p testit/t1/t2/t3 删除多层目录
rm -Rf testit 删除非空目录 -R 递归式删除 -f 强制删除
五 建立区块设备文件
用户存储数据的媒体,或可供读取的借口设备 都被称为区块设备文件 例如:硬盘分区和CDROM等外接设备
基本语法:
mknod 选项 文件名 文件形态 主要设备代码(MAJOR) 次要设备代码(MINOR)
文件形态代码
b 区块设备文件
c 字符设备文件
p FIFO文件
选项 -m 文件权限值
主要设备代码(MAJOR) 硬件的分类
次要设备代码(MINOR) 硬件分类再细分其特殊属性
IDE硬盘分属MAJOR为3的类别,而第一个IDE分区/dev/hda1用(3,1)来标记,/dev/hda3用(3,3)来标记
ls -la /dev/sda1 硬盘分区
brw-rw---- 1 root disk 8, 1 Oct 22 2009 /dev/sda1 ####b :区块设备文件 /dev/sda1用(8,1)来标记
[root@bogon shellstudy]# ls -la /dev/hdc 光驱
brw------- 1 oracle disk 22, 0 Oct 22 2009 /dev/hdc ####b :区块设备文件 /dev/hdc用(22,0)来标记
用户存储数据的媒体,或可供读取的借口设备 都被称为区块设备文件 例如:硬盘分区和CDROM等外接设备
基本语法:
mknod 选项 文件名 文件形态 主要设备代码(MAJOR) 次要设备代码(MINOR)
文件形态代码
b 区块设备文件
c 字符设备文件
p FIFO文件
选项 -m 文件权限值
主要设备代码(MAJOR) 硬件的分类
次要设备代码(MINOR) 硬件分类再细分其特殊属性
IDE硬盘分属MAJOR为3的类别,而第一个IDE分区/dev/hda1用(3,1)来标记,/dev/hda3用(3,3)来标记
ls -la /dev/sda1 硬盘分区
brw-rw---- 1 root disk 8, 1 Oct 22 2009 /dev/sda1 ####b :区块设备文件 /dev/sda1用(8,1)来标记
[root@bogon shellstudy]# ls -la /dev/hdc 光驱
brw------- 1 oracle disk 22, 0 Oct 22 2009 /dev/hdc ####b :区块设备文件 /dev/hdc用(22,0)来标记
六 建立字符设备文件
可以读取序行字符的周边,如键盘,串行端口,鼠标,终端 都被称为字符设备文件
基本语法:
mknod 选项 文件名 文件形态 主要设备代码(MAJOR) 次要设备代码(MINOR)
mknod -m 666 nullfile c 1 3 ####建立一个和/dev/null相同属性的字符设备文件 这个文件和/dev/null具有相同的属性
cat /etc/hosts > nullfile ###凡是丢给nullfile的内容,立刻丢失
cp nullfile /var/log/apache2/access.log ###清空access.log的内容
*****重新建立/dev/null文件,这个文件丢失了,主机会出现很奇怪的状态
mknod -m 666 /dev/null c 1 3
可以读取序行字符的周边,如键盘,串行端口,鼠标,终端 都被称为字符设备文件
基本语法:
mknod 选项 文件名 文件形态 主要设备代码(MAJOR) 次要设备代码(MINOR)
mknod -m 666 nullfile c 1 3 ####建立一个和/dev/null相同属性的字符设备文件 这个文件和/dev/null具有相同的属性
cat /etc/hosts > nullfile ###凡是丢给nullfile的内容,立刻丢失
cp nullfile /var/log/apache2/access.log ###清空access.log的内容
*****重新建立/dev/null文件,这个文件丢失了,主机会出现很奇怪的状态
mknod -m 666 /dev/null c 1 3
七建立FIFO文件
是一种命令管道,具有先进入者先读出的序行特性
mknod 选项 文件名 文件形态 ###注意点:建立啊FIFO,不用指定 主要设备代码(MAJOR) 次要设备代码(MINOR)
例如:
[root@bogon shellstudy]# echo 'hi,how are you?' > myfifo
[root@bogon shellstudy]# cat < myfifo
hi,how are you?
是一种命令管道,具有先进入者先读出的序行特性
mknod 选项 文件名 文件形态 ###注意点:建立啊FIFO,不用指定 主要设备代码(MAJOR) 次要设备代码(MINOR)
例如:
[root@bogon shellstudy]# echo 'hi,how are you?' > myfifo
[root@bogon shellstudy]# cat < myfifo
hi,how are you?
八建立socket文件
mksock mysocket ###mksock属于MAKEDEV套件的一部分,这个程序可以单独编译,make mksock,接着讲mksock复制放入/usr/local/sbin中
在/dev中有一个重要的/dev/log文件,不过不慎丢失,可以用mksock重建
mksock /dev/log
chmod 666/dev/log
mksock mysocket ###mksock属于MAKEDEV套件的一部分,这个程序可以单独编译,make mksock,接着讲mksock复制放入/usr/local/sbin中
在/dev中有一个重要的/dev/log文件,不过不慎丢失,可以用mksock重建
mksock /dev/log
chmod 666/dev/log
九建立符号链接文件
ln -s test.txt tfile
ln -sf test.txt tfile
ln -s /root/tmp mytmp
ln -s test.txt tfile
ln -sf test.txt tfile
ln -s /root/tmp mytmp
十取得文件的属性
一个文件的13个属性
设备编号 inode编号 文件模式 连接文件数量 文件拥有者编号 文件隶属群组编号 设备标识符 文件大小 取用文件的时间 修改文件的时间 改变文件模式的时间
区块大小 配置区块数
stat 取得文件系统的属性
stat -f /dev/sda1 -f 取得是文件系统,而不是文件
[root@bogon shellstudy]# stat -f /dev/sda1
File: "/dev/sda1"
ID: 0 Namelen: 255 Type: tmpfs
Blocks: Total: 129475 Free: 129433 Available: 129433 Size: 4096
Inodes: Total: 129475 Free: 129183
文件系统的格式代码:
一个文件的13个属性
设备编号 inode编号 文件模式 连接文件数量 文件拥有者编号 文件隶属群组编号 设备标识符 文件大小 取用文件的时间 修改文件的时间 改变文件模式的时间
区块大小 配置区块数
stat 取得文件系统的属性
stat -f /dev/sda1 -f 取得是文件系统,而不是文件
[root@bogon shellstudy]# stat -f /dev/sda1
File: "/dev/sda1"
ID: 0 Namelen: 255 Type: tmpfs
Blocks: Total: 129475 Free: 129433 Available: 129433 Size: 4096
Inodes: Total: 129475 Free: 129183
文件系统的格式代码:
stat 取得文件的属性
[root@bogon shellstudy]# stat listtoolong.sh
File: `listtoolong.sh'
Size: 120 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 719591 Links: 1
Access: (0744/-rwxr--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2010-07-13 11:26:23.000000000 -0400
Modify: 2010-07-13 11:26:20.000000000 -0400
Change: 2010-07-13 11:26:20.000000000 -0400
文件的格式代码:
[root@bogon shellstudy]# stat listtoolong.sh
File: `listtoolong.sh'
Size: 120 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 719591 Links: 1
Access: (0744/-rwxr--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2010-07-13 11:26:23.000000000 -0400
Modify: 2010-07-13 11:26:20.000000000 -0400
Change: 2010-07-13 11:26:20.000000000 -0400
文件的格式代码:
chattr用来改变文件的属性
lsattr用来查看属性
lsattr用来查看属性
十一对比文件的差异
diff 选项 文件1 文件2
对比内容一致,$?返回值为0,如果不一致,$?返回值为1.
diff的其他用法
diff 选项 旧文件 新文件 > patch文件
测试方法:
diff 选项 文件1 文件2
对比内容一致,$?返回值为0,如果不一致,$?返回值为1.
diff的其他用法
diff 选项 旧文件 新文件 > patch文件
测试方法:
十二搜寻文件内容
grep -q 关键字 文件
grep -q 关键字 文件
十三建立临时文件
建立临时盘的注意点:
方法1例如:TMP_file=“/tmp/tmp.$$”
方法2mktemp
mktemp 选项 临时盘模板 建立成功,$?返回值为0,如果不成功,$?返回值为1.
直接执行
指定临时文件的模板
指定临时盘的前置目录名称
使用选项-t
使用选项-d
建立临时盘的注意点:
方法1例如:TMP_file=“/tmp/tmp.$$”
方法2mktemp
mktemp 选项 临时盘模板 建立成功,$?返回值为0,如果不成功,$?返回值为1.
直接执行
指定临时文件的模板
指定临时盘的前置目录名称
使用选项-t
使用选项-d
十四复制文件
cp 选项 来源文件 目标文件
cp 选项 来源文件 目标文件
大小写互相转换
转换编码
主机中关于本地自然语言的相关信息,称为locale #####注意和locate就查一个字母
locale格式:语系_地区.文字编码 ####中文编码zh_CN.GBK 最近有zh_CN.UTF-8
主机系统中,至少两个环境变量和locale有关 declare -x LANG="zh_CN.GBK" 和 declare -x LC_ALL="zh_CN.GBK"
[root@bogon shellstudy]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
主机中关于本地自然语言的相关信息,称为locale #####注意和locate就查一个字母
locale格式:语系_地区.文字编码 ####中文编码zh_CN.GBK 最近有zh_CN.UTF-8
主机系统中,至少两个环境变量和locale有关 declare -x LANG="zh_CN.GBK" 和 declare -x LC_ALL="zh_CN.GBK"
[root@bogon shellstudy]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
转换编码的工具:iconv ###通常都是GBK转换为UTF8,
iconv -f 来源文件编码 -t 目的文件编码 来源文件 ###默认结果导向标准输出
iconv -f 来源文件编码 -t 目的文件编码 来源文件 -o 目的文件####默认结果导向目的文件
iconv -l 列出支持的编码
iconv -f 来源文件编码 -t 目的文件编码 来源文件 ###默认结果导向标准输出
iconv -f 来源文件编码 -t 目的文件编码 来源文件 -o 目的文件####默认结果导向目的文件
iconv -l 列出支持的编码
转载于:https://blog.51cto.com/wangxiang2010/348040