通过前两篇文章的介绍,我们知道Linux系统的理念是:一切皆文件。而文件,就要涉及到命名规范,如下所示:
1)除了/之外,所有字符都合法
2)有些字符最好不要用,如空格符、制表符、字符@#$&()-等
3)避免使用.作为普通文件名的第一个字符。
4)大小写敏感
今天我们来学习一下常用的命令(命令一般为可执行文件):
命令格式:命令 -选项 参数
ex: ls -la /etc
说明:
1)当有多个选项时,可以写在一起
2)两个特殊的目录 .和 .. ,分别代表当前目录和当前目录的父目录
一、文件处理命令
1、ls命令
命令原意:list 命令路径:/bin/ls 执行权限:所有用户
功能描述:显示目录里包含的文件,或查看文件权限(包括目录、文件夹、文件权限)、查看目录信息等等
语法: ls 选项 [目录或文件]
常用参数搭配:
a :列出目录所有文件,包含以.开始的隐藏文件
A :列出除.及..的其它文件
r :反序排列
t :以文件修改时间排序
S :以文件大小排序
l :除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来
d:查看目录的属性
2、cd命令
命令原意:change directory 命令路径:shell内置命令 执行权限:所有用户
功能描述:用于切换、改变当前的目录
语法:cd [目录]
Ex: cd / 切换到根目录
cd .. 回到上一级目录
3、pwd命令
命令原意:print working directory 命令路径:/bin/pwd 执行权限:所有用户
功能描述:显示当前所在的工作目录
语法:pwd
4、touch命令
命令原意: 命令路径:/bin/touch 执行权限:所有用户
功能描述:用于在文件系统上创建空文件
语法:touch [文件名]
Ex: touch HelloWorld.java
5、mkdir命令
命令原意:make directories 命令路径:/bin/mkdir 执行权限:所有用户
功能描述:创建新目录
语法:mkdir -选项 [目录名]
选项介绍:
-m: 对新建目录设置存取权限,也可以用chmod命令设置;
-p: 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多级目录;
Ex:
1) mkdir t
2) mkdir -p /tmp/test/t1/t
6、cp命令
命令原意:copy 命令路径:/bin/cp 执行权限:所有用户
功能描述:复制文件或目录
语法:cp -r [源文件或目录] [目的文件或目录]
-r 复制目录
Ex:
1)cp file1 file2 dir1 将文件file1、file2复制到目录dir1
2)cp –r dir1 dir2 将dir1下的所有文件及子目录复制到dir2
7、mv命令
命令原意:move 命令路径:/bin/mv 执行权限:所有用户
功能描述:用于移动文件、或对文件进行更名
语法:mv [文件或目录名] [目的目录]
Ex:
(1)将文件test.log重命名为test1.txt
mv test.log test1.txt
(2)将文件log1.txt,log2.txt,log3.txt移动到根的test3目录中
mv llog1.txt log2.txt log3.txt /test3
(3)将文件file1改名为file2,如果file2已经存在,则询问是否覆盖
mv -i log1.txt log2.txt
(4)移动当前文件夹下的所有文件到上一级目录
mv * ../
8、rm命令
命令原意:remove 命令路径:/bin/rm 执行权限:所有用户
功能描述:用于删除文件
语法:rm -r [文件或目录]
选项介绍: -r 删除目录
-f 不再询问
-i 询问
Ex:
(1)删除任何.log文件;删除前逐一询问确认
rm -i *.log
(2)删除test子目录及子目录中所有档案删除,并且不用一一确认
rm -rf test
(3)删除以-f开头的文件
rm -- -f*
9、cat命令
命令原意:concatenate and display files 命令路径:/bin/cat 执行权限:所有用户
功能描述:显示文件内容, 从键盘创建一个文件,或将几个文件合并成一个文件。
语法:cat [文件名]
cat > filename
cat file1 file2 > file
选项介绍:-b 对非空输出行号
-n 输出所有行号
实例:
(1)把 log2012.log 的文件内容加上行号后输入 log2013.log 这个文件里
cat -n log2012.log log2013.log
(2)把 log2012.log 和 log2013.log 的文件内容加上行号(空白行不加)之后将内容附加到 log.log 里
cat -b log2012.log log2013.log log.log
(3)使用here doc生成新文件
cat >log.txt <<EOF
>Hello
>World
>PWD=$(pwd)
>EOF
ls -l log.txt
cat log.txt
Hello
World
PWD=/home/michael
(4)反向列示
tac log.txt
PWD=/home/michael
World
Hello
10、more命令
命令路径:/bin/more 执行权限:所有用户
功能描述:分页显示文件内容
语法:more [文件名]
>>常用相关操作命令:
Enter 向下n行,需要定义。默认为1行
Ctrl+F 向下滚动一屏
空格键 向下滚动一屏
Ctrl+B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号
V 调用vi编辑器
!命令 调用Shell,并执行命令
q 退出more
实例:
(1)显示文件中从第3行起的内容
more +3 text.txt
(2)在所列出文件目录详细信息,借助管道使每次显示5行
ls -l | more -5
按空格显示下5行
11、less命令
less 与 more 类似,但使用 less 可以随意浏览文件,功能更强大。执行权限:所有用户
常用命令参数
-N 显示每行的行号
-o <文件名> 将less 输出的内容在指定文件中保存起来
-s 显示连续空行为一行
b 向后翻一页
d 向后翻半页
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一行
回车键 滚动一页
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页
实例:
(1)ps查看进程信息并通过less分页显示
ps -aux | less -N
(2)查看多个文件
less 1.log 2.log
可以使用n查看下一个,使用p查看前一个
12、head命令
命令路径:/bin/head 执行权限:所有用户
功能描述:查看文件的前几行
语法:head -num [文件名]
-num 显示文件的前num行
Ex: head -20 /etc/services
(1)显示1.log文件中前20行
head 1.log -n 20
(2)显示1.log文件前20字节
head -c 20 log2014.log
(3)显示t.log最后10行
head -n -10 t.log
13、tail命令
命令路径:/bin/tail 执行权限:所有用户
功能描述:查看文件的后几行
语法:tail -num [文件名]
-num 显示文件的后num行
-f 动态显示文件内容
Ex: head -20 /etc/services
(1)循环读取逐渐增加的文件内容
ping 127.0.0.1 > ping.log &(后台运行:可使用jobs -l查看,也可使用fg将其移到前台运行)
tail -f ping.log(查看日志)
14、ln命令
命令原意:link 命令路径:/bin/ln 执行权限:所有用户
功能描述:创建链接文件,相当于windows的快捷方式
语法:ln -s [源文件] [目标文件]
-s 创建软连接
Ex:
(1) ln –s /etc/issue /issue.soft
创建文件/etc/issue的软连接/issue.soft
(2) ln /etc/issue /issue.hard
创建文件/etc/issue的硬链接/issue.hard
二、软连接与硬链接
在学习文件处理命令时,我们学习了如何创建软链接和硬链接。这两种文件是linux系统中的“特殊文件”,相当于windows文件系统中的快捷方式。那么下面再具体讲讲软连接和硬链接的区别。如果想弄明白软硬链接,首先我们得先知道inode的概念。
1、inode
在前面的文章我们提过,一个文件是由目录块、inode、数据块三部分组成。
1)目录块:记录着文件名和inode节点号码;
2)inode: 存储的信息有唯一标识号码, 创建时间、修改时间 、文件大小、属主、归属组、读写权限、数据所在block号等信息
3)数据块:是保存文件真实数据的地方。
在 Linux 中, inode存储的参数中唯独不包含文件名,而inode号码(索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。下图展示了程序通过文件名获取文件内容的过程。
在Linux 系统中查看 inode 号可使用命令 stat 或 ls -i(若是 AIX 系统,则使用命令 istat)。
当我们使用命令 mv 移动并重命名文件时,文件的用户数据及 inode号码不会改变,文件移动前后 inode 号还是:916538。
为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(soft link)。链接不仅解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等优势。
2、硬链接
若一个 inode 号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名(如下图,硬链接就是file的一个别名,他们有共同的 inode)。
下面我们来做个测试:我们先准备两个文件,详情如下:
然后,给a.txt做一个硬链接aaaHard,详情如下:
创建硬链接前,a.txt显示的链接数目为1,创建链接后
- 1)a.txt和aaaHard的链接数目都变为2。
- 2)a.txt和aaaHard的inode号是一样的,都是916538
- 3)a.txt和aaaHard显示的文件大小也是一样,都是11B。
再使用stat命令查询一下:
由此可见:a.txt和aaaHard只是同一个文件的两个名字而已, 它们具有同样的索引节点号和文件属性,建立文件a.txt的硬链接,就是为 a.txt的文件索引节点在当前目录上建立一个新指针。你可以删除其中任何一个,如rm a.txt,每次只会删除一个指针,链接数同时减一,只有将所有指向文件内容的指针,也即链接数减为0时,内核才会把文件内容从磁盘上删除。
3、软连接
软链接与硬链接不同,软链接就是一个普通文件,有着自己的 inode 号以及用户数据块,只不过对应的数据块里的内容比较特殊,存储的是另一文件的路径名的指向。(见图解)
现在,我们继续上一个测试,给b.java添加软连接,详情如下:
从上图,我们不难发现,软链接的inode号码与b.java的不是同一个,文件大小也不一样等等。
4、硬链接与软连接的区别
硬链接和软链接不仅仅是在概念上的不同,在实现方式上也不同。我们总结一下硬链接与软链接的区别:
- 硬链接文件和源文件公用一个inode号,说明他们是同一个文件,而软链接文件和源文件拥有不同的inode号,表明他们是两个不同的文件;
- 在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和源文件是同一个文件;
- 链接数目是不一样的,软链接的链接数目不会增加;
- 文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的。而软链接大小与源文件就不同了。
- 用户不能给目录创建硬链接,软连接却可以指向目录
- 硬链接不可以跨文件系统。因为 inode 是这个文件在当前分区中的索引值,是相对于这个分区的。而软链接没有任何文件系统的限制
软连接也是有缺点的:因为软连接的数据块内存储的是源文件的路径信息,因此当源文件被移动到其他目录后,再访问链接文件,系统就找不到了源文件了,软链接就成了死链接。而硬链接是没有这个缺陷的,怎么移动源文件都没有关系;还有它要系统分配额外的空间用于建立新的索引节点和保存源文件的路径的数据块。
5、与软硬链接相关的操作
除了“ls -il”命令查看文件的属性及其inode号码,和stat命令 查看文件的inode信息外,我们还可以使用find命令进行一些查询操作:
案例1: 查找在路径 /home/michael/test 下的文件 b.java 的软链接
# find /home/michael/test -lname b.java
案例2: 查看路径 /home/michael/test有相同 inode 的所有硬链接
# find /home/michael/test -samefile /home/michael/test/a.txt
案例3:查询inode号码是660650的文件
# find /home -inum 660650
案例4:列出路径 /home/michael/test下的所有软链接文件
# find /home/michael/test -type l -ls
----------------------------------------------------------------------------未完待续,敬请留言-------------------------------------------------------------