侧边栏壁纸
博主头像
孔子说JAVA博主等级

成功只是一只沦落在鸡窝里的鹰,成功永远属于自信且有毅力的人!

  • 累计撰写 285 篇文章
  • 累计创建 125 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

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

孔子说JAVA
2021-09-29 / 0 评论 / 0 点赞 / 156 阅读 / 16,482 字 / 正在检测是否收录...

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

image-1648637420741

image-1648637427214

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

image-1648638027234

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
0

评论区