Linux操作命令分类详解 - 目录文件
Posted 孔子-说
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 foo1..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操作命令分类详解 - 目录文件的主要内容,如果未能解决你的问题,请参考以下文章