Linux 第一天:环境使用,常用命令
内容概述
1. 嵌入式 linux 环境搭建
2. linux 操作系统的概念和安装方法,详细介绍 linux 下基本的 shell 命令、vim 编辑器,GCC 编译器,关基本知识。
3. cd,ls,pwd,tree,mkdir,touch,cp,rmdir,rm,mv,tar,zip,unzip,find,chmod,chgrp,chown,umask,cat,head,tail,more,less,dd,if,ln,c
mp,chatt,
4.
嵌入式环境搭建
linux 下常用 shell 命令
绝对路径和相对路径
绝对路径:由根目录(/)开始写起的文件名或目录名称, 例如 /home/dmtsai/.bashrc;
相对路径:相对目前路径的文件名写法。 例如 ./home/dmtsai 或 ../../home/dmtsai/ 等等。反正开头不是 / 就属于
相对路径的写法。而你必须要了解,相对路径是以『你当前所在路径的相对位置』来表示的。
home/ 当前目录下的 home 文件夹
./home/ 当前目录下的 home 文件夹
/home/ 根目录下的 home 文件夹
~
.
..
-
cd 命令
cd 命令用来切换工作目录至 dirname。 其中 dirName 表示法可为绝对路径或相对路径。若目录名称省略,则变
换至使用者的 home directory(也就是刚 login 时所在的目录)。另外,~ 也表示为家目录的意思, . 则是表示目前
所在的目录,.. 则表示目前目录位置的上一层目录。
cd 不带路径就是进入到当前用户的家目录,相当于 cd ~
语法:
cd [选项] [参数]
选项
-p 如果要切换到的目标目录是一个符号连接,直接切换到符号连接指向的目标目录
-L 如果要切换的目标目录是一个符号的连接,直接切换到字符连接名代表的目录,而非符号连接所指向的目
标目录。
- 当仅实用"-"一个选项时,当前工作目录将被切换到环境变量"OLDPWD"所表示的目录。
实例
cd 进入用户主目录;
cd ~ 进入用户主目录;
cd - 返回进入此目录之前所在的目录;
cd .. 返回上级目录(若当前目录为“/“,则执行完后还在“/";".."为上级目录的意思);
cd ../.. 返回上两级目录;
cd !$ 把上个命令的参数作为 cd 参数使用。
ls 命令
ls 命令用来显示目标列表,在 Linux 中是使用率较高的命令。ls 命令的输出信息可以进行彩色加亮显示,以分
区不同类型的文件。
语法:
ls [选项] [参数]
选项
-a:显示除隐藏文件“.”和“..”;一般情况下. 和..对我们来说没有任何用途。所以这个参数基本上不使用。
-A:显示除隐藏文件“.”和“..”以外的所有文件列表;当要显示隐藏文件时候使用这个选项。
-C:多列显示输出结果。这是默认选项;
-l:与“-C”选项功能相反,所有输出信息用单列格式输出,不输出为多列;
-F:在每个输出项后追加文件的类型标识符,具体含义:“*”表示具有可执行权限的普通文件,“/”表示目录,
“@”表示符号链接,“|”表示命令管道 FIFO,“=”表示 sockets 套接字。当文件为普通文件时,不输出任何标识符;
-b:将文件中的不可输出的字符以反斜线“\”加字符编码的方式输出;(比较少用)
-c:与“-lt”选项连用时,按照文件状态时间排序输出目录内容,排序的依据是文件的索引节点中的 ctime 字段。
与“-l”选项连用时,则排序的一句是文件的状态改变时间;
-d:仅显示目录名,而不显示目录下的内容列表,只显示 . 没有什么用途;
-f:此参数的效果和同时指定“aU”参数相同,并关闭“lst”参数的效果;
-i:显示文件索引节点号(inode)。一个索引节点代表一个文件;
--file-type:与“-F”选项的功能相同,但是不显示“*”;
-k:与“-l”连用时,以 KB(千字节)为单位显示文件大小;
-l:以长格式显示目录下的内容列表。输出的信息从左到右依次包括:
文件类型、权限模式、硬连接数、所有者、所属组、文件大小(字节为单位)、最后修改时间和文件名;
-m:用“,”号区隔每个文件和目录的名称;
-n:以用户识别码和群组识别码替代其名称;
-r:以文件名反序排列并输出目录内容列表;
-s:显示文件和目录的大小,以区块(1 块是 1KB)为单位;
如果以-l 一起使用则是效果叠加,如下:
-h:与-l 或-s 联合使用才有效果,显示文件和目录的大小,会在文件大小数据后面添加 M 或 Kb 单位,这个比
较直观,使用频率高;
-t:用文件和目录的更改时间排序;(最新的排列在前面)
-L:如果遇到性质为符号链接的文件或目录,直接列出该链接所指向的原始文件或目录;
-R:递归处理,将指定目录下的所有文件及子目录一并处理;
--full-time:列出完整的日期与时间;
--color[=WHEN]:使用不同的颜色高亮显示不同类型的。
参数
目录:指定要显示列表的目录,也可以是具体的文件。
实例
显示当前目录下非隐藏文件与目录
[root@localhost temp]# ls /home/
hello rhel richard clayderman -
lettre à ma mè
nightwish - richard clayderman - don't cry for me 蔡晓 - 用一生的时间.mp3
[root@localhost temp]# ls /home/ -sh
总用量 33M
hello richard clayderman - don't cry for me
nightwish - richard clayderman - lettre à ma mè
rhel 11M 蔡晓 - 用一生的时间.mp3
[root@localhost temp]#
显示当前目录下包括影藏文件在内的所有文件列表
[root@localhost ~]# ls -a
. .bash_logout .bashrc .mysql_history satools .tcshrc .vimrc
.. .bash_history .bash_profile .cshrc .rnd .ssh .viminfo
显示文件的 inode 信息
索引节点(index inode 简称为“inode”)是 Linux 中一个特殊的概念,具有相同的索引节点号的两个文本本质上
是同一个文件(除文件名不同外)。
[root@localhost ~]# ls -i -l
261535 -------rw-. 1 root root 3142 2 月 13 2013
261123 -rw-r--r--. 1 root root 73122 2 月 13 2013
[root@localhost ~]#
水平输出文件列表
[root@localhost ~]# ls -m
, , E:, , , ,
, noOS, , , , vimrc_back, work,
workspace, 公共的, 模板, 视频, 图片, 文档, 下载, 音乐, 桌面
修改最后一次编辑的文件,最近修改的文件显示在最上面。
[root@localhost /]# ls -t
tmp root etc dev lib boot sys proc data home bin sbin usr var lost+found media mnt opt
selinux srv misc
显示递归文件
[root@localhost ~]# ls -R
.:
satools
./satools:
mysql
由于内容很多,所以省略其他……。
打印文件的 UID 和 GID
[root@localhost ~]# ls -n
列出文件和文件夹的详细信息(大小是以字节为单位)
[root@localhost /]# ls -l
total 254
drwxr-xr-x 2 root root 4096 Jun 12 04:03 bin
drwxr-xr-x 4 root root 1024 Jun 15 14:45 boot
drwxr-xr-x 6 root root 4096 Jun 12 10:26 data
drwxr-xr-x 10 root root 3520 Sep 26 15:38 dev
drwxr-xr-x 75 root root 4096 Oct 16 04:02 etc
drwxr-xr-x 4 root root 4096 Jun 12 10:26 home
drwxr-xr-x 14 root root 12288 Jun 16 04:02 lib
drwx------ 2 root root 16384 Jun 11 22:46 lost+found
drwxr-xr-x 2 root root 4096 May 11 2011 media
drwxr-xr-x 2 root root 4096 Nov 8 2010 misc
列出文件和文件夹详细信息(文件大小以 K 或 M 为单位)
[root@localhost /]# ls -lh
total 254K
drwxr-xr-x 2 root root Jun 12 04:03 bin
drwxr-xr-x 4 root root Jun 15 14:45 boot
drwxr-xr-x 6 root root Jun 12 10:26 data
drwxr-xr-x 10 root root Sep 26 15:38 dev
drwxr-xr-x 75 root root Oct 16 04:02 etc
drwxr-xr-x 4 root root Jun 12 10:26 home
drwxr-xr-x 14 root root 12K Jun 16 04:02 lib
drwx------ 2 root root 16K Jun 11 22:46 lost+found
drwxr-xr-x 2 root root May 11 2011 media
drwxr-xr-x 2 root root Nov 8 2010 misc
drwxr-xr-x 2 root root May 11 2011 mnt
drwxr-xr-x 2 root root May 11 2011 opt
dr-xr-xr-x 235 root root 0 Jun 15 11:04 proc
drwxr-x--- 4 root root Oct 15 14:43 root
drwxr-xr-x 2 root root 12K Jun 12 04:03 sbin
drwxr-xr-x 2 root root May 11 2011 selinux
drwxr-xr-x 2 root root May 11 2011 srv
drwxr-xr-x 11 root root 0 Jun 15 11:04 sys
drwxrwxrwt 3 root root 96K Oct 16 08:49 tmp
drwxr-xr-x 13 root root Jun 11 23:38 usr
drwxr-xr-x 19 root root Jun 11 23:38 var
显示指定文件夹信息的详细信息
[root@localhost home]# ls -ld /etc/
drwxr-xr-x. 145 root root 12288 2 月 28 09:50 /etc/
[root@localhost home]# ls -ldh /etc/
drwxr-xr-x. 145 root root 12K 2 月 28 09:50 /etc/
[root@localhost home]#
按时间列出文件和文件夹详细信息
[root@localhost ~]# ls -lt
总用量 1872
-rw-r--r--. 1 root root 0 12 月 27 03:30
drwxrwxrwx. 12 root root 4096 12 月 8 23:26 work
drwxr-xr-x. 2 root root 4096 12 月 3 15:10 下载
drwxr-xr-x. 3 root root 4096 12 月 2 15:15 E:
drwxr-xr-x. 2 root root 4096 12 月 2 14:39 桌面
-rw-r--r--. 1 root root 589711 11 月 22 08:14
-rwxrw-rw-. 1 root root 433 11 月 17 17:37
-rw-r--r--. 1 root root 6914 11 月 17 13:01 vimrc_back
drwxrwxrwx. 6 root root 4096 11 月 17 02:10 noOS
drwxr-xr-x. 3 root root 4096 11 月 3 07:14 workspace
-rw-------. 1 root root 1122208 10 月 25 04:35
drwxr-xr-x. 3 root root 4096 9 月 16 01:32
-rw-------. 1 root root 34494 9 月 16 01:31
drwxr-xr-x. 5 1000 1000 4096 12 月 21 2013
-------rw-. 1 root root 3142 2 月 13 2013
-rw-r--r--. 1 root root 73122 2 月 13 2013
-rw-r--r--. 1 root root 16255 2 月 13 2013
drwxr-xr-x. 2 root root 4096 2 月 13 2013 公共的
drwxr-xr-x. 2 root root 4096 2 月 13 2013 模板
drwxr-xr-x. 2 root root 4096 2 月 13 2013 视频
drwxr-xr-x. 2 root root 4096 2 月 13 2013 图片
drwxr-xr-x. 2 root root 4096 2 月 13 2013 文档
drwxr-xr-x. 2 root root 4096 2 月 13 2013 音乐
[root@localhost ~]#
反序按修改时间列出文件和文件夹详细信息
[root@localhost ~]# ls -ltr
总用量 1872
drwxr-xr-x. 2 root root 4096 2 月 13 2013 音乐
drwxr-xr-x. 2 root root 4096 2 月 13 2013 文档
drwxr-xr-x. 2 root root 4096 2 月 13 2013 图片
drwxr-xr-x. 2 root root 4096 2 月 13 2013 视频
drwxr-xr-x. 2 root root 4096 2 月 13 2013 模板
drwxr-xr-x. 2 root root 4096 2 月 13 2013 公共的
-rw-r--r--. 1 root root 16255 2 月 13 2013
-rw-r--r--. 1 root root 73122 2 月 13 2013
-------rw-. 1 root root 3142 2 月 13 2013
drwxr-xr-x. 5 1000 1000 4096 12 月 21 2013
-rw-------. 1 root root 34494 9 月 16 01:31
drwxr-xr-x. 3 root root 4096 9 月 16 01:32
-rw-------. 1 root root 1122208 10 月 25 04:35
drwxr-xr-x. 3 root root 4096 11 月 3 07:14 workspace
drwxrwxrwx. 6 root root 4096 11 月 17 02:10 noOS
-rw-r--r--. 1 root root 6914 11 月 17 13:01 vimrc_back
-rwxrw-rw-. 1 root root 433 11 月 17 17:37
-rw-r--r--. 1 root root 589711 11 月 22 08:14
drwxr-xr-x. 2 root root 4096 12 月 2 14:39 桌面
drwxr-xr-x. 3 root root 4096 12 月 2 15:15 E:
drwxr-xr-x. 2 root root 4096 12 月 3 15:10 下载
drwxrwxrwx. 12 root root 4096 12 月 8 23:26 work
-rw-r--r--. 1 root root 0 12 月 27 03:30
[root@localhost ~]#
按照特殊字符对文件进行分类
[root@localhost ~]# ls -F
noOS/ vimrc_back 模板/ 下载/
* work/ 视频/ 音乐/
E:/ workspace/ 图片/ 桌面/
公共的/ 文档/
[root@localhost ~]#
列出文件并标记颜色分类
[root@localhost ]# ls --color=auto
pwd 命令
pwd 命令以绝对路径的方式显示用户当前工作目录。命令将当前目录的全路径名称(从根目录)写入标准输出。
全部目录使用/分隔。第一个/表示根目录,最后一个目录是当前目录。执行 pwd 命令可立刻得知您目前所在的工作
目录的绝对路径名称。
语法:
pwd [选项]
选项
-P:显示真实路径,而不是链接路径
实例
根目录下的/linux_share 是一个链接文件,使用 pwd 查看,对比-P 区别。
[root@localhost linux_share]# pwd -P
/mnt/hgfs/linux_share
[root@localhost linux_share]# pwd
/linux_share
[root@localhost linux_share]#
tree 命令(需要另外安装)
tree 命令以树状图列出目录的内容。
安装步骤:
进入在存放 的命令源码文件的共享目录:
cd /mnt/hgfs/20141227/
查看文件列表:
ls
解压文件:
tar -xf
进入解压后的文件夹:
cd
ls --查看是否已经有 Makefile
make --编译
make install --安装可执行程序到默认的环境变量路径中
tree --使用
语法:
tree [选项] [参数]
选项
-a:显示所有文件和目录;
-A:使用 ASNI 绘图字符显示树状图而非以 ASCII 字符组合;
-L:指定最大的显示深度;
-C:在文件和目录清单加上色彩,便于区分各种类型,默认值;
-d:先是目录名称而非内容;
-D:列出文件或目录的更改时间;
-f:在每个文件或目录之前,显示完整的相对路径名称;
-F:在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","@","|"号;
-g:列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码;
-i:不以阶梯状列出文件和目录名称;
-l:<范本样式> 不显示符号范本样式的文件或目录名称;
-l:如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录;
-n:不在文件和目录清单加上色彩;
-N:直接列出文件和目录名称,包括控制字符;
-p:列出权限标示;
-P:<范本样式> 只显示符合范本样式的文件和目录名称;
-q:用“?”号取代控制字符,列出文件和目录名称;
-s:列出文件和目录大小,以块为单位;
-h:列出文件和目录大小,以 M 或 KB 为单位;
-t:用文件和目录的更改时间排序;
-u:列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码;
-x:将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该目录
予以排除在寻找范围外。
参数
目录:执行 tree 指令,它会列出指定目录下的所有文件,包括子目录里的文件。
实例
[root@localhost temp]# tree -d
.
├── bin
│ └── os_1
├── dir1
│ ├── bin
│ │ └── os_1
│ ├── dir1
│ │ ├── dir11
│ │ └── dir12
│ ├── dir11
│ └── dir12
└──
└── packaging
[root@localhost temp]# tree -dhs
.
├── [] bin
│ └── [] os_1
├── [] dir1
│ ├── [] bin
│ │ └── [] os_1
│ ├── [] dir1
│ │ ├── [] dir11
│ │ └── [] dir12
│ ├── [] dir11
│ └── [] dir12
└── []
└── [] packaging
12 directories
[root@localhost temp]#
mkdir 命令
mkdir 命令用来创建目录。该命令创建由 dirname 命名的目录。如果在目录名的前面没有加任何路径名,则在
当前目录下创建由 dirname 指定的目录;如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录。
在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。
注意:在创建文件时,不要把所有的文件都存放在主目录中,可以创建子目录,通过它们来更有效地组织文件。
最好采用前后一致的命名方式来区分文件和目录。例如,目录名可以以大写字母开头,这样,在目录列表中目录名
就出现在前面。
语法:
mkdir [选项] [参数]
选项
-Z:设置安全上下文,当使用 SELinux 时有效;
-m<目标属性>或--mode<目标属性>建立目录的同时设置目录的权限;
-p 或--parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;
参数
目录:指定要创建的目录列表,多个目录之间用空格隔开。
实例
在目录/usr/meng 下建立子目录 test,并且只有文件主有读、写和执行权限,其他人无权访问
mkdir -m 700 /usr/meng/test
在当前目录中建立 bin 和 bin 下的 os_1 目录,权限设置为文件主可读、写、执行,同组用户可读和执行,其他
用户无权访问。
[root@localhost temp]# mkdir -p -m 750 bin/os_1
[root@localhost temp]# ls -l
总用量 4
drwxr-xr-x. 3 root root 4096 12 月 27 03:54 bin
[root@localhost temp]#
tree 命令测试:
[root@localhost temp]# mkdir dir3/dir31/dir32/dir33/ -p
[root@localhost temp]# ls
dir3
bin
dir1
~ dir2
[root@localhost temp]# tree dir3
dir3
└── dir31
└── dir32
└── dir33
3 directories, 0 files
[root@localhost temp]#
touch 命令
touch 命令有两个功能:一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据
将原封不动地保留下来;二是用来创建新的空文件。
语法:
touch [选项] [参数]
选项(一般情况都不需要使用到)
-a:或--time=atime 或--time=access 或--time=use 只更改存取时间;
-c:或--no-create 不建立任何文件;
-d:<时间日期> 使用指定的日期时间,而非现在的时间;
-f:此参数将忽略不予处理,仅负责解决 BSD 版本 touch 指令的兼容性问题;
-m:或--time=mtime 或--time=modify 只更该变动时间;
-r:<参考文件或目录> 把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同;
-t:<日期时间> 使用指定的日期时间,而非现在的时间;
参数
文件:指定要设置时间属性的文件列表
实例
[root@localhost temp]# touch ex2
[root@localhost temp]# ls
ex2
[root@localhost workspace]# touch
[root@localhost workspace]# touch /home/
cp 命令
cp 命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定
文件名的具体的文件或一个已经存在的目录下。cp 命令还支持同时复制多个文件,当一次复制多个文件时,目标文
件参数必须是一个已经存在的目录,否则将出现错误。
语法:
cp [选项] [参数]
选项
-a:此参数的效果和同时指定"-dpR"参数相同;
-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
-f:强行复制文件或目录,不论目标文件或目录是否已存在;
注意:有的系统给 cp 设置了别名,所以这个选项可能会无效,查看是否设置了别名,通过 alias 命令查看,
如下:
[root@localhost temp]# alias
alias cp='cp -i' 这里给 cp 设置了别名,添加了-i 参数,表示要确认。
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@localhost temp]#
可以通过 alias cp='cp' 命令临时修改 cp 别名,如下:
[root@localhost temp]# alias cp='cp'
[root@localhost temp]# alias
alias cp='cp'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@localhost temp]#
-i:覆盖既有文件之前先询问用户;
-l:对源文件建立硬连接,而非复制文件;一般不用
-p:保留源文件或目录的属性;
-R/r:递归处理,将指定目录下的所有文件与子目录一并处理;
-s:对源文件建立符号连接,而非复制文件;
-u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才
复制文件;
-b:覆盖已存在的文件目标前将目标文件备份;
Linux 文件下会多出一个同名的,但是后面添加了~的文件,如: 变成了 ~。
Linux 下的备份文件就是 以~结束的。
-v:详细显示命令执行的操作。
[root@localhost temp]# cp bin/ -b -v
"" -> "bin/" (备份:"bin/~")
[root@localhost temp]#
参数
源文件:制定源文件列表。默认情况下,cp 命令不能复制目录,如果要复制目录,则必须使用-R 选项;
目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。
实例
如果把一个文件复制到一个目标文件中,而目标文件已经存在,那么,该目标文件的内容将被破坏。此命令中
所有参数既可以是绝对路径名,也可以是相对路径名。通常会用到点.或点点..的形式。例如,下面的命令将指
定文件复制到当前目录下:
cp ../mary/homework/assign .
所有目标文件指定的目录必须是己经存在的,cp 命令不能创建目录。如果没有文件复制的权限,则系统会显示
出错信息。
将文件 file 复制到目录/usr/men/tmp 下,并改名为 file1
cp file /usr/men/tmp/file1
将目录/usr/men 下的所有文件及其子目录复制到目录/usr/zh 中
cp -r /usr/men /usr/zh
交互式地将目录/usr/men 中的以 m 打头的所有.c 文件复制到目录/usr/zh 中
cp -i /usr/men m*.c /usr/zh
我们在 Linux 下使用 cp 命令复制文件时候,有时候会需要覆盖一些同名文件,覆盖文件的时候都会有提示:需
要不停的按 Y 来确定执行覆盖。文件数量不多还好,但是要是几百个估计按 Y 都要吐血了,于是折腾来半天
总结了一个方法:
cp aaa/* /bbb
复制目录 aaa 下所有到/bbb 目录下,这时如果/bbb 目录下有和 aaa 同名的文件,需要按 Y 来确认并且会略过 aaa
目录下的子目录。
cp -r aaa/* /bbb
这次依然需要按 Y 来确认操作,但是没有忽略子目录。
cp -r -a aaa/* /bbb
依然需要按 Y 来确认操作,并且把 aaa 目录以及子目录和文件属性也传递到了/bbb。
cp -r -a -f aaa/* /bbb 说明:前提是 cp 没有补设置别名为 cp -i
成功,没有提示按 Y、传递了目录属性、没有略过目录。
[root@localhost temp]# ls *.txt
[root@localhost temp]# ls /home/*.txt
/home/ /home/ /home/ /home/
[root@localhost temp]# cp bin/ bin2/
cp: 略过目录"bin/"
[root@localhost temp]# ls bin2
ls: 无法访问 bin2: 没有那个文件或目录
[root@localhost temp]# cp bin/ bin2/ -r
[root@localhost temp]# ls bin2
os_1
[root@localhost temp]# cp bin/ bin2/ -rf
[root@localhost temp]#
rmdir 命令
rmdir 命令用来删除空目录。当目录不再被使用时,或者磁盘空间已到达使用限定值,就需要删除失去使用价
值的目录。利用 rmdir 命令可以从一个目录中删除一个或多个空的子目录。该命令从一个目录中删除一个或多个子
目录,其中 dirname 佬表示目录名。如果 dirname 中没有指定路径,则删除当前目录下由 dirname 指定的目录;如
dirname 中包含路径,则删除指定位置的目录。删除目录时,必须具有对其父目录的写权限。
注意:子目录被删除之前应该是空目录。就是说,该目录中的所有文件必须用 rm 命令全部,另外,当前工作
目录必须在被删除目录之上,不能是被删除目录本身,也不能是被删除目录的子目录。
虽然还可以用带有-r 选项的 rm 命令递归删除一个目录中的所有文件和该目录本身,但是这样做存在很大的危
险性。
语法:
rmdir [选项] [参数]
选项
-p 或--parents:删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除;
--ignore-fail-on-non-empty:此选项使 rmdir 命令忽略由于删除非空目录时导致的错误信息;
-v 或-verboes:显示命令的详细执行过程;
参数
目录列表:要删除的空目录列表。当删除多个空目录时,目录名之间使用空格隔开。
实例
[root@localhost temp]# rmdir dir3
rmdir: 删除 "dir3" 失败: 目录非空
[root@localhost temp]# rmdir dir3/dir31/dir32/dir33/
[root@localhost temp]# tree dir3
dir3
└── dir31
└── dir32
2 directories, 0 files
[root@localhost temp]# rmdir dir3/dir31/dir32/ -p
[root@localhost temp]# tree dir3
dir3 [error opening dir]
0 directories, 0 files
[root@localhost temp]#
rm 命令
rm 命令目录基本操作
rm 命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均
删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。
注意:使用 rm 命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好
再看一下文件的内容,确定是否真要删除。rm 命令可以用-i 选项,这个选项在使用文件扩展名字符删除多个文件时
特别有用。使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入 y 并按 Enter 键,才能删除文件。
如果仅按 Enter 键或其他字符,文件不会被删除。
语法:
rm [选项] [参数]
选项
-d:直接把欲删除的目录的硬连接数据删除成 0,删除该目录;
-f:强制删除文件或目录;
-i:删除已有文件或目录之前先询问用户;
-r 或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
--preserve-root:不对根目录进行递归操作;
-v:显示指令的详细执行过程。
参数
文件:指定被删除的文件列表,如果参数中含有目录,则必须加上-r 或者-R 选项。
实例
交互式删除当前目录下的文件 test 和 example
rm -i test example
Remove test ?n(输入 n 表示不删除文件 test)
Remove example ?y(输入 y 表示删除文件 example)
删除当前目录下除隐含文件外的所有文件和子目录
# rm -r *
应注意,这样做是非常危险的!
测试删除文件深层文件夹的过程:
[root@localhost temp]# mkdir dir3/dir31/dir32/dir33/ -p 说明:先创建深层文件夹
[root@localhost temp]# rm dir3/
rm: 无法删除"dir3/": 是一个目录
[root@localhost temp]# rm dir3/ -r
rm:是否进入目录"dir3"? y
rm:是否进入目录"dir3/dir31"? y
rm:是否进入目录"dir3/dir31/dir32"? y
rm:是否删除目录 "dir3/dir31/dir32/dir33"?y
rm:是否删除目录 "dir3/dir31/dir32"?y
rm:是否删除目录 "dir3/dir31"?y
rm:是否删除目录 "dir3"?y
[root@localhost temp]#
[root@localhost temp]# mkdir dir3/dir31/dir32/dir33/ -p
[root@localhost temp]# rm dir3/ -rf
[root@localhost temp]# ls
bin
dir1
~ dir2
[root@localhost temp]#
mv 命令
mv 命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source 表示源文件或目录,
target 表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。
mv 命令可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。源文件被移至目标,有
两种不同的结果:
如果目标是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。
如果目标不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。如果源
文件和目标文件在同一个目录下,mv 的作用就是改文件名。当目标文件是目录时,源文件或目录参数可以有多个,
则所有的源文件都会被移至目标目录中。所有移到该目录下的文件都将保留以前的文件名。
注意事项:mv 与 cp 的结果不同,mv 好像文件“搬家”,文件个数并未增加。而 cp 对文件进行复制,文件个数
增加了。
语法:
mv [选项] [参数]
选项
--backup=<备份模式>:若需覆盖文件,则覆盖前先行备份;
-b:当文件存在时,覆盖前,为其创建一个备份;(如果担心误删,可以先进行备份)
-f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录;
-i:交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆
盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可以避免误将文件覆
盖。
-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
参数
源文件:源文件列表。
目标文件:如果“目标文件”是文件名则在移动文件的同时,将其改名为“目标文件”;如果“目标文件”是目录名
则将源文件移动到“目标文件”下。
实例
将文件 ex3 改名为 new1
mv ex3 new1
将目录/usr/men 中的所有文件移到当前目录(用.表示)中:
mv /usr/men/* .
测试:
[root@localhost temp]# ls *.txt
[root@localhost temp]# mv
[root@localhost temp]# ls *.txt
[root@localhost temp]# mv /home/
[root@localhost temp]# ls *.txt
[root@localhost temp]# ls /home/
/home/
[root@localhost temp]# ls *.txt
[root@localhost temp]# mv /home/
[root@localhost temp]# ls *.txt
[root@localhost temp]# ls /home/*.txt
/home/ /home/
[root@localhost temp]#
tar 命令
tar 命令可以为 linux 的文件和目录创建档案。利用 tar,可以为某一特定文件创建档案(备份文件),也可以在
档案中改变文件,或者向档案中加入新的文件。tar 最初被用来在磁带上创建档案,现在,用户可以在任何设备上创
建档案。利用 tar 命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为
一个文件以便于网络传输是非常有用的。
首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文
件通过一些压缩算法变成一个小文件。
为什么要区分这两个概念呢?这源于 Linux 中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一
大堆文件时,你得先将这一大堆文件先打成一个包(tar 命令),然后再用压缩程序进行压缩(gzip bzip2 命令)。
语法:
tar [选项] [参数]
选项
-A 或--catenate:新增文件到以存在的备份文件;
-B:设置区块大小;
-c 或--create:建立新的备份文件;
-C 解压文件到其他目录,当解压文件指定目标目录时候要使用这个参数指定;
-d:记录文件的差别;
-x 或--extract 或--get:从备份文件中还原文件;
-t 或--list:列出备份文件的内容;
-z 或--gzip 或--ungzip:通过 gzip 指令处理备份文件;
-Z 或--compress 或--uncompress:通过 compress 指令处理备份文件;
-f<备份文件>或--file=<备份文件>:指定备份文件;
-v 或--verbose:显示指令执行过程;
-r:添加文件到已经压缩的文件;
-u:添加改变了和现有的文件到已经存在的压缩文件;
-j:支持 bzip2 解压文件;
-v:显示操作过程; -xvf
-l:文件系统边界设置;
-k:保留原有文件不覆盖;
-m:保留文件不被覆盖;
-w:确认压缩文件的正确性;
-p 或--same-permissions:用原来的文件权限还原文件;
-P 或--absolute-names:文件名使用绝对名称,不移除文件名称前的“/”号;
-N<日期格式>或--newer=<日期时间>:只将较指定日期更新的文件保存到备份文件里;
--exclude=<范本样式>:排除符合范本样式的文件。
参数
文件或目录:指定要打包的文件或目录列表。
实例
[root@localhost temp]# tar -cjf dir2
[root@localhost temp]# tar -czf dir2
将文件全部打包成 tar 包:
tar -cvf 仅打包,不压缩!
tar -zcvf 打包后,以 gzip 压缩
tar -jcvf 打包后,以 bzip2 压缩
在选项 f 之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。 如果加 z 选项,则以. 或.tgz 来
代表 gzip 压缩过的 tar 包;如果加 j 选项,则以. 来作为 tar 包名。
查阅上述 tar 包内有哪些文件:
tar –ztvf
由于我们使用 gzip 压缩的 ,所以要查阅 包内的文件时,就得要加上 z 这个选项了。
将 tar 包解压缩:
tar -zxvf /opt/soft/test/
在预设的情况下,我们可以将压缩档在任何地方解开的
把文件解压到根目录:
tar -xf -C /
tar -xf -C /
解到当前:
tar -xf
只将 tar 内的部分文件解压出来:
tar -zxvf /opt/soft/test/ 注意:得只识别一层
我可以透过 tar -ztvf 来查阅 tar 包内的文件名称,如果单只要一个文件,就可以透过这个方式来解压部分文件!
文件备份(压缩)下来,并且保存其权限:
tar -zcvpf
这个-p 的属性是很重要的,尤其是当您要保留原本文件的属性时。
在 bin/文件夹当中,比某个日期新的文件才执行压缩操作:
tar -N "2014/11/13" -zcvf bin/
备份文件夹内容是排除部分文件:
[root@localhost temp]# mkdir dir1
[root@localhost temp]# mkdir dir1/dir11
[root@localhost temp]# mkdir dir1/dir12
[root@localhost temp]# touch dir1/dir11/
排除 dir1/dir12 目录后,其他的打包:
[root@localhost temp]# tar --exclude dir1/dir12 -zcvf dir1/*
dir1/dir11/
dir1/dir11/
[root@localhost temp]#
zip 命令(创建 zip 压缩包)
该命令用于创建 zip 格式的压缩包。
语法:
zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目录>][-ll][-n <字 尾字符串>][-t <日 期时间>][-<压 缩效率>][压 缩文件][文
件...][-i <范本样式>][-x <范本样式>]
选项
-A:调整可执行的自动解压缩文件;
-b<工作目录>:指定暂时存放文件的目录;
-c:替每个被压缩的文件加上注释;
-d:从压缩文件内删除指定的文件;如:
删除压缩文件 中 文件
[root@mysql test]# zip -d
-D:压缩文件内不建立目录名称;
-f:此参数的效果和指定“-u”参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,
使用本参数会一并将其加入压缩文件中;
-F:尝试修复已损坏的压缩文件;
-g:将文件压缩后附加在已有的压缩文件之后,而非另行建立新的压缩文件;
-i<范本样式>:只压缩符合条件的文件;
-j:只保存文件名称及其内容,而不存放任何目录名称;
-J:删除压缩文件前面不必要的数据;
-k:使用 MS-DOS 兼容格式的文件名称;
-l:压缩文件时,把 LF 字符置换成 LF+CR 字符;
-ll:压缩文件时,把 LF+cp 字符置换成 LF 字符;
-L:显示版权信息;
-m:将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中;
如下:
向压缩文件中 中添加 test. MYI 文件
[root@mysql test]# zip -m test. MYI
-n<字尾字符串>:不压缩具有特定字尾字符串的文件;
-o:以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同;
-q:不显示指令执行过程;
-r:递归处理,将指定目录下的所有文件和子目录一并处理;
-S:包含系统和隐藏文件;
-T:检查备份文件内的每个文件是否正确无误;
-u:更换较新的文件到压缩文件内;
-v:显示指令执行过程或显示版本信息;
-x<范本样式>:压缩时排除符合条件的文件;
例如:向压缩文件中 中添加 test. MYI 文件
[root@mysql test]# zip -m test. MYI
-X:不保存额外的文件属性;
-y:直接保存符号连接,而非该链接所指向的文件,本参数仅在 UNIX 之类的系统下有效;
-z:替压缩文件加上注释;在 WINdows 下解压时可以看到所添加的注释,如下:
[root@localhost temp]# zip -z
enter new zip file comment (end with .):
sdkjvsdsd
skdvjnsd
sdjvn
.
-$:保存第一个被压缩文件所在磁盘的卷册名称;
-<压缩效率>:压缩效率是一个介于 1~9 的数值。如:zip -r -9 bin 压缩率 9
-P<密码>:使用 zip 的密码选项;如下:
[root@localhost temp]# zip -P 123456 k 把 k 压缩成 密码是 123456
参数
zip 压缩包:指定要创建的 zip 压缩包;
文件列表:指定要压缩的文件列表。
实例
将/home/Blinux/html/这个目录下所有文件和文件夹打包为当前目录下的 :
zip -q -r /home/Blinux/html
上面的命令操作是将绝对地址的文件及文件夹进行压缩,以下给出压缩相对路径目录,比如目前在 Bliux 这个
目录下,执行以下操作可以达到以上同样的效果:
zip -q -r html/
比如现在我的 html 目录下,我操作的 zip 压缩命令是:
zip -q -r *
unzip 命令
unzip 命令用于解压缩由 zip 命令压缩的“.zip”压缩包。
语法:
unzip [选项] [参数]
选项
-c:将解压缩文件的内容显示到屏幕上,并对字符做适当的转换;(一般不使用)
-f:更新现有的文件;
-l:显示压缩文件内所包含的文件;
-p:与-c 参数类似,会将解压缩的内容显示到屏幕上,但不会执行任何的转换;(一般不使用)
-t:检查压缩文件是否正确;
-u:与-f 参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中;
-v:查看文件但是不解压 ;
-z:仅显示压缩文件的备注文字,并不进行解压;
-a:对文本文件进行必要的字符转换;
-b:不要对文本文件进行字符转换;
-C:压缩文件中的文件名称区分大小写;
-j:不处理压缩文件中原有的目录路径;
-L:将压缩文件中的全部文件名改为小写;
-M:将输出结果送到 more 程序处理;
-n:解压缩时不要覆盖原有的文件;
-o:不必先询问用户,unzip 执行后覆盖原有的文件;
-P<密码>:使用 zip 的密码选项;
[root@localhost temp]# zip -P 123456 k 把 k 压缩成 密码是 123456
[root@localhost temp]# unzip -o -P 123456 解压,添加密码
Archive:
extracting: k
[root@localhost temp]#
-q:执行时不显示任何信息;
-s:将文件名中的空白字符转换为底线字符;
-X:解压缩时同时回存文件原来的 UID/GID;
-d<目录>:指定文件解压缩后所要存储的目录;
-x<文件>:指定不要处理.zip 压缩文件中的哪些文件;
-Z:unzip-Z 等于执行 zipinfo 指令。
参数
压缩包:指定要解压的“.zip”压缩包。
实例
将压缩文件 在当前目录下解压缩。
unzip
将压缩文件 在指定目录/tmp 下解压缩,如果已有相同的文件存在,要求 unzip 命令不覆盖原先的文件。
unzip -n -d /tmp
查看压缩文件目录,但不解压。
unzip -v
将压缩文件 在指定目录/tmp 下解压缩,如果已有相同的文件存在,要求 unzip 命令覆盖原先的文件。
unzip -o -d tmp/
将压缩文件 在指定目录/tmp 下解压缩,如果已有相同的文件存在,要求 unzip 命令不覆盖原先的文件。
[root@mysql test]# unzip -n -d /tmp
查看压缩文件目录,但不解压。
[root@mysql test]# unzip -v
使用 unzip "*.zip"
ls *.zip | xargs -n1 unzip
解压当前目录下的所有 zip 文件
find 命令
find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命
令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显
示。
语法:
find pathname [选项] [参数]
pathname: find 命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录
选项
-amin <分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;
-anewer <参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;
-atime <24 小时数>:查找在指定时间曾被存取过的文件或目录,单位以 24 小时计算;
-cmin <分钟>:查找在指定时间之时被更改过的文件或目录;
-cnewer <参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-ctime <24 小时数>:查找在指定时间之时被更改的文件或目录,单位以 24 小时计算;
-daystart:从本日开始计算时间;
-depth:从指定目录下最深层的子目录开始查找;
- empty:寻找文件大小为 0 Byte 的文件,或目录下没有任何子目录或文件的空目录;
[root@localhost temp]# find . -empty
./bin/k
./~
[root@localhost temp]# mkdir k2
[root@localhost temp]# find . -empty
./bin/k
./~
./k2
[root@localhost temp]#
-exec <执行指令>:假设 find 指令的回传值为 True,就执行该指令;
-false:将 find 指令的回传值皆设为 False;
-fls <列表文件>:此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件;
-follow:排除符号连接;
-fprint <列表文件>:此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件;
[root@localhost temp]# find ./ -name k -fprint lst --》把查找结果存放在 lst 文件中。
-fprint0 <列表文件>:此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件;
-fprintf <列表文件><输出格式>:此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表文件;
-fstype <文件系统类型>:只寻找该文件系统类型下的文件或目录;
[root@localhost temp]# find . -lname "*zip*" -fstype nfs
[root@localhost temp]# find . -lname "*zip*" -fstype ext
[root@localhost temp]# find . -lname "*zip*" -fstype ext2
[root@localhost temp]# find . -lname "*zip*" -fstype ext3
[root@localhost temp]# find . -lname "*zip*" -fstype ext4
./lzip
[root@localhost temp]# find . -lname "*zip*"
./lzip
[root@localhost temp]#
-gid <群组识别码>:查找符合指定之群组识别码的文件或目录;
-group <群组名称>:查找符合指定之群组名称的文件或目录;
-help 或——help:在线帮助;
-ilname <范本样式>:此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别;
-iname <范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别;
-inum <inode 编号>:查找符合指定的 inode 编号的文件或目录;
-ipath <范本样式>:此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别;
-iregex <范本样式>:此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别;
-lname <范本样式>:指定字符串作为寻找符号连接的范本样式;
[root@localhost temp]# find . -name "*zip*" -ls
8257668 6124 -rw-r--r-- 1 root root 6269981 2 月 28 12:18 ./
8257587 4 -rwxr-xr-x 1 root root 61 6 月 29 2010 ./bin/gunzip
8257588 68 -rwxr-xr-x 1 root root 67500 6 月 29 2010 ./bin/gzip
8257682 0 lrwxrwxrwx 1 root root 7 2 月 28 15:20 ./lzip ->
8257669 6116 -rw-r--r-- 1 root root 6262675 2 月 28 12:27 ./
8257665 6144 -rw-r--r-- 1 root root 6291370 2 月 28 12:26 ./
8257666 4 -rw-r--r-- 1 root root 180 2 月 28 12:09 ./
8257667 6584 -rw-r--r-- 1 root root 6740377 2 月 28 12:19 ./
8257664 4 -rwxrw-rw- 1 root root 152 2 月 28 12:23 ./
[root@localhost temp]# find . -lname "*zip*" -ls
8257682 0 lrwxrwxrwx 1 root root 7 2 月 28 15:20 ./lzip ->
[root@localhost temp]#
-ls:假设 find 指令的回传值为 Ture,就将文件或目录名称列出到标准输出;
-maxdepth <目录层级>:设置最大目录层级;
-mindepth <目录层级>:设置最小目录层级;
-mmin <分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算;
-mount:在当前的文件系统中查找文件(不进入其他文件系统),此参数的效果和指定“-xdev”相同;
实例 1:从当前目录开始查找位于本文件系统中文件名以 XC 结尾的文件
命令:
find . -name "*.XC" -mount -print
-mtime <24 小时数>:查找在指定时间曾被更改过的文件或目录,单位以 24 小时计算;
-name <范本样式>:指定字符串作为寻找文件或目录的范本样式;
-newer <参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
查找比某个文件新或旧的文件:
如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer 选项。
它的一般形式为: newest_file_name ! oldest_file_name
其中,!是逻辑非符号。
实例 1:查找更改时间比文件 新但比文件 旧的文件
命令:
find -newer ! -newer
实例 2:查找更改时间在比 文件新的文件
命令:
find . -newer -print
-nogroup:找出不属于本地主机群组识别码的文件或目录;
-noleaf:不去考虑目录至少需拥有两个硬连接存在;
-nouser:找出不属于本地主机用户识别码的文件或目录;
-ok<执行指令>:此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放
弃执行命令;
-path <范本样式>:指定字符串作为寻找目录的范本样式;
-perm <权限数值>:查找符合指定的权限数值的文件或目录;
-print:假设 find 指令的回传值为 Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名
称前皆有“./”字符串;
-print0:假设 find 指令的回传值为 Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行;
PS: print 与 print0 输出上只有是否换行的区别
-printf <输出格式>:假设 find 指令的回传值为 Ture,就将文件或目录名称列出到标准输出。格式可以自行指定;
-prune:不寻找字符串作为寻找文件或目录的范本样式;
如果在查找文件时希望忽略某个目录,因为你知道那个目录中没有你所要查找的文件,那么可以使用-prune 选
项来指出需要忽略的目录。在使用-prune 选项时要当心,因为如果你同时使用了-depth 选项,那么-prune 选项
就会被 find 命令忽略。如果希望在 test 目录下查找文件,但不希望在 test/test3 目录下查找,可以用:
在路径列表的后面的是表达式
-path "test" -prune -o -print 是 -path "test" -a -prune -o -print 的简写表达式按顺序求值, -a 和 -o 都是短路求值,
与 shell 的 && 和 || 类似如果 -path "test" 为真,则求值 -prune , -prune 返回真,与逻辑表达式为真;否则不
求值 -prune,与逻辑表达式为假。如果 -path "test" -a -prune 为假,则求值 -print ,-print 返回真,或逻辑表达
式为真;否则不求值 -print,或逻辑表达式为真。
这个表达式组合特例可以用伪码写为:
if -path "test" then
-prune
else
-print
实例 2:避开多个文件夹:
命令:
find test \( -path test/test4 -o -path test/test3 \) -prune -o -print
说明:圆括号表示表达式的结合。 \ 表示引用,即指示 shell 不对后面的字符作特殊解释,而留给 find 命令
去解释其意义
[root@localhost soft]# find test -path "test/test3" -prune -o -print
test
test/
test/
test/test4
test/test4/
test/test4/
test/test4/
test/scf
test/scf/lib
test/scf/service
test/scf/service/deploy
test/scf/service/deploy/product
test/scf/service/deploy/info
test/scf/doc
test/scf/bin
test/
test/
[root@localhost soft]#
实例 3:查找某一确定文件,-name 等选项加在-o 之后
命令:
find test \( -path test/test4 -o -path test/test3 \) -prune -o -name "*.log" -print
输出:
[root@localhost soft]# find test \( -path test/test4 -o -path test/test3 \) -prune -o -name "*.log" -print
test/
test/
test/
test/
[root@localhost soft]#
-regex <范本样式>:指定字符串作为寻找文件或目录的范本样式;
-size <文件大小>:查找符合指定的文件大小的文件;
-true:将 find 指令的回传值皆设为 True;
-type <文件类型>:只寻找符合指定的文件类型的文件;
实例 1:在/etc 目录下查找所有的目录
命令:
find /etc -type d -print
实例 2:在当前目录下查找除目录以外的所有类型的文件
命令:
find . ! -type d -print
实例 3:在/etc 目录下查找所有的符号链接文件
命令:
find /etc -type l -print
-uid <用户识别码>:查找符合指定的用户识别码的文件或目录;
-used <日数>:查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算;
-user <拥有者名称>:查找符和指定的拥有者名称的文件或目录;
-version 或——version:显示版本信息;
-xdev:将范围局限在先行的文件系统中;
-xtype <文件类型>:此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查。
参数
起始目录:查找文件的起始目录。
实例
列出当前目录及子目录下所有文件和文件夹
find .
在/home 目录下查找以.txt 结尾的文件名
find /home -name "*.txt"
同上,但忽略大小写
find /home -iname "*.txt"
当前目录及子目录下查找所有以.txt 和 .pdf 结尾的文件
find . \( -name "*.txt" -o -name "*.pdf" \)
或
find . -name "*.txt" -o -name "*.pdf"
匹配文件路径或者文件:在/usr/目录下查找所有路径中带 local 的文件或文件夹
find /usr/ -path "*local*"
基于正则表达式匹配文件路径:
find . -regex ".*\(\.txt\|\.pdf\)$" 查找所有以.txt 或.pdf 结束的文件
同上,但忽略大小写
find . -iregex ".*\(\.txt\|\.pdf\)$"
否定参数:找出/home 下不是以.txt 结尾的文件
find /home ! -name "*.txt"
根据文件类型进行搜索
find . -type 类型参数
类型参数列表:
f 普通文件
l 符号连接
d 目录
c 字符设备
b 块设备
s 套接字
p Fifo
基于目录深度搜索:
向下最大深度限制为 3:
find . –maxdepth 3 –type f
搜索出深度距离当前目录至少 2 个子目录的所有文件
find . –mindepth 2 –type f
根据文件时间戳进行搜索:
find . –type f 时间戳
UNIX/Linux 文件系统每个文件都有三种时间戳:
访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。
修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。
变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。
搜索最近七天内被访问过的所有文件:
find . -type f -atime -7
搜索恰好在七天前被访问过的所有文件:
find . -type f -atime 7
搜索超过七天内被访问过的所有文件:
find . -type f -atime +7
搜索访问时间超过 10 分钟的所有文件:
find . -type f -amin +10
找出比 修改时间更新的所有文件
find . -type f -newer
示例:
[root@localhost temp]# touch kkk 先创建一个比较文件
[root@localhost temp]# find . –type f –newer kkk 第一次查找,方便比较
[root@localhost temp]# touch abc 再创建一个较新的文件
[root@localhost temp]# find . –type f –newer kkk 第二次查找
./abc
[root@localhost temp]#
根据文件大小进行匹配:
find . –type f –size 文件大小单元
文件大小单元:
b —— 块(512 字节)
c —— 字节
w —— 字(2 字节)
k —— 千字节
M —— 兆字节
G —— G 字节
搜索大于 10KB 的文件
find . -type f –size +10k
搜索小于 10KB 的文件
find . -type f –size -10k
搜索等于 10KB 的文件:
find . -type f –size 10k
删除匹配文件:
删除当前目录下所有.txt 文件:
find . -type f -name "*.txt" -delete
根据文件权限/所有权进行匹配:
当前目录下搜索出权限为 777 的文件:
find . -type f -perm 777
找出当前目录下权限不是 644 的 php 文件:
find . -type f -name "*.php" ! -perm 644
找出当前目录用户 zhifachen 拥有的所有文件:
find . -type f -user zhifachen
找出当前目录用户组 sunk 拥有的所有文件
find . -type f -group sunk
借助-exec 选项与其他命令结合使用
找出当前目录下所有 root 的文件,并把所有权更改为用户 tom
find . -type f -user root -exec chown tom {} \;
上例中,{} 用于与-exec 选项结合使用来匹配所有文件,然后会被替换为相应的文件名。
找出自己家目录下所有的.txt 文件并删除
find $HOME/. -name "*.txt" -ok rm {} \;
上例中,-ok 和-exec 行为一样,不过它会给出提示,是否执行相应的操作。
查找当前目录下所有.txt 文件并把他们拼接起来写入到 文件中
[root@localhost temp]# ls *.txt
[root@localhost temp]# cat *.txt
123
456
abc
bcd
[root@localhost temp]# find . -type f -name "*.txt" -exec cat {} \;>
cat: ./:输入文件是输出文件
[root@localhost temp]# ls
~ bin ~
[root@localhost temp]# cat
123
456
abc
bcd
[root@localhost temp]#
将 30 天前的.log 文件移动到 old 目录中
find . -type f -mtime +30 -name "*.log" -exec cp {} old \;
找出当前目录下所有.txt 文件并以“File:文件名”的形式打印出来
find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;
因为单行命令中-exec 参数中无法使用多个命令,以下方法可以实现在-exec 之后接受多条命令
-exec ./ {} \;
搜索但跳出指定的目录
查找当前目录或者子目录下所有.txt 文件,但是跳过子目录 sk
find . -path "./sk" -prune -o -name "*.txt" -print
find 其他技巧收集
要列出所有长度为零的文件
find . -empty
查找指定名字的目录
[root@ChenZhiFa /]# find /proc/ -type d -name KEY0
/proc/irq/442/KEY0
[root@ChenZhiFa /]# find /proc/ -type d -name KEY
使用通配符
[root@ChenZhiFa /]# find /proc/ -type d -name KEY*
/proc/irq/445/KEY3
/proc/irq/444/KEY2
/proc/irq/443/KEY1
/proc/irq/442/KEY0
[root@ChenZhiFa /]#
使用 find 和 grep 命令搜索包含指定字符串的 .h 文件:
[root@localhost ]# find ./ -name "*.h" | xargs grep -i 'DECLARE_WAIT_QUEUE_HEAD' -nR
find 命令在当前目录中查找所有文件名以.LOG 结尾、更改时间在 5 日以上的文件,并删除它们,只不过在删
除之前先给出提示。
[root@localhost temp]# find . -name "*.conf" -mtime +5 -ok rm { } \;
< rm ... ./conf/ > ? n
按 y 键删除文件,按 n 键不删除。
任何形式的命令都可以在-exec 选项中使用。
find 命令首先匹配所有文件名为“ passwd*”的文件,例如 passwd、、,然后执行 grep 命令看看在这些文件中
是否存在一个 nobody 用户。
[root@localhost temp]# find /etc -name "passwd*" -exec grep "nobody" {} \;
nobody:x:99:99:Nobody:/:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
[root@localhost temp]#
想要的当前目录及子目录中查找文件名以大写字母开头的文件,可以用:
$ find . -name "[A-Z]*" -print
示例:
[root@localhost temp]# find . -name "[A-Z]*" -print
[root@localhost temp]# touch Kk
[root@localhost temp]# find . -name "[A-Z]*" -print
./Kk
[root@localhost temp]# touch KK
[root@localhost temp]# find . -name "[A-Z]*" -print
./Kk
./KK
[root@localhost temp]#
当前目录查找文件名以两个小写字母开头,跟着是两个数字,最后是* . t x t 的文
件,下面的命令就能够返回名为 a x 3 7 . t x t 的文件:
$ find . -name "[a-z][a-z][0-9][0-9].txt" -print
示例:
[root@localhost temp]# find . -name "[a-z][a-z][0-9][0-9].txt" -print
[root@localhost temp]# touch
[root@localhost temp]# find . -name "[a-z][a-z][0-9][0-9].txt" -print
./
[root@localhost temp]#
[root@localhost temp]# find . -name "[a-z][a-z][0-9][0-9]*.txt" -print
./
./
[root@localhost temp]#
chmod 命令
chmod 命令用来变更文件或目录的权限。在 UNIX 系统家族里,文件或目录权限的控制分别以读取、写入、执
行 3 种一般权限来区分,另有 3 种特殊权限可供运用。用户可以使用 chmod 指令去变更文件与目录的权限,设置方
式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的
原始文件。
权限范围的表示法如下:
u User,即文件或目录的拥有者;
g Group,即文件或目录的所属群组;
o Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围;
a All,即全部的用户,包含拥有者,所属群组以及其他用户;
r 读取权限,数字代号为“4”;
w 写入权限,数字代号为“2”;
x 执行或切换权限,数字代号为“1”;
- 不具任何权限,数字代号为“0”;
s 特殊功能说明:变更文件或目录的权限。
语法:
chmod [选项] [参数]
选项
-c 或——changes:效果类似“-v”参数,但仅回报更改的部分;
-f 或--quiet 或——silent:不显示错误信息;
-R 或——recursive:递归处理,将指令目录下的所有文件及子目录一并处理;
-v 或——verbose:显示指令执行过程;
--reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
<权限范围>+<权限设置>:开启权限范围的文件或目录的该选项权限设置;
<权限范围>-<权限设置>:关闭权限范围的文件或目录的该选项权限设置;
<权限范围>=<权限设置>:指定权限范围的文件或目录的该选项权限设置;
参数
权限模式:指定文件的权限模式;
文件:要改变权限的文件。
实例
Linux 用 户分为:拥有者、组群(Group)、其他(other),Linux 系统中,预设的情況下,系统中所有的帐号与
一般身份使用者,以及 root 的相关信息, 都是记录在/etc/passwd 文件中。每个人的密码则是记录在/etc/shadow 文
件下。 此外,所有的组群名称记录在/etc/group 內!
linux 文件的用户权限的分析图
例:rwx rw- r--
r=读取属性 //值=4
w=写入属性 //值=2
x=执行属性 //值=1
chmod u+x,g+w f01 //为文件 f01 设置自己可以执行,组员可以写入的权限
chmod u-x f01 //取消 f01 所属用户的执行权限
chmod u=rwx,g=rw,o=r f01
chmod 764 f01
chmod a+x f01 //对文件 f01 的 u,g,o 都设置可执行属性
文件的属主和属组属性设置
chown root:zhifachen f01 //把文件 f01 给 root 用户组的 zhifachen 用户
chgrp 命令
chgrp 命令用来改变文件或目录所属的用户组。该命令用来改变指定文件所属的用户组。其中,组名可以是用
户组的 ID,也可以是用户组的组名。文件名可以是由空格分开的要改变属组的文件列表,也可以是由通配符描述的
文件集合。如果用户不是该文件的文件主或超级用户(root),则不能改变该文件的组。
在 UNIX 系统家族里,文件或目录权限的掌控以拥有者及所属群组来管理。您可以使用 chgrp 指令去变更文件
与目录的所属群组,设置方式采用群组名称或群组识别码皆可。
语法:
chgrp [选项] [参数]
选项
-c 或——changes:效果类似“-v”参数,但仅回报更改的部分;
-f 或--quiet 或——silent:不显示错误信息;
-h 或--no-dereference:只对符号连接的文件作修改,而不是该其他任何相关文件;
-R 或——recursive:递归处理,将指令目录下的所有文件及子目录一并处理;
-v 或——verbose:显示指令执行过程;
--reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
参数
组:指定新工作名称;
文件:指定要改变所属组的文件列表。多个文件或者目录之间使用空格隔开。
实例
将/usr/meng 及其子目录下的所有文件的用户组改为 mengxin
chgrp -R mengxin /usr/meng
chown 命令
chown 命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的
所有者或者改变文件所属的组。用户可以是用户或者是用户 ID,用户组可以是组名或组 ID。文件名可以使由空格
分开的文件列表,在文件名中可以包含通配符。
只有文件主和超级用户才可以便用该命令。
语法:
chown [选项] [参数]
选项
-c 或——changes:效果类似“-v”参数,但仅回报更改的部分;
-f 或--quite 或——silent:不显示错误信息;
-h 或--no-dereference:只对符号连接的文件作修改,而不更改其他任何相关文件;
-R 或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理;
-v 或——version:显示指令执行过程;
--dereference:效果和“-h”参数相同;
参数
用户:组:指定所有者和所属工作组。当省略“:组”,仅改变文件所有者;
文件:指定要改变所有者和工作组的文件列表。支持多个文件和目标,支持 shell 通配符。
实例
将目录/usr/meng 及其下面的所有文件、子目录的文件主改成 zhifachen:
chown -R zhifachen/usr/meng
umask 命令
umask 命令用来设置限制新建文件权限的掩码。当新文件被创建时,其最初的权限由文件创建掩码决定。用户
每次注册进入系统时,umask 命令都被执行, 并自动设置掩码 mode 来限制新文件的权限。用户可以通过再次执行
umask 命令来改变默认值,新的权限将会把旧的覆盖掉。
语法:
umask [选项] [参数]
选项
-p:输出的权限掩码可直接作为指令来执行;
-S:以符号方式输出权限掩码。
参数
权限掩码:指定权限掩码。
实例
利用 umask 命令可以指定哪些权限将在新文件的默认权限中被删除。例如,可以使用下面的命令创建掩码,使
得组用户的写权限,其他用户的读、写和执行权限都被取消:
umask u=, g=w, o=rwx
执行该命令以后,对于下面创建的新文件,其文件主的权限未做任何改变,而组用户没有写权限,其他用户的
所有权限都被取消。
应注意:操作符“=”在 umask 命令和 chmod 命令中的作用恰恰相反。在 chmod 命令中,利用它来设置指定的权
限,而其余权限则被删除;但是在 umask 命令中,它将在原有权限的基础上删除指定的权限。
不能直接利用 umask 命令创建一个可执行的文件,用户只能在其后利用 chmod 命令使它具有执行权限。假设执
行了命令 umask u=, g=w, o=rwx,虽然在命令行中,没有删去文件主和组用户的执行权限,但默认的文件权限
还是 640(即 rw-r-----),而不是 750(rwxr-x---)。但是,如果创建的是目录或者通过编译程序创建的一个可
执行文件,将不受此限制。在这种情况 下,会设置文件的执行权限。
也可以使用八进制数值来设置 mode。由于在 umask 中所指定的权限是要从文件中删除的,所以,如果该文件
原来的初始化权限是 777,那么执行命令 umask 022 以后,该文件的权限将变为 755:如果该文件原来的初始
化权限是 666,那么该文件的权限将变为 644。
可以使用下面的命令检查新创建文件的默认权限:
umask -S
选项-s 表示以字符形式显示当前的掩码。如果直接输入 umask 命令,不带任何参数,那么将以八进制形式显示
当前的掩码。系统默认的掩码是 0022。
cat 命令
cat 命令连接文件并打印到标准输出设备上,cat 经常用来显示文件的内容,类似于下的 type 命令。
注意:当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容。因此,一般用 more
等命令分屏显示。为了控制滚屏,可以按 Ctrl+S 键,停止滚屏;按 Ctrl+Q 键可以恢复滚屏。按 Ctrl+C(中断)键
可以终止该命令的执行,并且返回 Shell 提示符状态
语法:
cat [选项] [参数]
选项
-n 或-number:有 1 开始对所有输出的行数编号;
-b 或--number-nonblank:和-n 相似,只不过对于空白行不编号;
-s 或--squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行;
-A:显示不可打印字符,行尾显示“$”;
-e:等价于"-vE"选项;
-t:等价于"-vT"选项;
参数
文件列表:指定要连接的文件列表。
实例
设 ml 和 m2 是当前目录下的两个文件
cat m1 (在屏幕上显示文件 ml 的内容)
cat m1 m2 (同时显示文件 ml 和 m2 的内容)
cat m1 m2 > file (将文件 ml 和 m2 合并后放入文件 file 中)
head 命令
head 命令用于显示文件的开头的内容。在默认情况下,head 命令显示文件的头 10 行内容。
语法:
head [选项] [参数]
选项
-n <数字>:指定显示头部内容的行数;
-c <字符数>:指定显示头部内容的字符数;
-v:总是显示文件名的头信息;
-q:不显示文件名的头信息。
参数
文件列表:指定显示头部内容的文件列表。
实例
实例 1:显示文件的前 n 行
命令:
head -n 5
输出:
[root@localhost test]# cat
2014-01
2014-02
2014-03
2014-04
2014-05
2014-06
2014-07
2014-08
2014-09
2014-10
2014-11
2014-12
==============================
[root@localhost test]# head -n 5
2014-01
2014-02
2014-03
2014-04
2014-05[root@localhost test]#
实例 2:显示文件前 n 个字节
命令:
head -c 20
输出:
[root@localhost test]# head -c 20
2014-01
2014-02
2014
[root@localhost test]#
实例 3:文件的除了最后 n 个字节以外的内容
命令:
head -c -32
输出:
[root@localhost test]# head -c -32
2014-01
2014-02
2014-03
2014-04
2014-05
2014-06
2014-07
2014-08
2014-09
2014-10
2014-11
2014-12[root@localhost test]#
实例 4:输出文件除了最后 n 行的全部内容
命令:
head -n -6
输出:
[root@localhost test]# head -n -6
2014-01
2014-02
2014-03
2014-04
2014-05
2014-06
2014-07[root@localhost test]#
tail 命令
tail 命令用于输入文件中的尾部内容。tail 命令默认在屏幕上显示指定文件的末尾 10 行。如果给定的文件不止
一个,则在显示的每个文件前面加一个文件名标题。如果没有指定文件或者文件名为“-”,则读取标准输入。
注意:如果表示字节或行数的 N 值之前有一个”+”号,则从文件开头的第 N 项开始显示,而不是显示文件的最
后 N 项。N 值后面可以有后缀:b 表示 512,k 表示 1024,m 表示 1 048576(1M)。
语法:
tail [选项] [参数]
选项
--retry:即是在 tail 命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。使用此选项
时需要与选项“--follow=name”连用;
-c <N>或--bytes=<N>:输出文件尾部的 N(N 为整数)个字节内容;
-f <name/descriptor>或;--follow <nameldescript>:显示文件最新追加的内容。“name”表示以文件名的方式监
视文件的变化。“-f”与“-fdescriptor”等效;
-F:与选项“-follow=name”和“--retry"连用时功能相同;
-n <N>或 --line=<N>:输出文件的尾部 N(N 位数字)行内容。
--pid=<进程号>:与“-f”选项连用,当指定的进程号的进程终止后,自动退出 tail 命令;
-q 或--quiet 或--silent:当有多个文件参数时,不输出各个文件名;
-s<秒数>或--sleep-interal=<秒数>:与“-f”选项连用,指定监视文件变化时间隔的秒数;
-v 或——verbose:当有多个文件参数时,总是输出各个文件名;
参数
文件列表:指定要显示尾部内容的文件列表
实例
tail file (显示文件 file 的最后 10 行)
tail +20 file (显示文件 file 的内容,从第 20 行至文件末尾)
tail -c 10 file (显示文件 file 的最后 10 个字符)
实例 1:显示文件末尾内容
命令:
tail -n 5
输出:
[root@localhost test]# tail -n 5
2014-09
2014-10
2014-11
2014-12
==============================[root@localhost test]#
说明:
显示文件最后 5 行内容
实例 2:循环查看文件内容
命令:
tail -f
输出:
[root@localhost ~]# ping > &
[1] 11891[root@localhost ~]# tail -f
PING () 56(84) bytes of data.
64 bytes from : icmp_seq=1 ttl=64 time= ms
64 bytes from : icmp_seq=2 ttl=64 time= ms
64 bytes from : icmp_seq=3 ttl=64 time= ms
64 bytes from : icmp_seq=4 ttl=64 time= ms
64 bytes from : icmp_seq=5 ttl=64 time= ms
64 bytes from : icmp_seq=6 ttl=64 time= ms
64 bytes from : icmp_seq=7 ttl=64 time= ms
64 bytes from : icmp_seq=8 ttl=64 time= ms
64 bytes from : icmp_seq=9 ttl=64 time= ms
64 bytes from : icmp_seq=10 ttl=64 time= ms
64 bytes from : icmp_seq=11 ttl=64 time= ms
[root@localhost ~]#
说明:
ping > & //在后台 ping 远程主机。并输出文件到 ;这种做法也使用于一个
以上的档案监视。用 Ctrl+c 来终止。
实例 3:从第 5 行开始显示文件
命令:
tail -n +5
输出:
[root@localhost test]# cat
2014-01
2014-02
2014-03
2014-04
2014-05
2014-06
2014-07
2014-08
2014-09
2014-10
2014-11
2014-12
==============================
[root@localhost test]# tail -n +5
2014-05
2014-06
2014-07
2014-08
2014-09
2014-10
2014-11
2014-12
==============================
more 命令
more 命令是一个基于 vi 编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持 vi 中的关键字
定位操作。more 名单中内置了若干快捷键,常用的有 H(获得帮助信息),Enter(向下翻滚一行),空格(向下
滚动一屏),Q(退出命令)。
该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的
百分比:--More--(XX%)可以用下列不同的方法对提示做出回答:
按 Space 键:显示文本的下一屏内容。
按 Enter 键:只显示文本的下一行内容。
按斜线符|:接着输入一个模式,可以在文本中寻找下一个相匹配的模式。
按 H 键:显示帮助屏,该屏上有相关的帮助信息。
按 B 键:显示上一屏内容。
按 Q 键:退出 rnore 命令。
语法:
more [选项] [参数]
选项
-<数字>:指定每屏显示的行数;
-d:显示“[press space to continue,'q' to quit.]”和“[Press 'h' for instructions]”;
-c:不进行滚屏操作。每次刷新这个屏幕;
-s:将多个空行压缩成一行显示;
-u:禁止下划线;
+<数字>:从指定数字的行开始显示。
参数
文件:指定分页显示内容的文件。
实例
显示文件 file 的内容,但在显示之前先清屏,并且在屏幕的最下方显示完核的百分比。
more -dc file
显示文件 file 的内容,每 10 行显示一次,而且在显示之前先清屏。
more -c -10 file
less 命令
less 命令的作用与 more 十分相似,都可以用来浏览文字档案的内容,不同的是 less 命令允许用户向前或向后浏
览文件。用 less 命令显示文件时,用 PageUp 键向上翻页,用 PageDown 键向下翻页。要退出 less 程序,应按 Q 键。
语法:
less [选项] [参数]
选项
-b <缓冲区大小> 设置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似 more 命令的百分比
-N 显示每行的行号
-o <文件名> 将 less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时间将超出部分舍弃
-x <数字> 将“tab”键显示为规定的数字空格
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
b 向后翻一页
d 向后翻半页
h 显示帮助界面
Q 退出 less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一行
回车键 滚动一页
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页
参数
文件:指定要分屏显示内容的文件。
实例
实例 1:查看文件
命令:
less
输出:
实例 2:ps 查看进程信息并通过 less 分页显示
命令:
ps -ef |less
输出:
实例 3:查看命令历史使用记录并通过 less 分页显示
命令:
history | less
输出:
[root@localhost test]# history | less
22 scp -r root@:/opt/soft
23 cd ..
24 scp -r web root@:/opt/
25 cd soft
26 ls
27 scp -r _16/ root@:/opt/soft
28 clear
29 vim /etc/profile
30 vim /etc/profile
31 cd
32 ls
33 ./
34 ./
35 vim
36 ls
37 echo $JAVA_HOME
38 java
39 ls
40 ls
41 clear
42 cd /opt
43 ls
44 cp soft/
45 ls
46 rm -f
47 ls
48 cd soft
49 ls
50 tar -vzf
51 tar -vzfx
52 tar -zxvf
53 ls
54 cd
55 ls
56 cd ..
57 mv
58 ls
59 cd
60 ls
实例 5:浏览多个文件
命令:
Less
输出:
说明:
输入 :n 后,切换到
输入 :p 后,切换到
5.附加备注
1.全屏导航
ctrl + F - 向前移动一屏
ctrl + B - 向后移动一屏
ctrl + D - 向前移动半屏
ctrl + U - 向后移动半屏
2.单行导航
j - 向前移动一行
k - 向后移动一行
3.其它导航
G - 移动到最后一行
g - 移动到第一行
q / ZZ - 退出 less 命令
4.其它有用的命令
v - 使用配置的编辑器编辑当前文件
h - 显示 less 的帮助文档
&pattern - 仅显示匹配模式的行,而不是整个文件
5.标记导航
当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文
本位置:
ma - 使用 a 标记文本的当前位置
'a - 导航到标记 a 处
dd 命令
dd 命令用于复制文件并对原文件的内容进行转换和格式化处理。dd 命令功能很强大的,对于一些比较底层的
问题,使用 dd 命令往往可以得到出人意料的效果。用得比较多的还是用 dd 来备份裸设备。但是不推荐,如果需要
备份 oracle 裸设备,可以使用 rman 备份,或使用第三方软件备份,使用 dd 的话,管理起来不太方便。
建议在有需要的时候使用 dd 对物理磁盘操作,如果是文件系统的话还是使用 tar backup cpio 等其他命令更加
方便。另外,使用 dd 对磁盘操作时,最好使用块设备文件。
语法:
dd[选项] [参数]
选项
bs=<字节数>:将 ibs(输入)与 obs(输出)设成指定的字节数;
cbs=<字节数>:转换时,每次只转换指定的字节数;
conv=<关键字>:指定文件转换的方式;
count=<区块数>:仅读取指定的区块数;
ibs=<字节数>:每次读取的字节数;
obs=<字节数>:每次输出的字节数;
if=<文件>:输入文件;
of=<文件>:输出到文件;
seek=<区块数>:一开始输出时,跳过指定的区块数;
skip=<区块数>:一开始读取时,跳过指定的区块数;
实例
例 1:要把一张软盘的內容复制到另一张软盘上,先将源盘内容制作成 img 映象文件,然后插入目标空白软盘,
将该映象文件写到目标盘上去。
先插入源盘:
dd if=/dev/fd0 of=/temp/
2880+0 records in
2880+0 records out
生成的 img 文件可以使用 WinImage 这一类的工具打开并查看。
再插入目标盘:
dd if=./temp/ of=/dev/fd0
2880+0 records in
2880+0 records out
例 2:直接将源盘内容复制到目标盘上去,目标盘为已经格式化过的空白软盘。
fdformat /dev/fd1
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
Formatting ... done
Verifying ... done
上面是格式化目标软盘,使之成为一张空白的没有任何文件系统的软盘。
mount /dev/fd0 ./fd0
mount: block device /dev/fd0 is write-protected, mounting read-only
ls ./fd0
vmlinuz
上面是挂载源软盘,并查看其中的内容。
umount fd0
卸掉源软盘,在使用 dd 命令的时候,不要挂载任何软盘,已经挂载的要卸掉。
dd if=/dev/fd0 of=/dev/fd1
2880+0 records in
2880+0 records out
使用 dd 命令复制源盘内容到目标盘,成功运行后,目标盘将变成和源盘一模一样,文件系统内容也一样。
mount /dev/fd1 ./fd1
ls ./fd1
vmlinuz
挂载目标盘,并查看其中内容,结果和源盘一样。
例 3:文件复制功能,将 file1 复制到 file2。
dd if=file1 of=file2
0+1 records in
0+1 records out
例 4:写 512 字节到文件中
dd if=/dev/zero of=./myfile bs=512 count=1
或(count 默认为 1):
dd if=/dev/zero of=./myfile bs=512
或(bs 默认为 512):
dd if=/dev/zero of=./myfile count=1
但这样是不行的,它将一直填充:
dd if=/dev/zero of=./myfile
ln 命令
ln 命令用来为文件创件连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接。如果要创建符
号连接必须使用"-s"选项。
注意:符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是
没有意义的。
语法:
ln [选项] [参数]
选项
-b 或--backup:删除,覆盖目标文件之前的备份;
-d 或-F 或--directory:建立目录的硬连接;
-f 或--force:强行建立文件或目录的连接,不论文件或目录是否存在;
-i 或--interactive:覆盖既有文件之前先询问用户;
-n 或--no-dereference:把符号连接的目的目录视为一般文件;
-s 或--symbolic:对源文件建立符号连接,而非硬连接;
-S <字尾备份字符串>或--suffix=<字尾备份字符串>:用"-b"参数备份目标文件后,备份文件的字尾会被加上一
个备份字符串,预设的备份字符串是符号“~”,用户可通过“-S”参数来改变它;
-v 或--verbose:显示指令执行过程;
-V<备份方式>或--version-control=<备份方式>:用“-b”参数备份目标文件后,备份文件的字尾会被加上一个备
份字符串,这个字符串不仅可用“-S”参数变更,当使用“-V”参数<备份方式>指定不同备份方式时,也会产生不同字
尾的备份字符串;
参数
源文件:指定连接的源文件。如果使用-s 选项创建符号连接,则“源文件”可以是文件或者目录。创建硬连接时,
则“源文件”参数只能是文件;
目标文件:指定源文件的目标连接文件。
实例
将目录/usr/mengqc/mub1 下的文件 链接到目录/usr/liu 下的文件
cd /usr/mengqc
ln /mub1/ /usr/liu/
在执行 ln 命令之前,目录/usr/liu 中不存在 文件。执行 ln 之后,在/usr/liu 目录中才有 这一项,表明
和 链接起来(注意,二者在物理上是同一文件),利用 ls -l 命令可以看到链接数的变化。
在目录/usr/liu 下建立一个符号链接文件 abc,使它指向目录/usr/mengqc/mub1
ln -s /usr/mengqc/mub1 /usr/liu/abc
执行该命令后,/usr/mengqc/mub1 代表的路径将存放在名为/usr/liu/abc 的文件中。
扩展知识
Linux 具有为一个文件起多个名字的功能,称为链接。被链接的文件可以存放在相同的目录下,但是必须有不
同的文件名,而不用在硬盘上为同样的数据重复备份。另外,被链接的文件也可以有相同的文件名,但是存放在不
同的目录下,这样只要对一个目录下的该文件进行修改,就可以完成对所有目录下同名链接文件的修改。对于某个
文件的各链接文件,我们可以给它们指定不同的存取权限,以控制对信息的共享和增强安全性。
文件链接有两种形式,即硬链接和符号链接。
硬链接
建立硬链接时,在另外的目录或本目录中增加目标文件的一个目录项,这样,一个文件就登记在多个目录中。
如图所示的 文件就在目录 mub1 和 liu 中都建立了目录项。
创建硬链接后,己经存在的文件的 I 节点号(Inode)会被多个目录文件项使用。一个文件的硬链接数可以在目
录的长列表格式的第二列中看到,无额外链接的文件的链接数为 l。
在默认情况下,ln 命令创建硬链接。ln 命令会增加链接数,rm 命令会减少链接数。一个文件除非链接数为 0,
否则不会从文件系统中被物理地删除。
对硬链接有如下限制:
不能对目录文件做硬链接。
不能在不同的文件系统之间做硬链接。就是说,链接文件和被链接文件必须位于同一个文件系统中。
符号链接
符号链接也称为软链接,是将一个路径名链接到一个文件。这些文件是一种特别类型的文件。事实上,它只是
一个文本文件(如图中的 abc 文件),其中包含它提供链接的另一个文件的路径名,如图中虚线箭头所示。另一个
文件是实际包含所有数据的文件。所有读、写文件内容的命令被用于符号链接时,将沿着链接方向前进来访问实际
的文件。
与硬链接不同的是,符号链接确实是一个新文件,当然它具有不同的 I 节点号;而硬链接并没有建立新文件。
符号链接没有硬链接的限制,可以对目录文件做符号链接,也可以在不同文件系统之间做符号链接。
用 ln -s 命令建立符号链接时,源文件最好用绝对路径名。这样可以在任何工作目录下进行符号链接。而当源
文件用相对路径时,如果当前的工作路径与要创建的符号链接文件所在路径不同,就不能进行链接。
符号链接保持了链接与源文件或目录之间的区别:
删除源文件或目录,只删除了数据,不会删除链接。一旦以同样文件名创建了源文件,链接将继续指向该文件
的新数据。
在目录长列表中,符号链接作为一种特殊的文件类型显示出来,其第一个字母是 l。
符号链接的大小是其链接文件的路径名中的字节数。
当用 ln -s 命令列出文件时,可以看到符号链接名后有一个箭头指向源文件或目录,例如 lrwxrwxrwx … 14 jun
20 10:20 /etc/motd->/original_file 其中,表示“文件大小”的数字“14”恰好说明源文件名 original_file 由 14 个字
符构成。
cmp 命令
cmp 命令用来比较两个文件是否有差异。当相互比较的两个文件完全一样时,则该指令不会显示任何信息。若
发现有差异,预设会标示出第一个不同之处的字符和列数编号。若不指定任何文件名称或是所给予的文件名为“-”,
则 cmp 指令会从标准输入设备读取数据。
语法:
cmp [选项] [参数]
选项
-c 或--print-chars:除了标明差异处的十进制字码之外,一并显示该字符所对应字符;
-i<字符数目>或--ignore-initial=<字符数目>:指定一个数目;
-l 或--verbose:标示出所有不一样的地方;
-s 或--quiet 或--silent:不显示错误信息;
参数
文件:比较两个文件的差异。
实例
使用 cmp 命令比较文件"testfile"和文件"testfile1"两个文件,则输入下面的命令:
cmp testfile testfile1 #比较两个指定的文件
在上述指令执行之前,使用 cat 命令查看两个指定的文件内容,如下所示:
cat testfile #查看文件内容
Absncn 50 #显示文件“testfile”
Asldssja 60
Jslkadjls 85
cat testfile1 #查看文件内容
Absncn 50 #显示文件“testfile1”
AsldssjE 62
Jslkadjls 85
然后,再执行 cmp 命令,并返回比较结果,具体如下所示:
cmp testfile testfile1 #比较两个文件
testfile testfile1 #有差异:第 8 字节,第 2 行
注意:在比较结果中,只能够显示第一比较结果。
diff 命令
diff 命令在最简单的情况下,比较给定的两个文件的不同。如果使用“-”代替“文件”参数,则要比较的内容将来
自标准输入。diff 命令是以逐行的方式,比较文本文件的异同处。如果该命令指定进行目录的比较,则将会比较该
目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作。
语法:
diff [选项] [参数]
选项
-<行数>:指定要显示多少行的文本。此参数必须与-c 或-u 参数一并使用;
-a 或——text:diff 预设只会逐行比较文本文件;
-b 或--ignore-space-change:不检查空格字符的不同;
-B 或--ignore-blank-lines:不检查空白行;
-c:显示全部内容,并标出不同之处;
-C<行数>或--context<行数>:与执行“-c-<行数>”指令相同;
-d 或——minimal:使用不同的演算法,以小的单位来做比较;
-D<巨集名称>或 ifdef<巨集名称>:此参数的输出格式可用于前置处理器巨集;
-e 或——ed:此参数的输出格式可用于 ed 的 script 文件;
-f 或-forward-ed:输出的格式类似 ed 的 script 文件,但按照原来文件的顺序来显示不同处;
-H 或--speed-large-files:比较大文件时,可加快速度;
-l<字符或字符串>或--ignore-matching-lines<字符或字符串>:若两个文件在某几行有所不同,而之际航同时都
包含了选项中指定的字符或字符串,则不显示这两个文件的差异;
-i 或--ignore-case:不检查大小写的不同;
-l 或——paginate:将结果交由 pr 程序来分页;
-n 或——rcs:将比较结果以 RCS 的格式来显示;
-N 或--new-file:在比较目录时,若文件 A 仅出现在某个目录中,预设会显示:Only in 目录,文件 A 若使用-N
参数,则 diff 会将文件 A 与一个空白的文件比较;
-p:若比较的文件为 C 语言的程序码文件时,显示差异所在的函数名称;
-P 或--unidirectional-new-file:与-N 类似,但只有当第二个目录包含了第一个目录所没有的文件时,才会将这个
文件与空白的文件做比较;
-q 或--brief:仅显示有无差异,不显示详细的信息;
-r 或——recursive:比较子目录中的文件;
-s 或--report-identical-files:若没有发现任何差异,仍然显示信息;
-S<文件>或--starting-file<文件>:在比较目录时,从指定的文件开始比较;
-t 或--expand-tabs:在输出时,将 tab 字符展开;
-T 或--initial-tab:在每行前面加上 tab 字符以便对齐;
-u,-U<列数>或--unified=<列数>:以合并的方式来显示文件内容的不同;
-v 或——version:显示版本信息;
-w 或--ignore-all-space:忽略全部的空格字符;
-W<宽度>或--width<宽度>:在使用-y 参数时,指定栏宽;
-x<文件名或目录>或--exclude<文件名或目录>:不比较选项中所指定的文件或目录;
-X<文件>或--exclude-from<文件>;您可以将文件或目录类型存成文本文件,然后在=<文件>中指定此文本文件;
-y 或--side-by-side:以并列的方式显示文件的异同之处;
--help:显示帮助;
--left-column:在使用-y 参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容;
--suppress-common-lines:在使用-y 参数时,仅显示不同之处。
参数
文件 1:指定要比较的第一个文件;
文件 2:指定要比较的第二个文件。
实例
将目录下的文件""与当前目录下的文件""进行比较,输入如下命令:
[root@localhost temp]# cat
cat testfile
Absncn 50
Asldssja 60
Jslkadjls 85
cat testfile
Absncn 50
Asldssja 62
JslkaDjls 85
[root@localhost temp]# diff
3,4c3,4
< Asldssja 60
< Jslkadjls 85
---
> Asldssja 62
> JslkaDjls 85
[root@localhost temp]#
其中,字母"a"、"d"、"c"分别表示添加、删除及修改操作。而"n1"、"n2"表示在文件 1 中的行号,"n3"、"n4"表
示在文件 2 中的行号。
注意:以上说明指定了两个文件中不同处的行号及其相应的操作。在输出形式中,每一行后面将跟随受到影响
的若干行。其中,以<开始的行属于文件 1,以>开始的行属于文件 2。
chattr 命令
chattr 命令用来改变文件属性。这项指令可改变存放在 ext2 文件系统上的文件或目录属性,这些属性共有以下
8 种模式:
a:让文件或目录仅供附加用途;
b:不更新文件或目录的最后存取时间;
c:将文件或目录压缩后存放;
d:将文件或目录排除在倾倒操作之外;
i:不得任意更动文件或目录;
s:保密性删除文件或目录;
S:即时更新文件或目录;
u:预防意外删除。
语法:
chattr (选项)
选项
-R:递归处理,将指令目录下的所有文件及子目录一并处理;
-v<版本编号>:设置文件或目录版本;
-V:显示指令执行过程;
+<属性>:开启文件或目录的该项属性;
-<属性>:关闭文件或目录的该项属性;
=<属性>:指定文件或目录的该项属性。
实例
用 chattr 命令防止系统中某个关键文件被修改:
chattr +i /etc/fstab
然后试一下 rm、mv、rename 等命令操作于该文件,都是得到 Operation not permitted 的结果。
让某个文件只能往里面追加内容,不能删除,一些日志文件适用于这种操作:
chattr +a /data1/
vim 编辑器基本使用方法