Linux操作命令分类详解 - 目录文件

Posted 孔子-说

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux操作命令分类详解 - 目录文件相关的知识,希望对你有一定的参考价值。

目录

系列文章

1、目录命令

1.1 ls 列出目录及文件名

1.2 cd 切换目录

1.3 pwd 显示当前目录

1.4 mkdir 创建一个新的目录

1.5 rmdir 删除一个空的目录

1.6 cp 复制文件或目录

1.7 rm 删除文件或目录

1.8 mv 移动文件与目录,或修改文件与目录的名称

2、文件命令

2.1 touch 新建文件

2.2 rename 修改文件名

2.3 vi或vim 修改文件

2.4 cat 查看文件

2.5 more 分页查看文件

2.6 less 分页查看文件,可搜索

2.7 tail 查看文件

2.8 head 查看文件

2.9 cat/more/less/tail/head实例

2.10 ln 创建链接文件

2.11 file 识别文件类型


系列文章

Linux操作命令分类详解 - 命令速查(一)

Linux操作命令分类详解 - 目录文件(二)

Linux操作命令分类详解 - 用户权限(三)

Linux操作命令分类详解 - 压缩备份(四)

Linux操作命令分类详解 - 进程查找其他(五)

1、目录命令

下面是经常使用的目录相关的命令,可以使用 man [命令] 来查看各个命令的使用文档,如 :man cp。

  • ls(英文全拼:list files): 列出目录及文件名
  • cd(英文全拼:change directory):切换目录
  • pwd(英文全拼:print work directory):显示目前的目录
  • mkdir(英文全拼:make directory):创建一个新的目录
  • rmdir(英文全拼:remove directory):删除一个空的目录
  • cp(英文全拼:copy file): 复制文件或目录
  • rm(英文全拼:remove): 删除文件或目录
  • mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称

1.1 ls 列出目录及文件名

1)语法

ls [选项] [目录或文件]

[root@www ~]# ls [-aAdfFhilnrRSt] 目录名称
[root@www ~]# ls [--color={never,auto,always}] 目录名称
[root@www ~]# ls [--full-time] 目录名称

2)选项参数

  • -a:显示当前目录所有的文件和目录,包括隐藏的文件( 开头为 . 的文件) (常用)
  • -d:仅列出目录本身,而不是列出目录内的文件数据(常用)
  • -l:长数据串列出,包含文件的属性与权限等等数据;(常用)

3)常用参数搭配

ls 查看当前目录下的所有目录和文件
ls /dir 查看指定目录下的所有目录和文件   如:ls /usr
ls /  显示根目录下的所有目录和文件
ls -a 列出当前目录下所有文件,包含以.开始的隐藏文件,显示结果中,一个点是当前目录,二个点是上级目录。
ls -A 列出除.及..的其它文件
ls -r 反序排列
ls -t 以文件修改时间排序
ls -S 以文件大小排序
ls -h 以易读大小显示
ls -l或ll, 列表查看当前目录下的所有目录和文件,显示更多信息(文件的权限、所有者、文件大小等信息详细列出来)
ls -al: 简写成 ll,将当前目录下的所有文件列出来(含属性详细信息与隐藏文件)。
ls -al ~ : 将家目录下的所有文件列出来(含属性详细信息与隐藏文件)。

4)实例

(1) 按易读方式按时间反序排序,并显示文件详细信息
ls -lhrt

(2) 按大小反序显示文件详细信息
ls -lrS

(3)列出当前目录中所有以"t"开头的目录的详细内容
ls -l t*

(4) 列出文件绝对路径(不包含隐藏文件)
ls | sed "s:^:`pwd`/:"

(5) 列出文件绝对路径(包含隐藏文件)
find $pwd -maxdepth 1 | xargs ls -ld

1.2 cd 切换目录

1)语法

cd [相对路径或绝对路径]

2)常用参数搭配

cd /          切换到根目录
cd /usr     切换到根目录下的usr目录
cd ../        切换到上一级目录 或者  cd ..
cd ~         切换到home(家目录)
cd -          切换到上次访问的目录
cd !$        把上个命令的参数作为cd参数使用

3)实例

# 显示当前目录
ubuntu@xnzysq20210118001:/home/kz$ pwd
/home/kz

# 表示去到目前的上一级目录
ubuntu@xnzysq20210118001:/home/kz$ cd ..

# 显示当前目录
ubuntu@xnzysq20210118001:/home$ pwd
/home

# 使用绝对路径切换到 kz 目录
ubuntu@xnzysq20210118001:/home$ cd /home/kz

# 显示当前目录
ubuntu@xnzysq20210118001:/home/kz$ pwd
/home/kz

# 表示回到自己的家目录
ubuntu@xnzysq20210118001:/home/kz$ cd ~

# 显示当前目录
ubuntu@xnzysq20210118001:~$ pwd
/home/ubuntu

ubuntu@xnzysq20210118001:/home$ ls demo
ubuntu@xnzysq20210118001:/home$ cd !$
cd demo
ubuntu@xnzysq20210118001:/home/demo$

1.3 pwd 显示当前目录

1)语法

pwd [-P]

2)选项参数

-P :显示出确实的路径,而非使用连结 (link) 路径。

pwd        查看当前路径
pwd -P   查看软链接的实际路径

3)实例

# 显示当前目录
ubuntu@xnzysq20210118001:/home/kz$ pwd
/home/kz

# 表示去到目前的上一级目录
ubuntu@xnzysq20210118001:/home/kz$ cd ..

# 显示当前目录
ubuntu@xnzysq20210118001:/home$ pwd
/home

1.4 mkdir 创建一个新的目录

1)语法

mkdir [-mp] 目录名称

2)选项参数

  • -m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色,也可以用 chmod 命令设置。
  • -p :帮助你直接将所需要的目录(包含上一级目录)递归创建起来!(若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不在的目录,即一次可以建立多个目录。)

3)实例

  • 加了这个 -p 的选项,可以自行帮你创建多层目录!
  • 如果没有加上 -m 来强制配置属性,系统会使用默认属性。
# 创建一名为 test 的新目录
ubuntu@xnzysq20210118001:~$ mkdir test
ubuntu@xnzysq20210118001:~$ ls
test

# 在test 目录下创建 demo 目录
ubuntu@xnzysq20210118001:~$ mkdir test/demo

# 创建多层目录失败
ubuntu@xnzysq20210118001:~$ mkdir a/b/c
mkdir: cannot create directory ‘a/b/c’: No such file or directory

# 通过参数 -p 创建多层目录成功
ubuntu@xnzysq20210118001:~$ mkdir -p a/b/c
ubuntu@xnzysq20210118001:~$ ls
a  test

# 通过参数 -m 创建权限为 rwx--x--x 的目录test2
ubuntu@xnzysq20210118001:~$ mkdir -m 711 test2

ubuntu@xnzysq20210118001:~$ ls -l
total 12
drwxrwxr-x 3 ubuntu ubuntu 4096 Sep 24 03:09 a
drwxrwxr-x 2 ubuntu ubuntu 4096 Sep 24 03:09 test
drwx--x--x 2 ubuntu ubuntu 4096 Sep 24 03:12 test2

1.5 rmdir 删除一个空的目录

1)语法

 rmdir [-p] 目录名称

2)选项参数

  • -p :连同上一级『空的』目录也一起删除

3)实例

# 列出当前目录下的所有目录或文件
ubuntu@xnzysq20210118001:~$ ls
a  test  test2

# 移除test目录
ubuntu@xnzysq20210118001:~$ rmdir test

# 列出当前目录下的所有目录或文件
ubuntu@xnzysq20210118001:~$ ls
a  test2

# 移除a目录,因为有内容,所以无法删除
ubuntu@xnzysq20210118001:~$ rmdir a
rmdir: failed to remove 'a': Directory not empty

# 移除c目录,连同上一级的空目录一起删除,
# 这里删除c后b为空目录,删除b后a为空目录
ubuntu@xnzysq20210118001:~$ rmdir -p a/b/c

# 列出当前目录下的所有目录或文件
ubuntu@xnzysq20210118001:~$ ls
test2

1.6 cp 复制文件或目录

1)语法

cp [options] source dest

[root@www ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)
[root@www ~]# cp [options] source1 source2 source3 .... directory

cp 若目标文件存在时,会提示是否覆盖。

\\cp 强制覆盖,若目标文件存在时,不提示直接覆盖。

2)选项参数

  • -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合;(常用)
  • -d:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身(复制时保留链接,这里所说的链接相当于Windows系统中的快捷方式);
  • -f:为强制(force)的意思,覆盖已经存在的目标文件而不给出提示,若目标文件已经存在且无法开启,则移除后再尝试一次;
  • -i:与-f选项相反,若目标档(destination)已经存在时,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖(常用)
  • -l:进行硬式连结(hard link)的连结档创建,而非复制文件本身(不复制文件,只是生成链接文件);
  • -p:连同文件的属性一起复制过去,而非使用默认属性(除复制文件的内容外,还把修改时间和访问权限也复制到新文件中)(备份常用);
  • -r:递归持续复制,用於目录的复制行为(若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件);(常用)
  • -s:复制成为符号连结档 (symbolic link),亦即『捷径』文件;
  • -u:若 destination 比 source 旧才升级 destination !

3)实例

# 用 root 身份,将 root 目录下的 .bashrc 复制到 /tmp 下,并命名为 bashrc
[root@www ~]# cp ~/.bashrc /tmp/bashrc
[root@www ~]# cp -i ~/.bashrc /tmp/bashrc
cp: overwrite `/tmp/bashrc'? n  <==n不覆盖,y为覆盖

# 强制覆盖不提示
[root@www ~]# \\cp -i ~/.bashrc /tmp/bashrc 
  • 同一机器的复制
#将../html/index.html 复制到当前目录
cp ../html/index.html .    
#将../html/ 目录下的文件及子目录复制到当前的tt目录下,如果tt不存在,会自动创建
cp -r ../html/  tt/       
#将文件file复制到目录/usr/men/tmp下,并改名为file1
cp file /usr/men/tmp/file1  
    
#如果dir2目录已存在,则需要使用
cp -r dir1/. dir2
#如果这时使用cp -r dir1 dir2,则也会将dir1目录复制到dir2中,明显不符合要求。
ps:dir1、dir2改成对应的目录路径即可。
  • 远程复制(不同机器) 
#将当前目录下的test.txt复制到远程111.12机器的/zx目录下
scp test.txt root@192.168.111.12:/zx

#将test.txt复制到远程用户的根目录,并命名为textA.txt
scp test.txt root@192.168.111.12:testA.txt

#也可以不指定用户,在后续提示中再输入,如下:
scp test.txt 192.168.111.12:/zx

#从远程复制到本地: -r用于递归整个目录
scp -r remote_user@remote_ip:remote_folder local_path

1.7 rm 删除文件或目录

1)语法

rm [-fir] 文件或目录

2)选项参数

  • -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息(强制删除不提示);
  • -i :互动模式,在删除前会询问使用者是否动作
  • -r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!

3)实例

[root@www tmp]# rm -i bashrc
rm: remove regular file `bashrc'? y

如果加上 -i 的选项就会主动询问喔,避免你删除到错误的档名!

# 强制删除aa目录及其下面的所有文件或文件夹,不提示
[root@www tmp]# rm -rf aa/

# 删除文件时有提示是否删除
[root@www tmp]# rm tip.txt

# 删除文件时没有提示
[root@www tmp]# rm -f notip.txt

1.8 mv 移动文件与目录,或修改文件与目录的名称

移动操作可以理解成复制文件后,删除原文件。

1)语法

[root@www ~]# mv [-fiu] source destination
[root@www ~]# mv [options] source1 source2 source3 .... directory

2)选项参数

  • -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
  • -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
  • -u :若目标文件已经存在,且 source 比较新,才会升级 (update)

3)实例

复制一文件,创建一目录,将文件移动到目录中

[root@www ~]# cd /tmp
[root@www tmp]# cp ~/.bashrc bashrc
[root@www tmp]# mkdir mvtest
[root@www tmp]# mv bashrc mvtest
将某个文件移动到某个目录去,就是这样做!

将刚刚的目录名称更名为 mvtest2
[root@www tmp]# mv mvtest mvtest2

mv /zx/soft/* . #复制/zx/soft目录中的所有文件到当前目录
mv a.txt ./test/a.txt  #复制当前目录a.txt到当前的test目录下。
mv a.txt ./test/ -f  #移动到test目录,如果存在就覆盖
mv /zx/soft/  /tmp/soft  #复制文件夹到/tmp/下,必须保证tmp是存在的文件夹

2、文件命令

2.1 touch 新建文件

Linux touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。ls -l 可以显示档案的时间记录。

1)语法

touch [-acfm][-d<日期时间>][-r<参考文件或目录>] [-t<日期时间>][--help][--version][文件或目录…]

2)选项参数

  • a 改变档案的读取时间记录。
  • m 改变档案的修改时间记录。
  • c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。
  • f 不使用,是为了与其他 unix 系统的相容性而保留。
  • r 使用参考档的时间记录,与 --file 的效果一样。
  • d 设定时间与日期,可以使用各种不同的格式。
  • t 设定档案的时间记录,格式与 date 指令相同。
  • --no-create 不会建立新档案。
  • --help 列出指令格式。
  • --version 列出版本讯息。

3)常用参数搭配

touch [-am] [-t<日期时间>] [目录|文件]

选项说明:

-a: 只修改访问时间
-m : 只修改 修改时间
-t : 使用指定日期时间,而非系统时间 。例如要修改为2019年10月20日16:38分13秒。参数就是:‘20191020163813’


如果指定目录文件不存在,则会直接创建一个空文件,所以touch也常用来创建一个空白文件。
若存在,则修改文件的时间属性为当前时间

示例:
#创建一个新文件aa.txt
touch aa.txt

# 将index.html文件的访问和修改时间修改成当前系统的时间。
# 修改之前可以先查看文件的时间戳: 用stat 命令查看
touch index.html


# 使用指令"touch"修改文件"testfile"的时间属性为当前系统时间
# touch testfile

# 首先,使用ls命令查看testfile文件的属性,如下所示:
$ ls -l testfile                #查看文件的时间属性  
#原来文件的修改时间为16:09  
-rw-r--r-- 1 hdd hdd 55 2021-08-22 16:09 testfile  
# 执行指令"touch"修改文件属性以后,并再次查看该文件的时间属性,如下所示:
$ touch testfile                #修改文件时间属性为当前系统时间  
$ ls -l testfile                #查看文件的时间属性  
#修改后文件的时间属性为当前系统时间  
-rw-r--r-- 1 hdd hdd 55 2021-08-22 19:53 testfile  

4)实例

在当前目录创建一个名为aa.txt的文件        touch  aa.txt

在当前目录批量创建10个文件,touch {1..10}.text

2.2 rename 修改文件名

rename命令用字符串替换的方式修改文件名,可以用来批量修改,语法为rename 修改对象 修改后样子 符合条件的对象,可以参照man rename里面例子进行名字批量修改。

1)语法

rename 原字符串 目标字符串 文件

2)选项参数

  • 原字符串:将文件名需要替换的字符串;
  • 目标字符串:将文件名中含有的原字符替换成目标字符串;
  • 文件:指定要改变文件名的文件列表。

3)常用参数搭配

rename支持通配符

  • ?  可替代单个字符
  • *  可替代多个字符
  • [charset] 可替代charset集中的任意单个字符

rename支持正则表达式

# 把文件名中的AA替换成aa
rename "s/AA/aa/" * 

# 把.html 后缀的改成 .php后缀
rename "s//.html//.php/" * 

# 把所有的文件名都以txt结尾
rename "s/$//.txt/" *

# 把所有以.txt结尾的文件名的.txt删掉
rename "s//.txt//" *

4)实例

# 将main1.c重命名为main.c
rename main1.c main.c main1.c

# 1 创建以foo开头+数字的299个文件
touch foo{1..299}.txt

# 2 把foo1到foo9的文件重命名为foo01到foo09,文件名中的foo被替换为foo0,以下命令只重命名4个字符长度名称的文件。
rename foo foo0 foo?

# 3 foo01到foo99的所有文件都被重命名为foo001到foo099,文件名中的foo被替换为foo0,以下命令只重命名5个字符长度名称的文件。
rename foo foo0 foo??

# 4 foo01到foo299的所有文件都被重命名为foo0001到foo0199,所有以foo开头的文件都被重命名。
rename foo foo0 foo*

# 4 从foo0200到foo0299的所有文件都被重命名为foo200到foo299,文件名中的foo0被替换为foo。
rename foo0 foo foo0[2]*

2.3 vi或vim 修改文件

1)语法

vi 文件名

编注意:使用vi编辑器打开文件后,并不能编辑,因为此时处于命令模式,点击键盘i/a/o进入编辑模式。

2)选项参数

3)操作步骤

保存步骤:

  • 1 通过命令vi 文件名,使用vi编辑器打开文件。
  • 2 点击键盘i/a/o进入编辑模式。
  • 3 编辑文件内容。
  • 4 按 ESC 键进入命令行模式。
  • 5 按 : 键进入底行模式。
  • 6 输入wq回车,保存并退出编辑。

取消保存步骤:

  • 1 通过命令vi 文件名,使用vi编辑器打开文件。
  • 2 点击键盘i/a/o进入编辑模式。
  • 3 编辑文件内容。
  • 4 按 ESC 键进入命令行模式。
  • 5 按 : 键进入底行模式。
  • 6 紧接着上一步的 : 输入 q! 回车,撤销本次修改并退出编辑。

4)实例

打开当前目录下的aa.txt文件     vi aa.txt 或者 vim aa.txt

5)拓展 - vi编辑器的3种模式

基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:

1) 命令行模式(command mode)

控制屏幕光标的移动,字符、字或行的删除,查找,移动复制某区段及进入Insert mode下,或者到 last line mode。命令行模式下的常用命令:

  • 控制光标移动:↑,↓,j
  • 删除当前行:dd 
  • 查找:/字符
  • 进入编辑模式:i o a
  • 进入底行模式::

2) 编辑模式(Insert mode)

使用vi编辑器打开文件后点击按键:i ,a或者o即可进入编辑模式。

  • i:在光标所在字符前开始插入
  • a:在光标所在字符后开始插入
  • o:在光标所在行的下面另起一新行插入

只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。编辑模式下常用命令:

  • ESC 退出编辑模式到命令行模式;

3) 底行模式(last line mode)

将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。底行模式下常用命令:

  • 退出编辑:   :q
  • 强制退出:   :q!
  • 保存并退出:  :wq
  • 保存编辑并强制退出:  :wq!

2.4 cat 查看文件

cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。

1)语法

cat [-AbeEnstTuv] [--help] [--version] fileName

2)选项参数

  • -n 或 --number:由 1 开始对所有输出的行数编号。
  • -b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。
  • -s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。
  • -v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。
  • -E 或 --show-ends : 在每行结束处显示 $。
  • -T 或 --show-tabs: 将 TAB 字符显示为 ^I。
  • -A, --show-all:等价于 -vET。
  • -e:等价于"-vE"选项;
  • -t:等价于"-vT"选项;

3)常用参数搭配

cat:看最后一屏(只读方式), -n显示行号,为了浏览方便,一般会带上管道命令 | more ,cat 文件名 | more 可以分页浏览。

# 将 file1 的文件内容输入到 file2 中, 只能显示最后一屏内容
cat file1 > file2

# 把 textfile1 的文档内容加上行号后输入 textfile2 这个文档里
cat -n textfile1 > textfile2

# 把 textfile1 和 textfile2 的文档内容加上行号(空白行不加)之后将内容附加到 textfile3 文档里:
cat -b textfile1 textfile2 >> textfile3

# 清空 /etc/test.txt 文档内容:
cat /dev/null > /etc/test.txt

# cat 也可以用来制作镜像文件。例如要制作软盘的镜像文件,将软盘放好后输入
cat /dev/fd0 > OUTFILE

#相反的,如果想把 image file 写到软盘,输入:
cat IMG_FILE > /dev/fd0

1. OUTFILE 指输出的镜像文件名。
2. IMG_FILE 指镜像文件。
3. 若从镜像文件写回 device 时,device 容量需与相当。
4. 通常用制作开机磁片。

2.5 more 分页查看文件

Linux more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h 。

1)语法

more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..]

2)选项参数

  • -num 一次显示的行数
  • -d 提示使用者,在画面下方显示 [Press space to continue, 'q' to quit.] ,如果使用者按错键,则会显示 [Press 'h' for instructions.] 而不是 '哔' 声
  • -l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能
  • -f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)
  • -p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容
  • -c 跟 -p 相似,不同的是先显示内容再清除其他旧资料
  • -s 当遇到有连续两行以上的空白行,就代换为一行的空白行
  • -u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)
  • +/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示
  • +num 从第 num 行开始显示
  • fileNames 欲显示内容的文档,可为复数个数

3)常用参数搭配

# 可以显示百分比,回车可以向下一行,空格可以向下一页,q可以退出查看
# 逐页显示 testfile 文档内容,如有连续两行以上空白行则以一行空白行显示。
more -s testfile

# 从第 20 行开始显示 testfile 之文档内容。
more +20 testfile

4)more指令中内置快捷键

  • 空格键:代表向下翻一页
  • Enter:向下翻n行,n默认为1行,可以定义为其他值。
  • q:代表立刻离开more,不再显示该文件内容
  • CTRL + F:向下滚动一屏
  • CTRL + B:返回上一屏
  • =:输出当前行的行号
  • :f:输出文件名和当前行的行号
  • V 调用vi编辑器
  • !命令 调用Shell,并执行命令

2.6 less 分页查看文件,可搜索

less 与 more 类似,但是比more指令更加强大,less 可以随意浏览文件,支持向上翻页、向下翻页和搜索。less指令用来分屏查看文件内容,支持各种显示终端。less 指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。

1)语法

less [参数] 文件 

2)选项参数

  • -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]: 向上翻动一页

3)常用参数搭配

# 查看文件, 可以使用键盘上的PgUp和PgDn向上和向下翻页,q结束查看
less log2021.log

# ps查看进程信息并通过less分页显示
ps -ef |less

# 查看命令历史使用记录并通过less分页显示
[root@localhost test]# history | less
22  scp -r tomcat6.0.32 root@192.168.120.203:/opt/soft
23  cd ..
24  scp -r web root@192.168.120.203:/opt/
25  cd soft
26  ls
……省略……

# 浏览多个文件
less log2020.log log2021.log
说明:
输入 :n后,切换到 log2021.log
输入 :p 后,切换到log2020.log

4)less指令中内置快捷键

  • 空格键:代表向下翻一页
  • [pagedown]:向下翻动一页
  • [pageup]:向上翻动一页
  • /字串:向下搜寻[字串]的功能,n:向下查找,N:向上查找。
  • ?字串:向下搜寻[字串]的功能,n:向上查找,N:向下查找。
  • q:代表立刻离开less程序
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 处

2.7 tail 查看文件

tail 命令用于查看指定行数或者动态查看尾部数据,有一个常用的参数 -f 常用于查阅正在改变的日志文件。

tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。

1)语法

tail [参数] [文件]  

2)选项参数

  • -f 循环读取
  • -q 不显示处理信息
  • -v 显示详细的处理信息
  • -c<数目> 显示的字节数
  • -n<行数> 显示文件的尾部 n 行内容, 行数为+num表示从第num行以后开始显示,行数为-num时表示从距文件尾num行处开始显示。如果省略num参数,系统默认值为10。
  • -f: 循环读取,例如查看服务器日志时,可以实时观察
  • --pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
  • -q, --quiet, --silent 从不输出给出文件名的首部
  • -s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒

3)常用参数搭配

# 要显示 notes.log 文件的最后 10 行,请输入以下命令:
tail notes.log         # 默认显示最后 10 行

# 要跟踪名为 notes.log 的文件的增长情况,请输入以下命令:
tail -f notes.log
此命令显示 notes.log 文件的最后 10 行。当将某些行添加至 notes.log 文件时,tail 命令会继续显示这些行。 显示一直继续,直到您按下(Ctrl-C)组合键停止显示。

# 显示文件 notes.log 的内容,从第 20 行至文件末尾:
tail -n +20 notes.log

# 显示文件 notes.log 的最后 10 个字符:
tail -c 10 notes.log

2.8 head 查看文件

head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。

1)语法

head [参数] [文件]  

2)选项参数

  • -q 隐藏文件名
  • -v 显示文件名
  • -c<数目> 显示的字节数。
  • -n<行数> 显示的行数。

3)常用参数搭配

# 要显示 runoob_notes.log 文件的开头 10 行,请输入以下命令:
head runoob_notes.log

# 显示 notes.log 文件的开头 5 行,请输入以下命令:
head -n 5 runoob_notes.log

# 显示文件前 20 个字节:
head -c 20 runoob_notes.log

2.9 cat/more/less/tail/head实例

cat file1 > file2 : 将 file1 的文件内容输入到 file2 中

more file1:按页查看 file1 文件内容,从前向后翻看文件 (空格-一行行, 空白键-一页页)

less file1:按页查看 file1 文件内容,可往前往后翻看文件 (上下键)-q 退出

head -n 5 file1:显示 file1 文件的前 5 行 == 默认前 10 行

tail -n 5 file1:显示 file1 文件的后 5 行 === 默认后 10 行

tail -f file1:实时显示 file1 文件的最新增加内容 === 查看动态更新的日志 , ctrl + C 退出

tail -10 sudo.conf:使用tail -10 查看/etc/sudo.conf文件的后10行,Ctrl+C结束  

tail -f filename: filename 文件里的最尾部的内容(查看最后20行)显示在屏幕上,并且不断刷新。

wc /path/file: 输出 file 文件的行数,单词书和字节数

2.10 ln 创建链接文件

Linux ln(英文全拼:link files)命令是一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。

当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。

1)语法

ln [参数][源文件或目录][目标文件或目录]

其中参数的格式为
[-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}]
[--help] [--version] [--]

2)选项参数

必要参数:

  • -b 删除,覆盖以前建立的链接
  • -d 允许超级用户制作目录的硬链接
  • -f 强制执行
  • -i 交互模式,文件存在则提示用户是否覆盖
  • -n 把符号链接视为一般目录
  • -s 软链接(符号链接)
  • -v 显示详细的处理过程

选择参数:

  • -S "-S<字尾备份字符串> "或 "--suffix=<字尾备份字符串>"
  • -V "-V<备份方式>"或"--version-control=<备份方式>"
  • --help 显示帮助信息
  • --version 显示版本信息

3)实例

# 给文件创建软链接,为log2013.log文件创建软链接link2013,如果log2013.log丢失,link2013将失效:
ln -s log2013.log link2013

[root@localhost test]# ll
-rw-r--r-- 1 root bin      61 11-13 06:03 log2013.log
[root@localhost test]# ln -s log2013.log link2013
[root@localhost test]# ll
lrwxrwxrwx 1 root root     11 12-07 16:01 link2013 -> log2013.log
-rw-r--r-- 1 root bin      61 11-13 06:03 log2013.log


# 给文件创建硬链接,为log2013.log创建硬链接ln2013,log2013.log与ln2013的各项属性相同
ln log2013.log ln2013

[root@localhost test]# ll
lrwxrwxrwx 1 root root     11 12-07 16:01 link2013 -> log2013.log
-rw-r--r-- 1 root bin      61 11-13 06:03 log2013.log
[root@localhost test]# ln log2013.log ln2013
[root@localhost test]# ll
lrwxrwxrwx 1 root root     11 12-07 16:01 link2013 -> log2013.log
-rw-r--r-- 2 root bin      61 11-13 06:03 ln2013
-rw-r--r-- 2 root bin      61 11-13 06:03 log2013.log


#在当前目录创建一个软连接,指向/etc/fastab,名称也是fastab
ln -s /etc/fastab

#在当前目录创建一个指向/boot/grub的软连接,命名为gb
ln -s /boot/grub gb

4)链接介绍

Linux文件系统中,有所谓的链接(link),我们可以将其视为档案的别名,而链接又可分为两种 : 硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。

不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。

  • 硬连接指通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在 Linux 中,多个文件名指向同一索引节点是存在的。比如:A 是 B 的硬链接(A 和 B 都是文件名),则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同,即一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件,A 和 B 对文件系统来说是完全平等的。删除其中任何一个都不会影响另外一个的访问。
  • 硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
  • 软连接也叫符号连接(Symbolic Link),软链接文件类似于 Windows 的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。比如:A 是 B 的软链接(A 和 B 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,A 和 B 指向的是两个不同的 inode,继而指向两块不同的数据块。但是 A 的数据块中存放的只是 B 的路径名(可以根据这个找到 B 的目录项)。A 和 B 之间是“主从”关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。

软链接:

  • 1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
  • 2.软链接可以 跨文件系统 ,硬链接不可以
  • 3.软链接可以对一个不存在的文件名进行链接
  • 4.软链接可以对目录进行链接

硬链接:

  • 1.硬链接,以文件副本的形式存在。但不占用实际空间。
  • 2.不允许给目录创建硬链接
  • 3.硬链接只有在同一个文件系统中才能创建

注意:删除软连接 正确方式是:rm -rf ./gb ; 错误方式: rm -rf ./gb/ , 这样会删除了原有grub下的内容。特别是针对系统文件的软连接,删除一定要慎重。

2.11 file 识别文件类型

file命令用于识别文件的类型,Linux中文件后缀只是方便使用者识别,没有实质的约束作用。file命令可以查看文件的实质类型。

1)语法

file [-bcLvz][-f <名称文件>][-m <魔法数字文件>...][文件或目录...]

2)选项参数

  • -b  列出辨识结果时,不显示文件名称。
  • -c  详细显示指令执行过程,便于排错或分析程序执行的情形。
  • -f<名称文件>  指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称。
  • -L  直接显示符号连接所指向的文件的类别。
  • -m<魔法数字文件>  指定魔法数字文件。
  • -v  显示版本信息。
  • -z  尝试去解读压缩文件的内容。
  • [文件或目录...] 要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。

3)实例

# 可以看出,index.mp4本质是一个HTML而非一个mp4文件
[root@VM_0_13_centos soft]# file index.mp4 
index.mp4: HTML document, UTF-8 Unicode text, with very long lines

# 显示文件类型
[root@localhost ~]# file install.log
install.log: UTF-8 Unicode text

[root@localhost ~]# file -b install.log      <== 不显示文件名称
UTF-8 Unicode text

[root@localhost ~]# file -i install.log      <== 显示MIME类别。
install.log: text/plain; charset=utf-8

[root@localhost ~]# file -b -i install.log
text/plain; charset=utf-8

# 显示符号链接的文件类型
[root@localhost ~]# ls -l /var/mail
lrwxrwxrwx 1 root root 10 08-13 00:11 /var/mail -> spool/mail

[root@localhost ~]# file /var/mail
/var/mail: symbolic link to `spool/mail'

[root@localhost ~]# file -L /var/mail
/var/mail: directory

[root@localhost ~]# file /var/spool/mail
/var/spool/mail: directory

[root@localhost ~]# file -L /var/spool/mail
/var/spool/mail: directory

以上是关于Linux操作命令分类详解 - 目录文件的主要内容,如果未能解决你的问题,请参考以下文章

Linux操作命令分类详解 - 压缩备份

Linux操作命令分类详解 - 压缩备份

Linux操作命令分类详解 - 进程查找其他

Linux操作命令分类详解 - 进程查找其他

Linux操作命令分类详解 - 命令速查

Linux操作命令分类详解 - 命令速查