这个系列教程的前面我们讲解了如何安装Linux系统,以及学习Linux系统的一些方法。那么从这篇博客开始,我们就正式进入Linux命令的学习。学习命令,首先要跟大家纠正的一点就是,我们不需要记住每一条命令的详细语法格式,学完之后我们只需要知道某个命令能干什么。这样我们在实际应用中,遇到需要实现某个功能,我们脑海只要能想起来适用于某个命令就行,至于详细格式我们可以通过查资料。当我们使用的多了,会不知不觉的记住这些命令,这才是正确的学习方法。Linux命令有很多,如果初学者就想全部记住这些命令的详细格式,会对我们产生很大的学习挫败性,还没记完这些命令,或许你已经丧失了学习Linux的热情了。所以接下来的几篇博客,我会详细讲解Linux常用命令的语法格式以及用法,大家记住大概的用法就行了,到时候不会可以回过头来查询。
本篇博客我们学习Linux最常用的文件处理命令。
1、Linux命令的普遍语法格式
命令格式: 命令 【-选项】【参数】
例子: ls -la /etc
说明: ①、个别命令使用不遵循此格式,【】这种符号表示可以省略
②、当有多个选项时,可以写在一起
③、简化选项(一般用一个-)与完整选项(一般用两个--)
比如 ls -a 等于 ls --all
上面的便是Linux系统中的一般命令格式,基本上所有命令都是遵循这种语法格式(个别命令除外)。
2、目录处理命令
一、显示目录文件命令:ls
①、命令名称:ls
②、英文原意:list
③、命令所在路径:/bin/ls
④、执行权限:所有用户
⑤、功能描述:显示目录文件
⑥、语法: ls 选项【-ald】【文件或目录】
-a 显示所有文件,包括隐藏文件
-l 详细信息显示
-d 仅显示目录名,而不显示目录下的内容列表
-h 人性化显示(hommization)
-i 查看任意一个文件的i节点(类似于身份证唯一信息)
-t 用文件和目录的更改时间排序;可以用第一个显示的文件判断最近修改的文件
注意:. 开头的文件除非是目录,否则就是隐藏文件
上面我们分别列出了ls的各种命令组合显示效果。我们以 -rw-------. 1 root root 1.3k Mar 11 08:05 anaconda-ks.cfg 为例解析每个字段:
①、-rw------- 第一位表示文件类型,- 表示是二进制文件,d 表示目录, l 表示软连接文件。后面的每三个为一组:
rw- --- ---
u g o
u(user)所有者 g(group)所属组 o(other) 其他人
r 读 w写 x执行 -无权限
②、1 引用计数,表示文件被引用过多少次
③、root 这第一个root表示所有者,一般创建一个文件,所有者默认是创建者。
④、root 这第二个root表示所属组。
⑤、1.3K 表示文件字节大小,不带单位表示字节
⑥、ar 11 08:05 表示文件的最后修改时间。注意:Linux没有明确的创建时间,只有最后一次访问时间、文件的状态修改时间、文件的数据修改时间
⑦、anaconda-ks.cfg 表示文件名
二、创建目录命令:mkdir
①、命令名称:mkdir
②、英文原意:make directories
③、命令所在路径:/bin/mkdir
④、执行权限:所有用户
⑤、功能描述:创建新目录
⑥、语法: mkdir 【-p】【目录名】
-p 递归创建
例子:创建单个目录:mkdir /tmp/vae.txt
创建多个目录:mkdir /tmp/a.txt /tmp/b.txt
注意:1、创建的目录已经存在, 那么 Linux 会提示我们 Linux 无法创建它。
2、不带任何参数运行 mkdir 命令会在当前目录下创建目录。
3、不带上-p,如果新建的文件上级目录不存在则不会执行成功这种说法是错误的。加或者不加上 -p 前面的目录没有得都会依次创建。
4、创建目录的首要条件是, 在想要创建目录的目标路径下你必须具有访问权限。
三、切换目录命令:cd
①、命令名称:cd
②、英文原意:change directory
③、命令所在路径:shell 内置命令
④、执行权限:所有用户
⑤、功能描述:切换目录
⑥、语法: cd【目录名】
例子:切换到指定目录:cd /tmp/vae
还是在当前目录:cd .
返回上两级目录:cd ../..
返回进入此目录之前所在的目录:cd -
四、shell内置命令和外部命令的区别
大家可以看到前面的三个命令,ls命令和mkdir命令都有命令的所在路径,而cd命令我们说是shell内置命令。这两者便是Linux内置命令和外部命令。
内部命令实际上是shell程序的一部分,其中包含的是一些比较简单的linux系统命令,这些命令由shell程序识别并在shell程序内部完成运行,通常在linux系统加载运行时shell就被加载并驻留在系统内存中。内部命令是写在bashy源码里面的,其执行速度比外部命令快,因为解析内部命令shell不需要创建子进程。比如:exit,history,cd,echo等。
外部命令是linux系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调用内存。通常外部命令的实体并不包含在shell中,但是其命令执行过程是由shell程序控制的。shell程序管理外部命令执行的路径查找、加载存放,并控制命令的执行。外部命令是在bash之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin......等等。可通过“echo $PATH”命令查看外部命令的存储路径,比如:ls、vi等。
用type命令可以分辨内部命令与外部命令:
内部命令和外部命令最大的区别之处就是性能。内部命令由于构建在shell中而不必创建多余的进程,要比外部命令执行快得多。因此和执行更大的脚本道理一样,执行包含很多外部命令的脚本会损害脚本的性能。
五、显示当前目录命令:pwd
①、命令名称:pwd
②、英文原意:print working directory
③、命令所在路径:/bin/pwd
④、执行权限:所有用户
⑤、功能描述:显示当前目录
⑥、语法: pwd
例子:显示当前目录:pwd
六、删除空目录命令:rmdir
①、命令名称:rmdir
②、英文原意:remove empty directories
③、命令所在路径:/bin/rmdir
④、执行权限:所有用户
⑤、功能描述:删除空目录(如果目录下存在文件则不能删除)
⑥、语法: rmdir 【空目录名】
例子:删除指定空目录:rmdir /tmp/a
rm 命令可以替代。
七、复制文件或目录命令:cp
①、命令名称:cp
②、英文原意:copy
③、命令所在路径:/bin/cp
④、执行权限:所有用户
⑤、功能描述:复制文件或目录
⑥、语法: cp -rp 【原文件或目录】【目标目录】
-r 复制目录
-p 保留文件属性
例子:比如我们将 root 目录下的install.log 文件复制到 tmp 目录下
可以用于复制后文件改名,比如我们将 root 目录下的 install.log 文件复制到 tmp的copyinstall.log 文件
还可同时复制多个文件,注意复制目录的时候要加 -r选项。加-p属性之后会将原文件的一些属性比如修改时间等也原封不动的复制过去。如果不加-p属性,那么复制后的文件修改时间为当前系统时间。
八、剪切文件或目录命令:mv
①、命令名称:mv
②、英文原意:move
③、命令所在路径:/bin/mv
④、执行权限:所有用户
⑤、功能描述:剪切文件、改名
⑥、语法: mv【原文件或目录】【目标目录】
例子:在 tmp 目录下创建目录 tmp1 ,然后在 tmp1 目录下创建目录 tmp1_1,然后 命令 mv /tmp/tmp1/tmp1_1 /tmp 将 tmp1目录下的 tmp1_1 剪切到 tmp 目录下。
九、删除文件或目录命令:rm
①、命令名称:rm
②、英文原意:remove
③、命令所在路径:/bin/rm
④、执行权限:所有用户
⑤、功能描述:剪切文件、改名
⑥、语法: rm -rf 【文件或目录】
-r 删除目录
-f 强制执行
例子:在 tmp 目录下有两个目录 tmp1 和 tmp1_1,rm -r tmp1_1 是删除这个目录,但是需要输入 y 来确认
rm -rf tmp1 是强制删除 tmp1 目录,不需要输入 y 来确认,这种做法很简单,但是容易误删文件,没有反悔的机会
rm -rf tmp1 tmp2 同时删除两个文件
3、文件处理命令
一、创建空文件命令:touch
①、命令名称:touch
②、英文原意:
③、命令所在路径:/bin/touch
④、执行权限:所有用户
⑤、功能描述:创建空文件
⑥、语法: touch 【文件名】
例子:在 tmp 目录下创建 tmp.log 文件
注意:创建文件时,文件名不要有空格,不然就是创建了 两个文件
touch progrom files 这是创建了两个文件,progrom 和 files
如果我们想创建一个文件名为 progrom files ,应该用引号括起来(尽量避免文件名包含空格)
touch "progrom files"
二、显示文件内容命令(适合内容较少的文件):cat
①、命令名称:cat
②、英文原意:
③、命令所在路径:/bin/cat
④、执行权限:所有用户
⑤、功能描述:显示文件内容(只能显示内容较少的文件)
⑥、语法: cat【文件名】
-n 显示文件行号
例子:通过不加参数-n和加参数-n,显示/etc/issue的内容
注意:此命令只能显示文件内容比较少的文件,如果文件内容很多,用cat命令是不合适的,视觉效果是屏幕不断滚动更新。
三、反向显示文件内容命令(适合内容较少的文件):tac
①、命令名称:tac
②、英文原意:
③、命令所在路径:/bin/tac
④、执行权限:所有用户
⑤、功能描述:显示文件内容(只能显示内容较少的文件)
⑥、语法: tac【文件名】
例子:显示/etc/issue的内容
四、分页显示文件内容命令(不能向前翻页):more
①、命令名称:more
②、英文原意:
③、命令所在路径:/bin/more
④、执行权限:所有用户
⑤、功能描述:分页显示文件内容
⑥、语法: more【文件名】
(空格)或f 翻页(一页一页的往后显示)
(Enter) 换行(一行一行的往后显示)
q 或 Q 退出
例子:查看etc目录下的 services 文件信息:more /etc/services
五、分页显示文件内容命令(可以前后翻页):less
①、命令名称:less
②、英文原意:
③、命令所在路径:/usr/bin/less
④、执行权限:所有用户
⑤、功能描述:分页显示文件内容
⑥、语法: less【文件名】
(空格)或f 或PgDn 翻页(一页一页的往后显示)
PgUp向前翻页
(Enter) 换行或向下的箭头(一行一行的往后显示)
向上的箭头(一行一行的往前显示)
q 或 Q 退出
输入/想搜索的字符,然后回车键
例子:查看etc目录下的 services 文件信息:less/etc/services。这个比较简单,我们就不截图演示了,主要是最后提到的搜索功能,我们在进入命令之后,输入
/想搜索的字符,然后回车键,如下:
回车之后,如下显示:
六、显示文件内容命令(指定行数):head
①、命令名称:head
②、英文原意:
③、命令所在路径:/usr/bin/head
④、执行权限:所有用户
⑤、功能描述:显示文件的前面几行
⑥、语法: head【文件名】
-n 指定显示的行数
不加 -n 默认显示前 20 行数据
例子:显示 etc目录下的 services 文件前面 20 行 head -n 20 /etc/services
七、反向文件内容命令(文件即时更新后也能动态显示,多用于日志文件显示):tail
①、命令名称:tail
②、英文原意:
③、命令所在路径:/usr/bin/tail
④、执行权限:所有用户
⑤、功能描述:显示文件的后面几行
⑥、语法: tail【文件名】
-n 指定显示的行数
-f 动态显示文件末尾内容(即文件实时变化,那么显示内容也会随之变化)
例子:显示 etc目录下的 services 文件后面 20 行 tail -n 20 -f /etc/services
注意:如果我们想结束加上 -f显示的tail命令,通过 Ctrl+C。
4、总结
本篇博客我们主要讲解了Linux系统中的文件和目录处理命令,显示目录文件信息 ls 这是我们最常用的,然后创建目录命令 mkdir,切换目录命令 cd,显示当前目录 pwd,删除空目录命令 rmdir,这个命令用的不多,如果我们想删除目录可以用 rm 命令,注意 rm 如果加上 -f 参数,那将没有提示,直接将文件从系统中删除,需要特别注意,以免删除系统文件。然后我们接着介绍了复制文件或目录命令 cp,剪切文件或目录命令 mv,注意mv命令在剪切后可以直接更改文件或目录名称。
接着我们介绍了几个文件处理命令,创建空文件 touch,显示文件内容的命令有很多,我们也不需要记住那么多,首先less命令能显现文件内容比较多的文件,而且能前后翻页显示。再就是如果我们需要动态监视文件内容的变化,比如某个日志文件,我们可以通过 tail 加上-f参数动态显示文件末尾的内容。