当前位置: 澳门新濠3559 > 操作系统 > 正文

@表示连结文件,4、递归列出最新修改的文件

时间:2019-11-22 03:29来源:操作系统
如何统计 Linux 中文件和文件夹/目录的数量 在本教程中,我们将向您展示如何使用多个命令,并使用 ls、egrep、wc 和 find命令执行一些高级操作。 下面的命令将可用在多个方面。   为了

如何统计 Linux 中文件和文件夹/目录的数量

在本教程中,我们将向您展示如何使用多个命令,并使用 ls、egrep、wc 和 find 命令执行一些高级操作。 下面的命令将可用在多个方面。

 

为了实验,我打算总共创建 7 个文件和 2 个文件夹(5 个常规文件和 2 个隐藏文件)。 下面的 tree 命令的输出清楚的展示了文件和文件夹列表。

 

# tree -a /opt

/opt

├──magi

│  └──2g

│  ├──test5.txt

│  └──.test6.txt

├──test1.txt

├──test2.txt

├──test3.txt

├──.test4.txt

└──test.txt

 

2directories,7files

 

示例 1

 

统计当前目录的文件(不包括隐藏文件)。 运行以下命令以确定当前目录中有多少个文件,并且不计算点文件(LCTT 译注:点文件即以“.” 开头的文件,它们在 Linux 默认是隐藏的)。

 

# ls -l . | egrep -c '^-'

4

 

细节:

 

  • ls : 列出目录内容

  • -l : 使用长列表格式

  • . : 列出有关文件的信息(默认为当前目录)

  • | : 将一个程序的输出发送到另一个程序进行进一步处理的控制操作符

  • egrep : 打印符合模式的行

  • -c : 通用输出控制

  • '^-' : 以“-”开头的行(ls -l 列出长列表时,行首的 “-” 代表普通文件)

1、 ls: 类似于dos下的dir命令

ls最常用的参数有三个: -a -l -F。

ls –a

Linux上的文件以.开头的文件被系统视为隐藏文件,仅用ls命令是看不到他们的,而用ls -a除了显示一般文件名外,连隐藏文件也会显示出来。

ls –l

该参数显示更详细的文件信息。

ls –F

使用这个参数表示在文件的后面多添加表示文件类型的符号,例如*表示可执行,/表示目录,@表示连结文件,这都是因为使用了-F这个参数。但是现在基本上所有的Linux发行版本的ls都已经内建了-F参数,也就是说,不用输入这个参数,我们也能看到各种分辨符号。

C
cat zdd 浏览文件zdd的内容
cat zdd1 zdd2 浏览多个文件的内容
cat -n zdd浏览文件zdd的内容并显示行号

1、查找重复的文件(基于md5)

 

2、cd: 用于切换用户当前工作目录

cd aaa 进入aaa目录

cd 命令后不指定目录,会切换到当前用户的home 目录

cd ~ 作用同cd后不指定目录,切换到当前用户的home 目录

cd - 命令后跟一个减号,则会退回到切换前的目录

cd .. 返回到当前目录下的上一级目录

cd 回到起始目录,也即刚登陆到系统的目录,cd后面无参数
cd / 回到根目录
cd .. 返回上一级目录

find -type f -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 33 | cut -c 35- 

示例 2

 

统计当前目录包含隐藏文件在内的文件。 包括当前目录中的点文件。

 

# ls -la . | egrep -c '^-'

5

 

示例 3

 

运行以下命令来计数当前目录的文件和文件夹。 它会计算所有的文件和目录。

 

# ls -l | wc -l

5

 

细节:

 

  • ls : 列出目录内容

  • -l : 使用长列表格式

  • | : 将一个程序的输出发送到另一个程序进行进一步处理的控制操作符

  • wc : 这是一个统计每个文件的换行符、单词和字节数的命令

  • -l : 输出换行符的数量

3、pwd:用于显示用户当前工作目录

cd - 返回到最近使用的目录

2、寻找最大的10个文件

 

4、mkdir 和 rmdir

midir:创建目录 rmdir:删除目录

两个命令都支持-p参数,对于mkdir命令若指定路径的父目录不存在则一并创建,对于rmdir命令则删除指定路径的所有层次目录,如果文件夹里有内容,则不能用rmdir命令

如下:

mkdir -p 1/2/3

rmdir -p 1/2/3

D
df -kh 查看磁盘信息

find / -type f 2>/dev/null | xargs du 2>/dev/null | sort -n | tail -n 10 | cut -f 2 | xargs -n 1 du -h

示例 4

 

统计当前目录包含隐藏文件和目录在内的文件和文件夹。

 

# ls -la | wc -l

8

 

示例 5

 

递归计算当前目录的文件,包括隐藏文件。

 

# find . -type f | wc -l

7

 

细节 :

 

  • find : 搜索目录结构中的文件

  • -type : 文件类型

  • f : 常规文件

  • wc : 这是一个统计每个文件的换行符、单词和字节数的命令

  • -l : 输出换行符的数量

5、cp:复制命令

复制一个文件到另一目录:cp 1.txt ../test2

复制一个文件到本目录并改名:cp 1.txt 2.txt

复制一个文件夹a并改名为b:cp -r a b

du -sh foldername 查看文件夹大小,-h表示以human readable格式显示大小,-s表示累加各个文件的大小。

3、寻找文件名长度前10的文件

 

6、mv:移动命令

将一个文件移动到另一个目录:mv 1.txt ../test1

将一个文件在本目录改名:mv 1.txt 2.txt

将一个文件一定到另一个目录并改名:mv 1.txt ../test1/2.txt

H
history 显示命令历史记录
hostname 显示当前登录的主机名

find | sed -e "s/^.*///" | awk ' BEGIN { FS=""} { print NF "  " $0  } ' | sort -nrf | head -10

示例 6

 

使用 tree 命令输出目录和文件数(不包括隐藏文件)。

 

# tree | tail -1

2directories,5files

 

示例 7

 

使用包含隐藏文件的 tree 命令输出目录和文件计数。

 

# tree -a | tail -1

2directories,7files

 

示例 8

 

运行下面的命令递归计算包含隐藏目录在内的目录数。

 

# find . -type d | wc -l

3

 

示例 9

 

根据文件扩展名计数文件数量。 这里我们要计算 .txt 文件。

 

# find . -name "*.txt" | wc -l

7

 

示例 10

 

组合使用 echo 命令和 wc 命令统计当前目录中的所有文件。 4 表示当前目录中的文件数量。

 

# echo *.* | wc

1       4      39

 

示例 11

 

组合使用 echo 命令和 wc 命令来统计当前目录中的所有目录。 第二个 1 表示当前目录中的目录数量。

 

# echo */ | wc

1       1       6

 

示例 12

 

组合使用 echo 命令和 wc 命令来统计当前目录中的所有文件和目录。 5 表示当前目录中的目录和文件的数量。

 

# echo * | wc

1544

 

示例 13

 

统计系统(整个系统)中的文件数。

 

# find / -type f | wc -l

69769

 

示例-14

 

统计系统(整个系统)中的文件夹数。

 

# find / -type d | wc -l

8819

 

示例-15

 

运行以下命令来计算系统(整个系统)中的文件、文件夹、硬链接和符号链接数。

 

# find / -type d -exec echo dirs ; -o -type l -exec echo symlinks ; -o -type f -links +1 -exec echo hardlinks ; -o -type f -exec echo files ; | sort | uniq -c

   8779dirs

  69343files

     20hardlinks

  11646symlinks

7、rm命令

rm命令用于删除文件,与dos下的del/erase命令相似,rm命令常用的参数有三个:-i,-r,-f。

–i :系统在删除文件之前会先询问确认,用户回车之后,文件才会真的被删除。需要注意,linux下删除的文件是不能恢复的,删除之前一定要谨慎确认。

–r:该参数支持目录删除,功能和rmdir命令相似。

–f:和-i参数相反,-f表示强制删除

L

4、递归列出最新修改的文件

8、du、df命令

du命令可以显示目前的目录所占用的磁盘空间,df命令可以显示目前磁盘剩余空间。

如果du命令不加任何参数,那么返回的是整个磁盘的使用情况,如果后面加了目录的话,就是这个目录在磁盘上的使用情况。

du -hs 指定目录 查看指定目录的总大小

du -hs ./* 查看当前目录下的所有文件夹和文件的大小

这两个命令都支持-k,-m和-h参数,-k和-m类似,都表示显示单位,一个是k字节一个是兆字节,-h则表示human-readable,即友好可读的显示方式。

ls -al 列出所有文件的完整信息,每行一个文件

find . -type f -printf '%TY-%Tm-%Td %TT %pn' | sort 

9、cat命令

cat命令的功能是显示或连结一般的ascii文本文件。cat是concatenate的简写,类似于dos下面的type命令。用法如下:

cat file1 显示file1文件内容

cat file1 file2 依次显示file1,file2的内容

cat file1 file2 > file3 把file1, file2的内容结合起来,再“重定向(>)”到file3文件中。

">"是右重定向符,表示将左边命令结果当成右边命令的输入,注意:如果右侧文件是一个已存在文件,其原有内容将会被清空,而变成左侧命令输出内容。如果希望以追加方式写入,请改用">>"重定向符。

如果">"左边没有指定文件,如: cat >file1,将会等用户输入,输入完毕后再按[Ctrl]+[c]或[Ctrl]+[d],就会将用户的输入内容写入file1。

ls -tl 按最后修改时间排序

5、找到包含 pattern 的所有文件,使用vi打开它们并把光标置于第一个匹配的位置(使用'n'和':n'进行导航)

10、echo命令

echo命令的使用频率不少于ls和cat,尤其是在shell脚本编写中。

语法:echo [-ne][字符串]

功能:echo会将输入的字符串送往标准输出,输出的字符串间以空白字符隔开, 并在最后加上换行符。

参数:

-n 显示字串时在最后自动换行

-e 支持以下格式的转义字符, -E 不支持以下格式的转义字符

/a 发出警告声;

/b 删除前一个字符;

/c 最后不加上换行符号;

/f 换行但光标仍旧停留在原来的位置;

/n 换行且光标移至行首;

/r 光标移至行首,但不换行;

/t 插入tab;

/v 与/f相同;

// 插入/字符;

/nnn 插入nnn(八进制)所代表的ASCII字符;

示例:

Oracle@hjtest:~/hgd> echo "123" "456"

123 456

oracle@hjtest:~/hgd> echo "123/n456"

123/n456

oracle@hjtest:~/hgd> echo -e "123/n456"

123

456

oracle@hjtest:~/hgd> echo -E "123/n456"

123/n456

oracle@hjtest:~/hgd> echo -E "123///456"

123//456

oracle@hjtest:~/hgd> echo -e "123///456"

123/456

oracle@hjtest:~/hgd> echo -e "123/100456"

123@456

注意事项:

在Linux使用的bash下,单引号’’和双引号是有区别的,单引号忽略所有的转义,双引号不会忽略以下特殊字符:

Dollar signs ($),Back quotes (`),Backslashes (/),Excalmatory mark(!)

示例如下:

oracle@hjtest:~> echo "`TEST`"

-bash: TEST: command not found

oracle@hjtest:~> echo '`TEST`'

`TEST`

oracle@hjtest:~> echo "$TEST"

oracle@hjtest:~> echo '$TEST'

$TEST

oracle@hjtest:~> echo "//TEST"

/TEST

oracle@hjtest:~> echo '//TEST'

//TEST

oracle@hjtest:~> echo "Hello!"

echo "Hello"

Hello

oracle@hjtest:~> echo 'Hello!'

Hello!

ls -ul 按最后访问时间排序

find . -type f -exec grep -l pattern {} ; | xargs vi +/pattern

11、more,less,clear

n more,less命令

这两个命令用于查看文件,如果一个文件太长,显示内容超出一个屏幕,用cat命令只能看到最后的内容,用more和less两个命令可以分页查看。more指令可以使超过一页的文件内容分页暂停显示,用户按键后才继续显示下一页。而less除了有more的功能以外,还可以用方向键往上或往下的滚动文件,更方便浏览阅读。

less的常用动作命令:

回车键 向下移动一行;

y 向上移动一行;

空格键 向下滚动一屏;

b 向上滚动一屏;

d 向下滚动半屏;

h less的帮助;

u 向上洋动半屏;

w 可以指定显示哪行开始显示,是从指定数字的下一行显示;比如指定的是6,那就从第7行显示;

g 跳到第一行;

G 跳到最后一行;

p n% 跳到n%,比如 10%,也就是说比整个文件内容的10%处开始显示;

/pattern 搜索pattern ,比如 /MAIL表示在文件中搜索MAIL单词;

v 调用vi编辑器;

q 退出less

!command 调用SHELL,可以运行命令;比如!ls 显示当前列当前目录下的所有文件;

n clear命令

clear命令是用来清除当前屏幕显示的,不需任何参数,和dos下的cls命令功能相同。

ls -R 递归现实子目录中的文件及文件夹,这个命令配合grep可以方便的实现查找,比如在当前目录及子目录下查找文件zdd,ls -R | grep zdd

6、删除所有 文件名不为 abc 的文件

12、head,tail

n head和tail命令

都用于查看文本文件,区别在于: head显示文件的头n行,tail显示文件的尾n行,缺省情况n都为10行。可以通过-n方式指定行数,如:

head -100 file和tail -100 file分别表示显示文件头100行和尾100行内容。

n tail -f命令

可以实时查看文件新增内容。

ls -F | grep / 只列出目录

find * -maxdepth 1 -type f ! -name abc -delete 

13、wc命令

该命令用于统计指定文件中的字节数、字数、行数。该命令各选项含义如下:

-l 统计行数

-w 统计字数

-c 统计字节数

这些选项可以组合使用。输出列的顺序和数目不受选项的顺序和数目的影响。总是按下述顺序显示并且每项最多一列。

行数、字数、字节数、文件名

如果命令行中没有文件名,则输出中不出现文件名。

例如:

oracle@hjtest:~> wc 1.txt 2.txt

460 1679 16353 1.txt

300 1095 10665 2.txt

760 2774 27018 总用量

oracle@hjtest:~> wc -l 1.txt

460 1.txt

缺省参数为-lcw,即wc file1 file2命令的执行结果与上面一样。

less 分屏显示文件,按空格向下查看,并可使用上下箭头前后回看。按q键退出。

7、文件大小求和

14、grep 命令

grep是(global search regular expression(RE) and print out the line的缩写,用于从文件面搜索包含指定模式的行并打印出来,它是一种强大的文本搜索工具,支持使用正则表达式搜索文本。grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被””引用,模板后的所有字符串被看作文件名。搜索结果送到屏幕,不影响原文件内容。

grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

示例:

$ ls -l | grep '^a'

通过管道过滤ls -l输出的内容,只显示以a开头的行。

$ grep 'test' d*

显示所有以d开头的文件中包含test的行。

$ grep 'test' aa bb cc

显示在aa,bb,cc文件中匹配test的行。

$ grep '[a-z]/{5/}' aa

显示所有包含每个字符串至少有5个连续小写字符的字符串的行。

$ grep 'w/(es/)t.*/1' aa

如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(/1),找到就显示该行。如果用egrep或grep -E,就不用"/"号进行转义,直接写成'w(es)t.*/1'就可以了。

M

find . -type f -printf %s\n | paste -sd+ | bc 

15、man,logout命令

man命令

man是manual的缩写,相当于Unix/Linux的联机Help,每个系统命令和调用都有非常详细的说明,绝大多数都是英文。如:man ls即是查看ls命令的使用说明,一般还有另一种方法用来查看帮助,如:ls –help,这种方式绝大多数命令都支持。

logout命令

该命令用于退出系统,与login命令对应。

more 分屏显示文件,按空格向下查看,不支持回看,按q键退出。
man ls 查看ls命令的帮助,如果帮助有多页
空格    向下翻页
b    向上翻页
q    退出帮助

8、删除文件名符合特定格式的并且15天前的文件

16、管道和xargs

管道:

利用Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。连续使用管道意味着第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。

注意:管道左边命令的输入作为管道右边命令的输入(命令的输入是一定的),不是参数,并不是所有命令都支持管道

例子:ls | grep a 查看当前目录下名称包含a的文件或文件夹

xargs:

大多数 Linux 命令都会产生输出:文件列表、字符串列表等。但如果要使用其他某个命令并将前一个命令的输出作为参数该怎么办?例如,file 命令显示文件类型(可执行文件、ascii 文本等);你能处理输出,使其仅显示文件名,目前你希望将这些名称传递给 ls -l命令以查看时间戳记。xargs 命令就是用来完成此项工作的。

注意:find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去

例子:

1、在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中:

$ find / -name "core" -print | xargs echo "" >/tmp/core.log

2、当一个目录下文件太多时,直接用rm * 命令会包参数过长,用如下方法可以全部删除

$ls | xargs rm

O

find /backup/directory -name "FILENAME_*" -mtime +15 | xargs rm -vf 

17、basename 和 dirname

basename用于查看文件不含路径的名字,dirname则用于查看文件路径,使用效果我们测试一下便知:

> basename /home/hj/1.txt

1.txt

> dirname /home/hj/1.txt

/home/hj

> basename 1.txt

1.txt

> dirname 1.txt

.

od 查看文件的ASCII编码。

9、将子目录的所有内容都移动到当前目录

18、不带任何参数的set命令将显示shell的全部变量 

P
pwd 显示当前目录
ps 列出当前用户的进程
ps -ef 以完整信息列出所有进程

find -type f -exec mv {} . ; 

R
rm -rf zdd 删除目录zdd及其子目录,即使目录不空
rm -rf zdd/* 删除目录zdd下的所有内容,但不删除zdd本身
rm -rf * 删除当前目录下所有文件,包括子文件加及其中的文件,-r表示递归,-f表示强制删除,不询问。
rmdir zdd 删除空目录zdd
mkdir zdd 创建目录zdd

10、在adb 上 安装整个文件夹中的.apk

S
set 查看已定义变量
ssh hostname 登录到hostname

find ~/path/to/apk/files -name '*.apk' -exec adb install {} ; 

T
tar [option] file or dir
tar -xvf zdd.tar 将zdd.tar解压,解压后将产生zdd文件夹,里面包含解压后的文件 x表示解压,v表示输出解压信息,f表示操作普通文件
tar -cvf tmp.tar tmp 将文件夹tmp打包成tmp.tar
tar -rvf tmp.tar zzz 将文件zzz追加到tmp.tar中

11、递归修改目录为777

type xxx 查看xxx所在的路径。和which有何区别?

find . -exec chmod 777 {} ; 

touch命令
touch [acm] -t time file
这个命令用来修改文件的时间,a-access time, m-modification time c-do not create if file not exists
如果不指定时间,则使用当前的系统时间,如果文件不存在,且未指定-c那么将创建新的文件。可以使用这个方法快速创建文件。time的格式如下
[[CC]YY]MMDDhhmm[.SS]
touch abc 如果文件abc存在,则更新其时间为当前时间,否则创建它
touch abc -a -t
touch -m -t 201101230621 abc

12、带有完整路径ls命令

W
who 查看有哪些人登陆了系统

find `pwd` -maxdepth 1 -exec ls --color -d {} ; 

who am i 查看自己的账户信息

13、当前目录里边文本文件的个数

which ls 查看ls程序所在的路径。

file -i * | grep 'text/plain' | wc -l 

Z
zip 压缩
zip [options] dest_files source
zip -r9 ~/zdd /home/zdd/* 将目录/home/zdd下的所有文件压缩并放入当前目录下名为zdd。-r表示递归处理文件夹中的文件,9表示最大压缩率。

14、将缺少.md5的文件 自动补上.md5

unzip 解压缩
unzip -d ~/zdd zdd.zip 将zdd.zip解压到当前目录下的zdd目录中,-d表示指定解压目录。

find . ! -name *.md5 -exec 'md5sum "{}" > "{}".md5' ;

gzip 压缩/解压缩
gzip -d error_log.gz 将error_log.gz解压缩,-d表示解压缩,解压缩后error_log.gz将不复存在。

15、用find删除文件时候排除特定文件

其他
在终端上翻页(Putty窗口也可以)
向上翻页    Shift+PageUp
向下翻页    Shift+PageDown

find . ! -name -delete 

 

16、递归删除空目录

 

find . -depth -type d -empty -exec rmdir -v {} + 

 

17、把 子目录 添加到 svn ignore 中(忽略)

 

find . -type d -not ( -name .svn -prune ) -exec svn propset svn:ignore '*' {} ; 

 

18、寻找main文件 cpp

 

find . -name "*.cpp" -exec grep -Hn --color=tty -d skip "main" {} ; 

---------------------------------------------解释------------------------------

19、执行前检查

1、   ls: 类似于dos下的dir命令

find /tmp -type f -printf 'rm "%p";n' 

ls最常用的参数有三个: -a -l -F。

20、递归的改变扩展名

ls –a

find . -type f -name *.c | while read f; do mv $f "`basename $f .c`".C; done 

Linux上的文件以.开头的文件被系统视为隐藏文件,仅用ls命令是看不到他们的,而用ls -a除了显示一般文件名外,连隐藏文件也会显示出来。

21、使用 find sed 批量重命名

ls –l

find . -exec bash -c "mv '{}' '`echo {} |sed -e 's/foo/bar/g'`"' ; 

该参数显示更详细的文件信息。

22、查找文件并计算md5

ls –F

find -type f | grep -v "^./.git" | xargs md5sum | md5sum 

使用这个参数表示在文件的后面多添加表示文件类型的符号,例如*表示可执行,/表示目录,@表示连结文件,这都是因为使用了-F这个参数。但是现在基本上所有的Linux发行版本的ls都已经内建了-F参数,也就是说,不用输入这个参数,我们也能看到各种分辨符号。

23、 模拟DOS 的 tree

 

find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g' 

2、cd: 用于切换用户当前工作目录

24、运行多个脚本

cd aaa 进入aaa目录

find /var/scripts -name 'backup*' -exec {} ';' 

cd    命令后不指定目录,会切换到当前用户的home 目录

25、列出用户目录下具有指定格式后缀的文件,然后移除文件后缀

cd ~   作用同cd后不指定目录,切换到当前用户的home 目录

find /home -print -exec rename -v 's/_2009-09-04.suffix$//' {} ; 

cd -   命令后跟一个减号,则会退回到切换前的目录

26、计算指定扩展名的所有文件的总大小,单位为MB

cd ..   返回到当前目录下的上一级目录

find . -type f -iname '*.msh' -exec ls -lG {} ; | awk '{total = total

 

  • $4}END{print "scale=2;" total "/2^20"}' | bc 

3、pwd:用于显示用户当前工作目录

27、修改当前目录中所有目录的权限

 

find ./ -type d | xargs sudo chmod 755 

4、mkdir rmdir

28、统计代码行数,返回总和

midir:创建目录     rmdir:删除目录

find . ( -iname '*.cpp' -o -iname '*.h' ) -exec wc -l {} ; | sort -n | cut --delimiter=.  -f 1 | awk '{s+=$1} END {print s}' 

两个命令都支持-p参数,对于mkdir命令若指定路径的父目录不存在则一并创建,对于rmdir命令则删除指定路径的所有层次目录,如果文件夹里有内容,则不能用rmdir命令

29、递归的在当前目录中所有的c++文件中搜索

如下:

find . -name '*.?pp' | xargs grep -H "string" 

mkdir -p 1/2/3

30、递归的打印工作目录内的所有硬链接

rmdir -p 1/2/3 

find . -type f -a ! -links 1 

 

31、制作一个zip压缩包,将.svn目录排除在

5、cp:复制命令

find . -not ( -name .svn -prune ) -type f | xargs zip XXXXX.zip 

复制一个文件到另一目录:cp 1.txt ../test2

32、递归给.sh加权限

复制一个文件到本目录并改名:cp 1.txt 2.txt

find ./ -name "*.sh" -exec chmod +x {} ; 

复制一个文件夹a并改名为b:cp -r a b

33、显示排序列表文件的大小超过1MB的当前目录

 

find . -maxdepth 1 -type f -size +1M -printf "%f:%sn" | sort -t":" -k2 

 

34、使用file查看设备信息(man file查看更多关于file的信息)

6、mv:移动命令

file -s /dev/sd* 

将一个文件移动到另一个目录:mv 1.txt ../test1

35、找出超过设置尺寸的所有文件并且按设置的格式显示

将一个文件在本目录改名:mv 1.txt 2.txt

find / -type f -size +512000 | xargs ls -lh | awk '{ print $5 " " $6$7 ": " $9 }' 

将一个文件一定到另一个目录并改名:mv 1.txt ../test1/2.txt

36、批量编码转换

 

find . -iname *.java -type f -exec bash -c "iconv -f GBK -t UTF-8 {}  > {}.tmp " ; -exec mv {}.tmp {} ;

7、rm命令

37、清理 ._ 文件 (OS X)

rm命令用于删除文件,与dos下的del/erase命令相似,rm命令常用的参数有三个:-i,-r,-f。

find . -name ._* -exec rm -f {} ; 

–i :系统在删除文件之前会先询问确认,用户回车之后,文件才会真的被删除。需要注意,linux下删除的文件是不能恢复的,删除之前一定要谨慎确认。

38、选择性的grep

–r:该参数支持目录删除,功能和rmdir命令相似。

find /path -name *.php -user nobody -exec grep -nH whatever {} ; grep selectively 

–f:和-i参数相反,-f表示强制删除

39、寻找文件并且按照修改时间排序

 

find -type f | xargs ls -1tr 

8、du、df命令

du命令可以显示目前的目录所占用的磁盘空间,df命令可以显示目前磁盘剩余空间。

 

如果du命令不加任何参数,那么返回的是整个磁盘的使用情况,如果后面加了目录的话,就是这个目录在磁盘上的使用情况。

du -hs 指定目录  查看指定目录的总大小

du -hs ./* 查看当前目录下的所有文件夹和文件的大小

 

这两个命令都支持-k,-m和-h参数,-k和-m类似,都表示显示单位,一个是k字节一个是兆字节,-h则表示human-readable,即友好可读的显示方式。

 

9、cat命令

cat命令的功能是显示或连结一般的ascii文本文件。cat是concatenate的简写,类似于dos下面的type命令。用法如下:

cat file1 显示file1文件内容

cat file1 file2 依次显示file1,file2的内容

cat file1 file2 > file3 把file1, file2的内容结合起来,再“重定向(>)”到file3文件中。

">"是右重定向符,表示将左边命令结果当成右边命令的输入,注意:如果右侧文件是一个已存在文件,其原有内容将会被清空,而变成左侧命令输出内容。如果希望以追加方式写入,请改用">>"重定向符。

如果">"左边没有指定文件,如: cat >file1,将会等用户输入,输入完毕后再按[Ctrl]+[c]或[Ctrl]+[d],就会将用户的输入内容写入file1。

 

10、echo命令

echo命令的使用频率不少于ls和cat,尤其是在shell脚本编写中。

语法:echo [-ne][字符串]

功能:echo会将输入的字符串送往标准输出,输出的字符串间以空白字符隔开, 并在最后加上换行符。

参数

-n 显示字串时在最后自动换行

-e 支持以下格式的转义字符, -E 不支持以下格式的转义字符

/a 发出警告声;

/b 删除前一个字符;

/c 最后不加上换行符号;

/f 换行但光标仍旧停留在原来的位置;

/n 换行且光标移至行首;

/r 光标移至行首,但不换行;

/t 插入tab;

/v 与/f相同;

// 插入/字符;

/nnn 插入nnn(八进制)所代表的ASCII字符;

 

示例

oracle@hjtest:~/hgd> echo "123" "456"

123 456

oracle@hjtest:~/hgd> echo "123/n456"

123/n456

oracle@hjtest:~/hgd> echo -e "123/n456"

123

456

oracle@hjtest:~/hgd> echo -E "123/n456"

123/n456

oracle@hjtest:~/hgd> echo -E "123///456"

123//456

oracle@hjtest:~/hgd> echo -e "123///456"

123/456

oracle@hjtest:~/hgd> echo -e "123/100456"

123@456

 

注意事项

在Linux使用的bash下,单引号’’和双引号是有区别的,单引号忽略所有的转义,双引号不会忽略以下特殊字符:

Dollar signs ($),Back quotes (`),Backslashes (/),Excalmatory mark(!)

示例如下:

oracle@hjtest:~> echo "`TEST`"

-bash: TEST: command not found

oracle@hjtest:~> echo '`TEST`'

`TEST`

oracle@hjtest:~> echo "$TEST"

        

oracle@hjtest:~> echo '$TEST'

$TEST

oracle@hjtest:~> echo "//TEST"

/TEST

oracle@hjtest:~> echo '//TEST'

//TEST

oracle@hjtest:~> echo "Hello!"

echo "Hello"

Hello

oracle@hjtest:~> echo 'Hello!'

Hello!

 

11、more,less,clear

n        more,less命令

     这两个命令用于查看文件,如果一个文件太长,显示内容超出一个屏幕,用cat命令只能看到最后的内容,用more和less两个命令可以分页查看。more指令可以使超过一页的文件内容分页暂停显示,用户按键后才继续显示下一页。而less除了有more的功能以外,还可以用方向键往上或往下的滚动文件,更方便浏览阅读。

less的常用动作命令

回车键 向下移动一行;

y 向上移动一行;

空格键 向下滚动一屏;

b 向上滚动一屏;

d 向下滚动半屏;

h less的帮助;

u 向上洋动半屏;

w 可以指定显示哪行开始显示,是从指定数字的下一行显示;比如指定的是6,那就从第7行显示;

g 跳到第一行;

G 跳到最后一行;

p n% 跳到n%,比如 10%,也就是说比整个文件内容的10%处开始显示;

/pattern 搜索pattern ,比如 /MAIL表示在文件中搜索MAIL单词;

v 调用vi编辑器;

q 退出less

!command 调用SHELL,可以运行命令;比如!ls 显示当前列当前目录下的所有文件;

n        clear命令

         clear命令是用来清除当前屏幕显示的,不需任何参数,和dos下的cls命令功能相同。

 

12、head,tail

n        head和tail命令都用于查看文本文件,区别在于: head显示文件的头n行,tail显示文件的尾n行,缺省情况n都为10行。可以通过-n方式指定行数,如:

                head -100 file和tail -100 file分别表示显示文件头100行和尾100行内容。

n        tail -f命令可以实时查看文件新增内容。

 

13、wc命令

该命令用于统计指定文件中的字节数、字数、行数。该命令各选项含义如下:

-l 统计行数

-w 统计字数

-c 统计字节数

这些选项可以组合使用。输出列的顺序和数目不受选项的顺序和数目的影响。总是按下述顺序显示并且每项最多一列。

行数、字数、字节数、文件名

如果命令行中没有文件名,则输出中不出现文件名。

例如:

oracle@hjtest:~> wc 1.txt 2.txt

  460  1679 16353 1.txt

  300  1095 10665 2.txt

  760  2774 27018 总用量

oracle@hjtest:~> wc -l 1.txt

460 1.txt

缺省参数为-lcw,即wc file1 file2命令的执行结果与上面一样。

 

14、grep 命令

grep是(global search regular expression(RE) and print out the line的缩写,用于从文件面搜索包含指定模式的行并打印出来,它是一种强大的文本搜索工具,支持使用正则表达式搜索文本。grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被””引用,模板后的所有字符串被看作文件名。搜索结果送到屏幕,不影响原文件内容。

 

grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

示例

$ ls -l | grep '^a'

通过管道过滤ls -l输出的内容,只显示以a开头的行。

$ grep 'test' d*

显示所有以d开头的文件中包含test的行。

$ grep 'test' aa bb cc

显示在aa,bb,cc文件中匹配test的行。

$ grep '[a-z]/{5/}' aa

显示所有包含每个字符串至少有5个连续小写字符的字符串的行。

$ grep 'w/(es/)t.*/1' aa

如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(/1),找到就显示该行。如果用egrep或grep -E,就不用"/"号进行转义,直接写成'w(es)t.*/1'就可以了。

 

15、man,logout命令

man命令

man是manual的缩写,相当于Unix/Linux的联机Help,每个系统命令和调用都有非常详细的说明,绝大多数都是英文。如:man ls即是查看ls命令的使用说明,一般还有另一种方法用来查看帮助,如:ls –help,这种方式绝大多数命令都支持。

 

logout命令

该命令用于退出系统,与login命令对应。

 

16、管道和xargs
管道:  

利用Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。连续使用管道意味着第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。

注意:管道左边命令的输入作为管道右边命令的输入(命令的输入是一定的),不是参数,并不是所有命令都支持管道

例子:ls | grep a  查看当前目录下名称包含a的文件或文件夹

 

xargs:

大多数 Linux 命令都会产生输出:文件列表、字符串列表等。但如果要使用其他某个命令并将前一个命令的输出作为参数该怎么办?例如,file 命令显示文件类型(可执行文件、ascii 文本等);你能处理输出,使其仅显示文件名,目前你希望将这些名称传递给 ls -l 命令以查看时间戳记。xargs 命令就是用来完成此项工作的。
注意:find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去

 

例子:

1、在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中:

$ find / -name "core" -print | xargs echo "" >/tmp/core.log

2、当一个目录下文件太多时,直接用rm * 命令会包参数过长,用如下方法可以全部删除

$ls | xargs rm

 

 

17、basename dirname

basename用于查看文件不含路径的名字,dirname则用于查看文件路径,使用效果我们测试一下便知:

> basename /home/hj/1.txt

1.txt

> dirname  /home/hj/1.txt

/home/hj

> basename 1.txt

1.txt

> dirname 1.txt

.

 

18、不带任何参数的set命令将显示shell的全部变量

 

编辑:操作系统 本文来源:@表示连结文件,4、递归列出最新修改的文件

关键词:

  • 上一篇:没有了
  • 下一篇:没有了