以下为linux常用的命令举例。
(注:#后面的为注释,输入命令时不要写)
(四)文件管理
4.1 cat(把文件传到基本输出)
cat file.txt #显示文件file.txt的内容
cat -n file.txt #显示文件file.txt的内容,由1开始对所有输出的行数编号
cat -b file.txt #显示文件file.txt的内容,由1开始对所有输出的行数编号,不对空白行编号
cat -s file.txt #当遇到有连续两行以上的空白行,就代换为一行的空白行
cat > file.txt #将命令行输入的内容保存为文件file.txt
cat >> file.txt #将命令行输入的内容追加到文件file.txt
cat file1.txt > file2.txt #将文件file1.txt的内容复制到文件file2.txt
cat file1.txt >> file2.txt #将文件file1.txt的内容追加到文件file2.txt
cat /dev/null > file.txt #将file.txt文件清空
cat a.txt b.txt > c.txt #将文件a.txt与b.txt的内容合并为文件c.txt
cat proc.tar.gz* > proc.tar.gz #将各个分卷压缩包合成为一个proc.tar.gz文件
cat proc.tar.gz* | tar -xzf - #将各个分卷压缩包解压到当前目录
4.2 chgrp(更改文件或目录的所属群组)
chgrp grp proc #将proc文件或目录的群组设为grp
chgrp grp proc -R #将目录proc及包含的所有文件或目录的群组设为grp
4.3 chmod(更改文件或目录的权限)
chmod 755 proc -R #将目录proc的权限改为rwxr-xr-x
chmod +x proc #为文件或目录proc增加可执行权限
chmod -x proc #去掉文件或目录proc的可执行权限
chmod =r proc #将文件或目录设为只读权限r--r--r--
注:有关权限代号的部分,列表于下:
r:读取权限,数字代号为"4"。
w:写入权限,数字代号为"2"。
x:执行权限,数字代号为"1"。
-:不具任何权限,数字代号为"0"。
4.4 chown(更改文件或目录的拥有者或所属群组)
chown sun proc -R #将目录proc及包含的所有目录和文件的拥有者设为sun用户
chown sun.grp proc -R #将目录proc及包含的所有目录和文件的拥有者设为sun用户,所属群组为grp组
chown sun.grp * -R #将当前目录下所有的文件和目录的拥有者设为sun用户,所属群组为grp组
4.5 cp(复制文件或目录)
cp proc1/file.txt file.txt #将目录proc1中的文件file.txt复制到当前目录
cp -r proc1/* proc2 #将目录proc1下的所有文件和目录复制到proc2目录,操作之后proc1和proc2目录的结构是一致的
cp file.txt /home/sun/ #将文件file.txt复制到/home/sun/目录下
cp f1.txt f2.txt /home/sun/ #将文件f1.txt与f2.txt文件复制到/home/sun/目录下
cp ../file.txt file.txt #将上一级目录中的文件file.txt复制到当前目录
cp ../file.txt . #同上
cp proc1/file.txt new.txt #将目录proc1中的文件file.txt复制到当前目录,并重命名为new.txt
cp -P proc1/file.ln new.ln #如果被复制的文件为链接文件,则应添加-P选项;如果省略-P选项,复制后的new.ln文件将是原链接文件指向的文件,而非链接文件本身
cp -rPu proc1/* proc2 #将目录proc1下的所有文件和目录复制到proc2目录,源文件的更改时间比目标文件晚或目标文件不存在时,才进行复制操作;并且其中的链接文件会保持不变,操作之后proc1和proc2目录的结构是一致的
cp --parents setup/readme.txt code/ #将setup/readme.txt文件复制到code目录下,并保留目录结构。此例复制后的路径为:code/setup/readme.txt
4.6 diff(比较文件的差异)
diff file1.txt file2.txt #比较文件file1.txt与file2.txt的差异
diff -r dir1 dir2 #比较目录dir1与dir2的差异
diff -r --brief dir1 dir2 #比较目录dir1与dir2的差异,但只返回哪些文件存在差异
diff -Naur dir1 dir2 > diff.patch #比较目录dir1与dir2的差异,并保存为patch。N表示如果某个文件仅在一个目录中出现,则假定其在另一个目录中为空文件;a表示将所有文件当做文本文件看待,适合于二进制文件的比较;u表示以合并的方式显示文件内容的不同;r表示比较子目录中的文件。
4.7 find(查找文件或目录)
find -name 'A.txt' #在当前目录下查找文件A.txt
find -iname 'A.txt' #以不区分大小写的形式在当前目录下查找文件A.txt,例如:A.txt,A.TXT,a.txt,a.Txt,a.TXT等都可以匹配
find -lname 'sh.ln' #在当前目录下查找软链接文件sh.ln
find -type d #在当前目录下查找所有的目录
find -type l #在当前目录下查找所有的链接文件
find ~/ -name "A*" #在用户默认目录下查找所有以A开头的文件和目录
find -perm 755 -ls #在当前目录下查找所有权限为755的文件并列出详细信息
find -empty #在当前目录下查找大小为0的文件或空目录
find -type f -name "*.bak" -exec rm -rf {} \; #在当前目录下查找所有后缀为.bak的文件,并删除
find -type f -name "*.bak" | xargs rm -rf #同上,用“|”管道操作的速度要快于上述方法
find ! -name '*.java' -type f #在当前目录下查找所有后缀不为.java的文件
find -path './res' -prune -o -name "*.java" -print #在当前目录下,排除res目录,查找所有后缀为.java的文件
find \( -path './res' -o -path './ant' \) -prune -o -name "*.java" -print #在当前目录下,排除res和ant目录,查找所有后缀为.java的文件
4.8 ln(创建文件或目录链接)
ln -s abc.txt abc.ln #为abc.txt建立软链接文件abc.ln
ln -sf abc.txt abc.ln #为abc.txt强制建立软链接文件abc.ln,如果abc.ln已存在,则覆盖之
ln abc.txt abc.ln #为abc.txt建立硬链接文件abc.ln
注:
链接文件分为:
软链接:也称符号链接,即为文件或目录创建一个快捷方式。当源文件删除或移动后,此链接失效。
硬链接:此链接文件与源文件指向同一个i节点,所以当源文件内容变化后,硬链接的文件也将同步更新。可理解为:给一个文件取多个名字,放在不同的目录中,方便用户使用。当源文件删除或移动后,此链接成为普通文件,依然有效。
4.9 mv(移动或重命名现有的文件或目录)
mv abc.txt def.txt #将文件abc.txt重命名为def.txt
mv abc.txt proc/ #将文件abc.txt移动到proc目录下
mv abc.txt proc/def.txt #将文件abc.txt移动到proc目录下,并重命名为def.txt
mv old/* proc #将目录old下的所有文件移动到proc目录下,命令运行后,old目录依然存在,只是其下的所有文件都已转移到proc目录
4.10 rm(删除文件或目录)
rm abc.txt #删除文件abc.txt
rm -f abc.txt #强制删除文件abc.txt,并在删除前不询问用户
rm -rf proc #强制删除目录proc及所包含的所有内容,并在删除前不询问用户
4.11 touch(改变文件或目录时间,创建空文件)
touch abc.txt #在当前目录下创建一个空文件abc.txt
touch sys/abc.txt #在sys目录下创建一个空文件abc.txt
touch {aa.txt,bb.txt,cc.txt} #一次性创建多个空文件
touch a.txt b.txt c.txt #一次性创建多个空文件
touch -d "3/21/2011" Shell.txt #将Shell.txt文件的时间记录改为2011年3月21日00:00
touch -d "13:56 3/21/2011" Shell.txt #将Shell.txt文件的时间记录改为2011年3月21日13:56
touch -r a.txt b.txt #将b.txt的时间记录改为与a.txt相同
附:(时间记录的格式,以下的"/"均可以用"-"代替)
"16:07 05/22/2005"
"04:07pm 05/22/2005"
"04:07pm05/22/2005"
"16:07 2005/05/22"
"04:07pm 2005/05/22"
"04:07pm2005/05/22"
4.12 vi(编辑文本文件)
vi a.txt #用vi编辑器编辑或新建文件a.txt
vi a.txt b.txt #依次编辑文件a.txt和b.txt
4.13 more(分页显示文件内容)
more a.txt #分页显示文件a.txt的内容,按空格键显示下一页,按退格键显示前一页,按回车键显示下一行
4.14 less(分页显示文件内容)
less a.txt #分页显示文件a.txt的内容,按j键向下移动一行,按k键向上移动一行
4.15 head(显示文件的前n行内容)
head a.txt #显示文件a.txt的前10行(默认)内容
head -5 a.txt #显示文件a.txt的前5行内容
head -5v a.txt #先显示文件名a.txt,再显示文件的前5行内容
head -5c a.txt #显示文件a.txt的前5个字节
4.16 tail(显示文件的后n行内容)
tail a.txt #显示文件a.txt的后10行(默认)内容
tail -5 a.txt #显示文件a.txt的后5行内容
tail -v a.txt #先显示文件名a.txt,再显示文件的后10行内容
tail -5c a.txt #显示文件a.txt的后5个字节
4.17 grep(查找文件里符合条件的字符串)
grep "select" * #在当前目录下查找包含字符串select的文件名称及所在的行
grep -l "select" * #只显示包含字符串select的文件名
grep -n "select" * #在当前目录下查找包含字符串select的文件名称及所在的行,并显示行号
grep -n "select" * -r #在当前目录及子目录下查找包含字符串select的文件名称及所在的行,并显示行号
grep -n "select" * -ri #同上,但是不区分大小写
grep -n "select" * -rI #在当前目录及子目录下查找包含字符串select的文件名称及所在的行,并显示行号,而且排除二进制文件
grep "select" package * -r #在当前目录下的package目录及其子目录下查找字符串select
grep "select" --include=*.txt * -r #只搜索以.txt为后缀的文件
grep "select" --exclude=*.bak * -r #在搜索路径中排除以.bak为后缀的文件
grep "select" --exclude-dir=out * -r #在搜索路径中排除名为out的目录及其子目录
4.18 sort(将文本文件内容排序)
sort a.txt #将a.txt文件内容以行为单位进行排序,并在终端输出
sort a.txt > sort.txt #将a.txt文件内容以行为单位进行排序,并将结果写入sort.txt文件
sort -r a.txt #将a.txt文件内容以行为单位进行逆序排序,并在终端输出
注:sort命令并不会修改源文件的内容,只会将排序后的内容输出。
4.19 scp(本地与远程服务器之间复制文件或目录)
scp -P 222 [email protected]:/home/chen/test.log . #以chen用户的身份登录到服务器100.130.99.111,服务器的SSH端口号为222,并将其上的/home/chen/test.log文件复制到本地当前目录
scp -P 222 history.txt [email protected]:/home/chen/ #将本机当前目录下的history.txt文件复制到100.130.99.111服务器的/home/chen/目录下
scp -P 222 -r [email protected]:/home/chen/pro setup/ #以chen用户的身份登录到服务器100.130.99.111,服务器的SSH端口号为222,并将其上的/home/chen/pro目录以及子目录的所有文件复制到本地的setup目录
注:使用scp命令的前提是本地和远程服务器都开启SSH服务。
4.20 stat(显示文件、目录的inode内容)
stat ab.txt #显示文件ab.txt的inode内容
4.21 cut(显示每行中指定列的内容)
cut -c 5 ab.txt #显示ab.txt中每行的第5列的内容
cut -c -5 ab.txt #显示ab.txt中每行的第1~5列的内容
cut -c 5- ab.txt #显示ab.txt中每行的第5列到最后一列的内容
cut -c 2-5 ab.txt #显示ab.txt中每行的第2~5列的内容
4.22 wc(文本统计)
wc ab.txt #依次显示ab.txt文件的行数、单词数与字符数
wc -l ab.txt #显示ab.txt文件的行数
wc -w ab.txt #显示ab.txt文件的单词数
wc -m ab.txt #显示ab.txt文件的字符数
wc -c ab.txt #显示ab.txt文件的字节数
wc -L ab.txt #显示ab.txt文件中最长行的字符数
4.23 du(显示目录或文件的大小)
du -a #显示当前目录中每个文件的大小
du -h #以K,M,G为单位,提高信息的可读性
du -s #仅显示当前目录的总计大小
du -S #显示个别目录的大小时,并不含其子目录的大小
du -sh test #以K,M,G为单位,并仅显示test文件或目录的总计大小
4.24 split(切割文件)
split proc.tar.gz -b 2m #将proc.tar.gz文件分割为多个小文件,并保持每个小文件的大小不超过2m字节。命令运行后,源文件依然存在。生成的小文件以默认格式命名,为:xaa、xab等
split proc.tar.gz -b 2m -d #基本同上,只是生成的小文件以数字格式命名,为:x00、x01等
split proc.tar.gz -b 2m -d proc.tar.gz #基本同上,只是生成的小文件名前缀是自定义的,为:proc.tar.gz00、proc.tar.gz01等
split a.txt -C 300k -d a.txt #将a.txt文本文件分割为多个小文件,并保持每个小文件的大小不超过300k字节,而且尽量保持每行的完整性
4.25 locate(在系统数据库中查找文件或目录)
locate a.txt #在系统数据库中查找名为a.txt的文件
locate -e a.txt #在系统数据库中查找名为a.txt并且存在的文件
locate -c a.txt #在系统数据库中查找名为a.txt并且只返回查找到的文件数目