特殊目录
. 代表此层目录.. 代表上一层目录
- 代表前一个工作目录
~ 代表“目前用户身份”所在的主文件夹
~account 代表account这个用户的主文件夹(account是账户名称)
所有的目录都会存在的两个目录是“.”和“..”,根目录的上一层目录就是此层目录,也就是根目录本身。
目录管理
cd:切换目录
cd是change directory的缩写,该命令用来切换工作目录,其基本语法是“cd [相对路径或绝对路径]”。cd命令与上文讲到的特殊目录结合在一起使用可以达到更高效的目的。主要用法如下:
cd ~account 切换到account这个用户的主文件夹
cd ~ 切换到当前在使用的用户的主文件夹
cd 没有加上任何路径,也代表回到自己的主文件夹
cd . 切换到当前工作目录(单纯一个.没有什么意义,但与目录或文件名相结合会很有用,尤其当你不知道工作目录的绝对路径时)
cd .. 切换到当前工作目录的上一层目录
cd - 表示回到上一个工作目录(并不一定是上一层目录)
cd /var/spool/mail 绝对路径的写法(以/开头的就是绝对路径,因为/代表根目录)
cd spool/ 相对路径的写法(不以/开头的都是相对路径)
pwd:显示当前目录
pwd是print working directory的缩写,即显示工作目录的意思。pwd的用法如下:pwd [-P]
参数
-P:显示出当前路径,而非使用连接(link)路径
pwd 不加任何参数,单纯显示出当前的工作目录
pwd -P 显示出实际的工作目录,而非链接文件本身的工作目录而已(关于链接文件的概念在另一篇博文)
mkdir:新建目录
mkdir是make directory的缩写,即新建目录,其主要用法如下:mkdir [-mp] 目录名称
参数
mkdir newdir 在工作目录下创建一个新目录,不加参数只能创建单层目录
mkdir -p newdir/newdir1 在工作目录下创建多层目录
mkdir -m 711 newdir 在工作目录下创建新目录并强制设置新目录的权限(有关权限的概念在另一篇博文)
rmdir:删除“空”目录
rmdir就是remove directory,用来删除“空”目录。用法如下:rmdir [-p] 目录名称
参数
-p:连同上层“空”目录页一起删除
rmdir dir 删除名为dir的目录,成功的前提是dir是空目录
rmdir -p dir/dir1 删除工作目录下的dir和dir下的dir1两个目录,也要求目录是空的
文件与目录管理
文件与目录的基本管理无非是“显示属性”、“复制”、“删除”、“移动”等,这些操作均有对应的命令可用。ls:查看文件与目录
ls是list的缩写,即列出。用法如下:ls [-aAdfFhilnrRSt] 文件或目录名称
ls [--color={never,auto,always}] 文件或目录名称
ls [--full-time] 文件或目录名称
参数
-a:查看全部文件(包括隐藏文件)
-A:列出全部文件(包括隐藏文件但不包括.和..这两个目录)
-d:仅列出目录本身,而不是列出目录内的文件数据
-f:直接列出结果,而不进行排序(ls默认会以文件名排序)
-F:在每个输出项后追加显示文件的类型标识符,“*”代表可执行文件,“/”表示目录,“|”表示命令管道FIFO,“=”表示socket套接字,“@”代表连接文件,普通文件无标识符
-h:将文件容量以人类较易读的方式(例如GB,KB等)列出来
-i:显示出inode号码
-l:以长格式显示文件的名称、文件类型、权限模式、硬连接数、所有者、组、文件大小和文件最后修改时间等信息
-n:列出用户识别码(UID)和群组识别码(GID)来替代用户及群组名称
-r:将排序结果反向输出
-R:连同子目录内容一起列出来,等同于该目录下的文件都会显示出来
-S:以文件容量的大小排序
-t:以时间排序
-C:多列显示输出结果,这是默认选项
--color={never,auto,always}:设置是否依据文件特性给予颜色显示(还可以设置颜色种类等)
--full-time:以完整时间模式(年、月、日、时、分)输出
--time={atime,ctime}:输出访问时间或改变熟悉感权限的时间
cp:复制、创建文件或目录
cp是copy的缩写,即复制的意思,但cp这个命令除了单纯复制之外,还可以创建连接文件,对比两文件的新旧而予以更新,以及复制整个目录等功能。用法如下:cp [-adfilprsSuv] 源文件(source) 目标文件(destination)
cp [options] source1 source2 source3 ... directory
参数
-a:与同时指定“-dpr”参数时相同
-d:当复制符号连接(也叫软连接)时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录
-f:强制复制文件或目录,无论文件或目录是否存在
-i:覆盖既有文件前先询问用户
-l:对源文件或目录建立硬连接
-p:保留源文件的属性
-r/R:递归处理,将指定目录下的所有文件与子目录一同处理
-s:对源文件或目录建立符号连接(软连接)
-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀
-u:使用该参数后只会在源文件的修改时间较目标文件更新时或是名称相互对应的目标文件不存在时,才复制文件
-v:详细显示命令执行的操作
最后需要注意的,如果源文件有两个以上,则最后一个目标文件一定要是目录才行。
rm:删除文件或目录
rm即remove,该命令可以移除单个或多个文件或目录,且一旦删除不可恢复。用法如下:rm [dfirv] 文件或目录
rm --preserve-root 文件或目录
参数
-d:直接把想要删除的目录的硬连接数删除为0,删除该目录
-f:强制删除文件或目录
-i:删除已有的文件或目录前先询问用户
-r/R:递归处理,删除指定目录下的所有文件或子目录
-v:显示指令的详细执行过程
--preserve-root:不对根目录进行递归操作
通常在Linux系统下,为了怕文件被误删除,很多distributions都已经默认加入-i这个参数了。
mv:移动、重命名文件或目录
mv即move,除了用来移动文件或目录外还可以重命名。主要用法如下:mv [bfiuS] 源文件 目标文件
mv [options] source1 source2 source3 ... directory
参数
-b:当文件存在时,覆盖前为其创建一个备份
-f:如果目标文件或目录已经存在,直接覆盖
-i:交互式操作,若目标文件或目录已经存在,询问是否覆盖
-u:当源文件比目标文件新或目标文件不存在时才会覆盖
-S<后缀>:为备份文件指定后缀,不使用默认后缀
如果是多文件移动,则目标文件一定是目录
取得路径的文件名与目录名
dirname:取得文件所在目录
dirname是directory name的缩写,即目录名,这个命令的功能就是去除一个文件路径的文件名,仅输出目录。dirname命令读取指定路径名保留最后一个“/”及其后面的字符,删除其他部分,并输出结果。如果最后一个“/”无字符,dirname命令使用倒数第二个“/”并忽略后面的所有字符。用法如下:
dirname 文件路径
命令很简单,这个输出文件所在目录的功能看上去好像意义不大,我们可以通过“ls -l”很容易得到一个文件的完整路径,从而得出目录。但对于系统管理员来说,用Linux shell写脚本取得一系列文件的目录就可以大大提高管理员的工作效率。
basename:取得文件名
与dirname相对,basename命令是去掉一个文件路径的目录部分,只输出文件名。用法如下:
baseanme 文件路径
basename与dirname通常用于shell脚本中的命令替换来指定和指定的输入文件名称有所差异的输出文件名称。
文件内容查阅
直接查看文件内容
直接查看文件的内容可以使用cat、tac、nl这几个命令。·cat(concatenate)
cat命令连接文件并打印到输出设备上,cat经常用来显示文件内容。用法如下:cat -[nbsAEvTet] 文件名(可多个)
参数
-n:打印出行号,连同空白行也会有行号
-b:仅针对非空白行列出行号
-s:当遇到有连续两行或更多的空白行,就替换为一行的空白行输出
-A:显示不可打印字符,行尾显示“$”
-E:将结尾的断行字符$显示出来
-v:列出一些看不到的特殊字符
-T:将[Tab]按键以^I显示出来
-e:等同于“-Ev”
-t:等同于“-Tv”
cat命令由第一行开始显示文件内容,因此当文件较大时,文本在屏幕上迅速闪过,看不清屏幕内容。
·tac(反向显示)
tac正好是cat的倒序,因此该命令的功能与cat相反,它连接文件并打印到输出设备上,但顺序相反。·nl(添加行号打印)
nl命令读取file参数(缺省情况下读取标准输入),计算输入中的行号并写入标准输出。在输出中,nl命令根据你在命令行指定的标志来计算左边的行。输入文本必须写在逻辑页中。每个逻辑页有头、主体和页脚节(可以有空节)。除非使用-p选项,nl命令在每个逻辑页开始的地方重新设置行号。可以单独为头、主体和页脚节设置行计算标志。与“cat -n”不同,nl可以将行号做比较多的显示设计,包括位数是否自动补齐0等功能。nl -[bnwp] 文件名
参数
-b:指定行号指定的方式,主要有两种:
-b a:表示不论是否为空行,也同样列出行号(类似于“cat -n”)
-b t:如果有空行,空的那一行不要列出行号(默认值)
-n:列出行号的表示方法,主要有三种:
-n ln:行号在屏幕的最左方显示
-n rn:行号在自己字段的最右方显示,且不加0
-n rz:行号在自己字段的最右方显示,且加0
-w:行号字段占用的位数
-p:在逻辑定界符处不重新开始计算
可翻页查看
·more(一页一页翻动)
more命令是一个基于vi编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作。用法如下:more -[dcsu] 文件名
参数
-d:显示“Press space to continue,'q' to quit.”和“Press 'h' for instructions”
-c:不进行滚屏操作,每次刷新这个屏幕
-s:将连续多个空行压缩成一个空行显示
-u:禁止下划线
+<n>:从第n行开始显示
-<n>:指定每屏显示的行数为n
在more这个程序运行的过程中,有几个按键是可以按的:
空格键(space):向下翻一页
Enter:向下滚动一行
/字符串:向下查询指定字符串
:f :立刻显示出文件名以及目前显示的行数
q:离开more
b:往回翻页,这操作只对文件有用,对管道无用
·less(一页一页翻动)
less命令的作用与more十分相似,都可以用来浏览文字档案的内容,不同的是less命令允许用户向前或向后浏览文件,而more命令只能向前浏览。less -[efglNsS] 文件名
参数
-e:文件内容显示完毕后,自动退出
-f:强制显示文件
-g:不加亮显示搜索到的所有关键字,仅显示当前的关键字,以提高显示速度
-l:搜索时忽略大小写差异
-N:每一行行首显示行号
-s:将连续多个空行改为一行显示
-S:在单行显示较长的内容,不换行显示
在less命令运行过程中,有这些按键可以按:
空格键(space):向下翻动一页
[PageDown]:向下翻动一页
[PageUp]:向上翻动一页
/字符串:向下搜索指定字符串
?字符串:向上搜索指定字符串
n:重复前一个查询
N:反向重复前一个查询
q:退出
数据选取
·head(选出前面几行)
head命令用于显示文件的开头的内容。在默认情况下,head命令显示文件的头10行内容。head -[nvcq] 文件名
参数
-n <数字>:指定显示头部内容的行数
-c <数字>:指定显示头部内容的字符数
-v:总是显示文件名的头信息
-q:不显示文件名的头信息
·tail(选出后面几行)
tail命令用于输出文件的尾部内容,tail命令默认在屏幕上显示指定文件的末尾10行。如果指定的文件不止一个,则在每一个文件的显示内容前面加上文件名标题。如果没有指定文件名或文件名为“-”则读取标准输入。tail -[nqsv]
参数
-n <数字>:指定输出文件尾部内容的行数
-q:当有多个文件时,不输出文件名
-s <秒数>:指定监视文件变化时间间隔秒数
-v:当有多个文件时,总是输出文件名
od:查阅非文本文件
od命令用于输出文件的八进制、十六进制或其他格式编码的字节,通常用于显示或查看文件中不能直接显示在终端的字符。常见的文件为文本文件和二进制文件。此命令主要用来查看保存在二进制文件中的值。比如,程序可能输入大量的数据记录,每个数据是一个单精度浮点数。这些数据记录存放在一个文件中,如果想查看下这个数据,就要使用od命令。主要用法如下:
od -[aAbcdfhijlNostvwx] 文件名
参数
-a:此参数的效果和同时指定“-tA”参数相同
-A:<字码基数>:选择以何种基数计算字码
-b:此参数的效果和同时指定“-toC”参数相同
-c:此参数的效果和同时指定“-tC”参数相同
-d:此参数的效果和同时指定“-tu2”参数相同
-f:此参数的效果和同时指定“-tfF”参数相同
-h:此参数的效果和同时指定“-tx2”参数相同
-i:此参数的效果和同时指定“-td2”参数相同
-j<字符数目>或--skip-bytes=<字符数目>:略过设置的字符数目
-l:此参数的效果和同时指定“-td4”参数相同
-N<字符数目>或--read-bytes=<字符数目>:到设置的字符树目为止
-o:此参数的效果和同时指定“-to2”参数相同
-s<字符串字符数>或--strings=<字符串字符数>:只显示符合指定的字符数目的字符串
-t<输出格式>或--format=<输出格式>:设置输出格式
-v或--output-duplicates:输出时不省略重复的数据
-w<每列字符数>或--width=<每列字符数>:设置每列的最大字符数
-x:此参数的效果和同时指定“-h”参数相同
touch:修改文件时间或创建新文件
touch命令有两个功能:一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;二是用来创建新的空文件。touch -[acdfmrt] 文件名
-a:或--time=atime或--time=access或--time=use 只更改存取时间
-c:或--no-create 不建立任何文件
-d:<时间日期> 使用指定的日期时间,而非现在的时间
-f:此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题
-m:或--time=mtime或--time=modify 只更该变动时间
-r:<参考文件或目录> 把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同
-t:<日期时间> 使用指定的日期时间,而非现在的时间
文件名的查找
whereis:寻找特定文件
whereis命令用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径。whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
和find相比,whereis查找的速度非常快,这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通 过遍历硬盘来查找,效率自然会很高。 但是该数据库文件并不是实时更新,默认情况下时一星期更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。
whereis -[bBfmMsSu] 文件名
参数
-b:只查找二进制文件
-B<目录>:只在设置的目录下查找二进制文件
-f:不显示文件名前的路径名称
-m:只查找说明文件
-M<目录>:只在设置的目录下查找说明文件
-s:只查找原始代码文件
-S<目录>只在设置的目录下查找原始代码文件
-u:查找不包含指定类型的文件。
locate/slocate
locate命令和slocate命令都用来查找文件或目录。locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
locate/slocate -[du] 文件名
参数
-d<目录>或--database=<目录>:指定数据库所在的目录
-u:更新slocate数据库