Linux文件类基础命令
Linux文件类基础命令
1.1 关于路径
Linux中分绝对路径和相对路径,绝对路径一定是从/开始写的,相对路径不从根开始写,还可能使用路径符号。
路径展开符号:
. :(一个点)表示当前目录
.. :(两个点)表示上一层目录
- :(一个短横线)表示上一次使用的目录,例如从/tmp直接切换到/etc下,-就表示/tmp
~ :(波浪符号)表示用户的家目录,例如"~account"表示account用户的家目录
cd ../..
cd -
cd ~
/dir/和/dir:一般都表示dir目录和dir目录中的文件。但在有些地方会严格区分是否加尾随斜线,此时对于加了尾随斜线的表示此目录中的文件,不加尾随斜线的表示该目录本身和此目录中的文件。
切换路径用cd命令;
cd /opt
显示当前所在目录用pwd命令;
pwd
1.2 查看目录内容(ls和tree)
ls命令列出目录中的内容,和dir命令完全等价。
tree命令按树状结构递归列出目录和子目录中的内容,而ls使用-R选项时才会递归列出。
注意:ls的结果中是以制表符分隔多个文件的。
1.2.1 ls命令
ls的各个选项说明如下:
-l:(long)长格式显示,即显示属性等信息(包括mtime)。注意:显示的目录大小是节点所占大小。像win一样计算目录大小时包括文件大小要用du -sh
-c:列出ctime
-u:列出atime
-d:(direcorty)查看目录本身属性信息,不查看目录里面的东西。不加-d会查看里面文件的信息
-a:会显示所有文件,包括两个相对路径的文件"."和".."以及以点开头的隐藏文件
-A:会列出绝大多数文件,即忽略两个相对路径的文件"."和".."
-h:(human)人类可读的格式,将字节换成k,将K换成M,将M换成G
-i:(inode)权限属性的前面加上一堆数字
-p:对目录加上/标识符以作区分
-F:对不同类型的文件加上不同标识符以作区分,对目录加的文件也是/
-t:按修改时间排序内容。不加任何改变顺序的选项时,ls默认按照字母顺序排序
-r:反转排序
-R:递归显示
-S:按文件大小排序,默认降序排序
--color:显示颜色
-m:使用逗号分隔各文件,当然,只适用于未使用长格式(ls -l)的情况
-1:(数值一),以换行符分隔文件,当然,和-m或-l(小写字母)是冲突的
-I pattern:忽略被pattern匹配到的文件
注意,ls以-h显示文件大小时,一般显示的都是不带B的单位,如K/M/G,它们的转换比例是1024,如果显示的但是是带了B的,如KB/MB/GB,则它们的转换比例为1000而非1024,一般很少显示带B的大小。
不得不说,ls本身不能显示出文件的全路径名是一大缺陷,不过好在使用find命令可以很简单的就获取到。
以下是使用ls -l显示文件长格式的属性。
1.2.2 tree命令
有可能tree命令不存在,需要安装tree包才有(安装:yum -y install tree)。
tree命令的选项说明如下:
【 匹配选项:】
-L:用于指定递归显示的深度,指定的深度必须是大于0的整数。
-P:用于显示统配符匹配模式的目录和文件,但是不管是否匹配,目录一定显示。
-I:用于显示除被通配符匹配外的所有目录和文件。
【 显示选项:】
-a:用于显示隐藏文件,默认不显示。
-d:指定只显示目录。
-f:指定显示全路径。
-i:不缩进显示。和-f一起使用很有用。
-p:用于显示权限位信息。
-h:用于显示大小。
-u:显示username或UID(当没有username时只能显示UID了)。
-g:显示groupname或GID。
-D:显示文件的最后一次Mtime。
--inodes:显示inode号。
--device:显示文件或目录所属的设备号。
-C:显示颜色。
【 输出选项:】
-o filename:指定将tree的结果输出到filename文件中。
tree默认输出:
tree 完整详细输出
[[email protected] opt]# tree /opt/ -L 2 -f --device --inodes -ugDhp -C
1.3 文件/目录的创建和删除
1.3.1 创建目录mkdir
mkdir [-mp] 目录名
-m:表示创建目录时直接设置权限
-p:表示递归创建多层目录,即上层目录不存在时也会直接将其创建出来(parent)
mkdir /opt/test
mkdir -m 711 /opt/test1
mkdir -p /opt/test2/testfile1/test01
1.3.2 创建文件touch
touch file_name
touch /opt/test/test.txt
1.3.3 删除文件/目录
rm [-rfi] file_name
-r:表示递归删除,删除目录时需要加此参数
-i:询问是否删除(yes/no)
-f:强制删除,不进行询问
删除空目录时还可以使用rmdir。
在删除文件之前,一定一定要确定是否真的删除。
1.4 文件/目录复制和移动
1.4.1 cp命令
cp [-apdriulfs] src dest # 复制单文件或单目录
cp [-apdriuslf] src1 src2 src3......dest_dir # 复制多文件、目录到一个目录下
选项说明:
-p: 文件的属性(权限、属组、时间戳)也复制过去。如果不指定p选项,谁执行复制动作,文件所有者和组就是谁。
-r或-R:递归复制,常用于复制非空目录。
-d:复制的源文件如果是链接文件,则复制链接文件而不是指向的文件本身。即保持链接属性,复制快捷方式本身。如果不指定-d,则复制的是链接所指向的文件。
-a:a=pdr三个选项。归档拷贝,常用于备份。
-i:复制时如果目标文件已经存在,询问是否替换。
-u:(update)若目标文件和源文件同名,但属性不一样(如修改时间,大小等),则覆盖目标文件。
-f:强制复制,如果目标存在,不会进行-i选项的询问和-u选项的考虑,直接覆盖。
-l:在目标位置建立硬链接,而不是复制文件本身。
-s:在目标位置建立软链接,而不是复制文件本身(软链接或符号链接相当于windows的快捷方式)。
一般使用cp -a即可,对于目录加上-r选项即可。
注意,bash内置命令在进行通配符匹配文件的时候,"*"、"?"、"[]"默认是无法匹配到以"."开头的文件的,所以"*"不会匹配隐藏文件。要通配隐藏文件,使用"."代替上述几种通配元字符即可,它能匹配除了"."和".."这两个特殊目录外的所有文件。
例如,复制/etc/skel目录下所有文件包括隐藏文件到/tmp目录下。
cp -a /etc/skel/. /tmp如果有重复文件,则即使加上-f选项,也一样会交互式询问。解决方法可以是使用"yes"这个工具,它会不断的生成y字母直到进程被杀掉,当然也可以自行指定要生成的字符串。
yes | cp -a /etc/skel/. /tmp
删除/tmp下所有文件包括隐藏文件。
rm -rf /tmp/.*
还需要说明的是,对于非bash内置命令,通配方法可能不一样,有些命令有自己的通配标准,如新版本的find中的"*"可以匹配点开头的文件,但如果它采用的仍然是bash的通配方式,则和上面的匹配方法一样。
1.4.2 scp命令和执行过程分析
scp是基于ssh的安全拷贝命令(security copy),它是从古老的远程复制命令rcp改变而来,实现的是在host与host之间的拷贝,可以是本地到远程的、本地到本地的,甚至可以远程到远程复制。注意,scp可能会询问密码。
如果scp拷贝的源文件在目标位置上已经存在时(文件同名),scp会替换已存在目标文件中的内容,但保持其inode号。
如果scp拷贝的源文件在目标位置上不存在,则会在目标位置上创建一个空文件,然后将源文件中的内容填充进去。
之所以解释上面的两句,是为了理解scp的机制,scp拷贝本质是只是填充内容的过程,它不会去修改目标文件的很多属性,对于从远程复制到另一远程时,其机制见后文。
scp [-12BCpqrv] [-l limit] [-o ssh_option] [-P port] [[[email protected]]host1:]file1 ... [[[email protected]]host2:]file2
选项说明:
-1:使用ssh v1版本,这是默认使用协议版本
-2:使用ssh v2版本
-C:拷贝时先压缩,节省带宽
-l limit:限制拷贝速度,Kbit/s.
-o ssh_option:指定ssh连接时的特殊选项,一般用不上。偶尔在连接过程中等待提示输入密码较慢时,可以设置GSSAPIAuthentication为no
-P port:指定目标主机上ssh端口,大写的字母P,默认是22端口
-p:拷贝时保持源文件的mtime,atime,owner,group,privileges
-r:递归拷贝,用于拷贝目录。注意,scp拷贝遇到链接文件时,会拷贝链接的源文件内容填充到目标文件中(scp的本质就是填充而非拷贝)
-v:输出详细信息,可以用来调试或查看scp的详细过程,分析scp的机制
示例:
1.把本地文件/home/a.tar.tz拷贝到远程服务器192.168.0.2上的/home/tmp,连接时使用远程的root用户:
scp /home/a.tar.tz [email protected]192.168.0.2:/home/tmp/2.目标主机不写路径时,表示拷贝到对方的家目录下:
scp /home/a.tar.tz [email protected]192.168.0.23.把远程文件/home/a.tar.gz拷贝到本机:
scp [email protected]192.168.0.2:/home/a.tar.tz # 不接本地目录表示拷贝到当前目录 scp [email protected]192.168.0.2:/home/a.tar.tz /tmp # 拷贝到本地/tmp目录下4.拷贝远程机器的/home/目录到本地/tmp目录下。
scp -r [email protected]192.168.0.2:/home/ /tmp5.从远程主机192.168.100.60拷贝文件到另一台远程主机192.168.100.62上。
scp [email protected]192.168.100.60:/tmp/copy.txt [email protected]192.168.100.62:/tmp在远程复制到远程的过程中,例如在本地执行scp命令将A主机(192.168.100.60)上的/tmp/copy.txt复制到B主机(192.168.100.62)上的/tmp目录下,如果使用-v选项查看调试信息的话,会发现它的步骤类似是这样的。
1.4.3 mv命令
mv命令移动文件和目录,还可以用于重命名文件或目录。
mv [-iuf] src dest # 移动单个文件或目录
mv [-iuf] src1 src2 src3 dest_dir # 移动多个文件或目录
选项说明:
--backup[=CONTROL]:如果目标文件已存在,则对该文件做一个备份,默认备份文件是在文件名后加上波浪线,如/b.txt~
-b:类似于--backup,但不接受参数, 默认备份文件是在文件名后加上波浪线,如/b.txt~
-f:如果目标文件已存在,则强制覆盖文件
-i:如果目标文件已存在,则提示是否要覆盖,这是alias mv的默认选项
-n:如果目标文件已存在,则不覆盖已存在的文件
如果同时指定了-f/-i/-n,则后指定的生效
-u:(update)如果源文件和目标文件不同,则移动,否则不移动
mv默认已经是递归移动,不需要-r参数。
1.5 查看文件内容
1.5.1 cat命令
输出一个或多个文件的内容。
cat [OPTION]... [FILE]...
选项说明
-n:显示所有行的行号
-b:显示非空行的行号
-E:在每行行尾加上$符号
-T:将TAB符号输出为"^I"
-s:压缩连续空行为单个空行
1.5.2 tac
tac和cat字母正好是相反的,其作用也是和cat相反的,它会反向输出行,将最后一行放在第一行的位置输出,依此类推。但是,tac没有显示行号的参数。
shell> echo -e '1\n2\n3\n4\n5' | tac 5 4 3 2 11.5.3 head
head打印前面的几行。
head [-n num] | [-num] [-v] filename
-n:显示前num行;如果num是负数,则显示除了最后|num|(绝对值)行的其余所有行,即显示前"总行数 - |num|"
-v:会显示出文件名
-n num是显示文件的前num行,num可以是+/-或不加正负号的整数,如果是正整数或不写+号,则显示前num行。如果是负整数,则从后向前数num行,并打印除了这些行的前面所有的行,即打印除了最后num行的所有行,也即总行数减num的前正数行。不写-n时默认是前10行。正整数时"-n num"可以直接简写"-num"。
不管怎么样,它取的都是前几行,哪怕是负整数也是前几行。
示例:
[[email protected] ~]# echo -e '1\n2\n3\n4\n5' | head # 取出默认前10行,但总共才有5行。 1 2 3 4 5 [[email protected] ~]# echo -e '1\n2\n3\n4\n5' | head -2 # 取出前2行 1 2或者
[[email protected] ~]# echo -e '1\n2\n3\n4\n5' | head -n 2 # 取出前2行 1 2 [[email protected] ~]# echo -e '1\n2\n3\n4\n5' | head -n -1 # 取出前5-1=4行 1 2 3 41.5.4 tail
tail和head相反,是显示后面的行,默认是后10行。
tail [OPTION]... [FILE]...
选项说明:
-n:输出最后num行,如果使用-n +num则表示输出从第num行开始的所有行
-f:监控文件变化
--pid=PID:和-f一起使用,在给定PID的进程死亡后,终止文件监控
-v:显示文件名
"-n -num"或"-num"或"-n num"(num为正整数)表示输出最后的num行。使用"-n +num"(num为正整数)则表示输出从第num行开始的所有行。
[[email protected] ~]# echo -e '1\n2\n3\n4\n5' | tail -3 # 等价于 tail -n 3和tail -n -3 3 4 5 [[email protected] tmp]# seq 6 | tail -n +3 # 打印除了前3-1=2行的所有行 3 4 5 6tail还有一个重要的参数-f,监控文件的内容变化。当一个用户不断修改某个文件的尾部,另一个用户就可以通过这个命令来刷新并显示这些修改后的内容。
1.5.5 nl
以行号的方式查看内容。
常用"-b a",表示不论是否空行都显示行号,等价于cat -n;不写选项时,默认"-b t",表示空行不显示行号,等价于cat -b。
[[email protected] ~]# nl /etc/issue # 默认空行不显示行号 1 CentOS release 6.6 (Final) 2 Kernel \r on an \m [[email protected] ~]# nl -b a /etc/issue 1 CentOS release 6.6 (Final) 2 Kernel \r on an \m 31.5.6 more和less
按页显示文件内容。使用more时,使用/搜索字符串,按下n或N键表示向下或向上继续搜索。使用less时,还多了一个搜索功能,使用?搜索字符串,同样,使用n或N键可以向上或向下继续搜索。
https://www.cnblogs.com/f-ck-need-u/p/7048359.html