文章目录
前面的一篇博客已经讲解了一部分文件目录操作命令:【每天一个 Linux 命令】Linux命令 mkdir,cat,touch,vi/vim
现在我们继续讲解一下其他重要的文件目录操作命令。
cd命令语法
Linux cd 命令可以说是Linux中最基本的命令语句,其他的命令语句要进行操作,都是建立在使用 cd 命令上的。
所以,学习Linux 常用命令,首先就要学好 cd 命令的使用方法技巧。
1. 命令格式:
cd [目录名]
2. 命令功能:
切换当前目录至dirName
cd命令使用示例
3. 常用范例
3.1 例一:进入系统根目录
命令:
cd /
输出:
[root@localhost ~]# cd /
说明:进入系统根目录,上面命令执行完后拿ls命令看一下,当前目录已经到系统根目录了
命令:
cd .. 或者 cd .. //
输出:
1 [root@localhost soft]# pwd
2 /opt/soft
3 [root@localhost soft]# cd ..
4 [root@localhost opt]# cd ..//
5 [root@localhost /]# pwd
6 /
说明:
进入系统根目录可以使用“ cd … ”一直退,就可以到达根目录
命令:
cd ../.. //
输出:
1 [root@localhost soft]# pwd
2 /opt/soft
3 [root@localhost soft]# cd ../.. //
4 [root@localhost /]# pwd
5 /
6 [root@localhost /]#
说明:使用cd 命令实现进入当前目录的父目录的父目录。
例2:使用 cd 命令进入当前用户主目录
“当前用户主目录”和“系统根目录”是两个不同的概念。进入当前用户主目录有两个方法。
命令1:
cd
输出:
1 [root@localhost soft]# pwd
2 /opt/soft
3 [root@localhost soft]# cd
4 [root@localhost ~]# pwd
5 /root
命令2:
cd ~
输出:
1 [root@localhost ~]# cd /opt/soft/
2 [root@localhost soft]# pwd
3 /opt/soft
4 [root@localhost soft]# cd ~
5 [root@localhost ~]# pwd
6 /root
例3:跳转到指定目录
命令:
cd /opt/soft
输出:
1 [root@localhost ~]# cd /opt/soft
2 [root@localhost soft]# pwd
3 /opt/soft
4 [root@localhost soft]# cd jdk1.6.0_16/
5 [root@localhost jdk1.6.0_16]# pwd
6 /opt/soft/jdk1.6.0_16
7 [root@localhost jdk1.6.0_16]#
跳转到指定目录,从根目录开始,目录名称前加 / ,当前目录内的子目录直接写名称即可
例四:返回进入此目录之前所在的目录
命令:
cd -
输出:
1 [root@localhost soft]# pwd
2 /opt/soft
3 [root@localhost soft]# cd -
4 /root
5 [root@localhost ~]# pwd
6 /root
7 [root@localhost ~]# cd -
8 /opt/soft
9 [root@localhost soft]#
例五:把上个命令的参数作为cd参数使用。
命令:
cd !$
输出:
1 [root@localhost soft]# cd !$
2 cd -
3 /root
4 [root@localhost ~]# cd !$
5 cd -
6 /opt/soft
7 [root@localhost soft]#
pwd命令语法
Linux中用 pwd 命令来查看”当前工作目录“的完整路径。 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录。
在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置。
1.命令格式:
pwd [选项]
2.命令功能:
查看”当前工作目录“的完整路径
3.常用参数:
一般情况下不带任何参数
如果目录是链接时:
格式:pwd -P 显示出实际路径,而非使用连接(link)路径。
pwd命令示例
**4.**常用实例:
**实例****1:**用 pwd 命令查看默认工作目录的完整路径
命令:
pwd
输出:
[root@localhost ~]# pwd
/root
[root@localhost ~]#
**实例2:**使用 pwd 命令查看指定文件夹
命令:
pwd
输出:
[root@localhost ~]# cd /opt/soft/
[root@localhost soft]# pwd
/opt/soft
[root@localhost soft]#
**实例三:**目录连接链接时,pwd -P 显示出实际路径,而非使用连接(link)路径;pwd显示的是连接路径
命令:
pwd -P
输出:
[root@localhost soft]# cd /etc/init.d
[root@localhost init.d]# pwd
/etc/init.d
[root@localhost init.d]# pwd -P
/etc/rc.d/init.d
[root@localhost init.d]#
实例4:/bin/pwd
命令:
/bin/pwd [选项]
选项:
-L 目录连接链接时,输出连接路径
-P 输出物理路径
输出:
[root@localhost init.d]# /bin/pwd
/etc/rc.d/init.d
[root@localhost init.d]# /bin/pwd --help
[root@localhost init.d]# /bin/pwd -P
/etc/rc.d/init.d
[root@localhost init.d]# /bin/pwd -L
/etc/init.d
[root@localhost init.d]#
实例五:当前目录被删除了,而pwd命令仍然显示那个目录
输出:
[root@localhost init.d]# cd /opt/soft
[root@localhost soft]# mkdir removed
[root@localhost soft]# cd removed/
[root@localhost removed]# pwd
/opt/soft/removed
[root@localhost removed]# rm ../removed -rf
[root@localhost removed]# pwd
/opt/soft/removed
[root@localhost removed]# /bin/pwd
/bin/pwd: couldn't find directory entry in “..” with matching i-node
[root@localhost removed]# cd
[root@localhost ~]# pwd
/root
[root@localhost ~]#
rm命令语法
rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只是删除了链接,原有文件均保持不变。
rm是一个危险的命令,使用的时候要特别当心,尤其对于新手,否则整个系统就会毁在这个命令(比如在/(根目录)下执行rm * -rf)。所以,我们在执行rm之前最好先确认一下在哪个目录,到底要删除什么东西,操作时保持高度清醒的头脑。
一. 命令格式:
rm [选项] 文件
二. 命令功能:
删除一个目录中的一个或多个文件或目录,如果没有使用- r参数,则rm不会删除目录。如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。
三. 命令参数选项
参数 | 描述 |
---|---|
-f | –force,忽略不存在的文件,从不给出提示。 |
-i | –interactive,进行交互式删除 |
-r (-R) | –recursive , 指示rm将参数中列出的全部目录和子目录均递归地删除。 |
-v | –verbose, 详细显示进行的步骤 |
–help | 显示此帮助信息并退出 |
–version | 输出版本信息并退出 |
rm命令使用示例
- 删除文件
命令:
rm 文件名
输出:
hc@hc-virtual-machine:~/test2/test5$ ls
file1 scf test5-1
hc@hc-virtual-machine:~/test2/test5$ rm file1
rm:是否删除普通空文件 'file1'? y
hc@hc-virtual-machine:~/test2/test5$ ls
scf test5-1
说明:
输入rm file1命令后,系统会询问是否删除,输入y后就会删除文件,不想删除则数据n。
如果没有进行询问,建议加上,毕竟删除操作需谨慎!
方法:
vi ~/.bashrc
然后再里面加入
alias rm='rm -i'
意思是 rm命令 实际使用的是 rm -i 交互模式,需要进行确认
注意,此处 rm 和 = 之间不能有空格,否则会有找不到rm命令的提示,
然后在终端执行这条命令,使得刚才的修改即刻生效:
source ~/.bashrc
- 强行删除file,系统不进行确认提示。
命令:
rm -f 文件名
输出:
hc@hc-virtual-machine:~/test2/test5$ ls
file2 scf test5-1
hc@hc-virtual-machine:~/test2/test5$ rm -f file2
hc@hc-virtual-machine:~/test2/test5$ ls
scf test5-1
- 删除当前目录下的所有.log结尾的文件,删除前逐一询问确认
命令:
rm -i *.log
输出:
hc@hc-virtual-machine:~/test2/test5/test5-1$ ls
log1.log log2.log log3.log
hc@hc-virtual-machine:~/test2/test5/test5-1$ rm -i *.log
rm:是否删除普通空文件 'log1.log'? y
rm:是否删除普通空文件 'log2.log'? y
rm:是否删除普通空文件 'log3.log'? y
hc@hc-virtual-machine:~/test2/test5/test5-1$ ls
hc@hc-virtual-machine:~/test2/test5/test5-1$
说明:
touch 是创建文件的命令
mkdir 是创建目录的命令
touch 1.log 2.log 3.log
如果一次性创建多个连续的文件/目录可以使用{1…3}
例如:
一次创建3个.log文件
touch {1..3}.log
- 删除test5目录及其子目录里的所有的内容
命令:
rm -r test5
输出:
hc@hc-virtual-machine:~/test2$ ls
test22 test3 test4 test5
hc@hc-virtual-machine:~/test2$ tree test5
test5
├── log.log
├── scf
│ ├── bin
│ ├── doc
│ │ ├── info
│ │ └── product
│ ├── lib
│ ├── logs
│ │ ├── info
│ │ └── product
│ └── service
│ └── deploy
│ ├── info
│ └── product
└── test5-1
└── log4.log
14 directories, 2 files
hc@hc-virtual-machine:~/test2$ ls
test22 test3 test4 test5
hc@hc-virtual-machine:~/test2$ rm -r test5
rm:是否进入目录'test5'? y
rm:是否进入目录'test5/scf'? y
rm:是否进入目录'test5/scf/logs'? y
rm:是否删除目录 'test5/scf/logs/info'? y
rm:是否删除目录 'test5/scf/logs/product'? y
rm:是否删除目录 'test5/scf/logs'? y
rm:是否进入目录'test5/scf/service'? y
rm:是否进入目录'test5/scf/service/deploy'? y
rm:是否删除目录 'test5/scf/service/deploy/info'? y
rm:是否删除目录 'test5/scf/service/deploy/product'? y
rm:是否删除目录 'test5/scf/service/deploy'? y
rm:是否删除目录 'test5/scf/service'? y
rm:是否删除目录 'test5/scf/bin'? y
rm:是否进入目录'test5/scf/doc'? y
rm:是否删除目录 'test5/scf/doc/info'? y
rm:是否删除目录 'test5/scf/doc/product'? y
rm:是否删除目录 'test5/scf/doc'? y
rm:是否删除目录 'test5/scf/lib'? y
rm:是否删除目录 'test5/scf'? y
rm:是否进入目录'test5/test5-1'? y
rm:是否删除普通空文件 'test5/test5-1/log4.log'? y
rm:是否删除目录 'test5/test5-1'? y
rm:是否删除普通空文件 'test5/log.log'? y
rm:是否删除目录 'test5'? y
hc@hc-virtual-machine:~/test2$ ls
test22 test3 test4
hc@hc-virtual-machine:~/test2$
- 删除test5目录及其子目录里的所有的内容,且不用进行询问确认
命令:
rm -rf test5
- 创建、删除以-开头的文件
命令:
在当前目录下创建文件名为-a和-b的文件
方法一: touch ./-a
方法二: touch -- -b
删除当前目录下文件名为-a和-b 的文件
方法一: rm -- -a
方法二: rm ./-b
输出:
hc@hc-virtual-machine:~/test2/test4$ ls
hc@hc-virtual-machine:~/test2/test4$ touch -a
touch: 缺少了文件操作数
Try 'touch --help' for more information.
hc@hc-virtual-machine:~/test2/test4$ touch ./-a
hc@hc-virtual-machine:~/test2/test4$ ls
-a
hc@hc-virtual-machine:~/test2/test4$ touch -- -b
hc@hc-virtual-machine:~/test2/test4$ ls
-a -b
hc@hc-virtual-machine:~/test2/test4$ rm -a
rm: 不适用的选项 -- a
Try 'rm ./-a' to remove the file '-a'.
Try 'rm --help' for more information.
hc@hc-virtual-machine:~/test2/test4$ rm -- -a
rm:是否删除普通空文件 '-a'? y
hc@hc-virtual-machine:~/test2/test4$ ls
-b
hc@hc-virtual-machine:~/test2/test4$ rm ./-b
rm:是否删除普通空文件 './-b'? y
hc@hc-virtual-machine:~/test2/test4$ ls
hc@hc-virtual-machine:~/test2/test4$
说明:
档名最好不要使用 “-” 号开头, 因为 “-” 后面接的是选项,因此,单纯的使用『 rm -a 』系统的命令就会误判。所以,只能用避过首位字节是 “-” 的方法啦! 就是加上本目录『 ./ 』即可!
如果 man rm 查看使用方法的话,其实还有一种方法,那就是『 rm – -f 』(另外一种方法而已)。
- 自定义回收站功能
命令:
myrm(){ D=/tmp/$(date +%Y%m%d%H%M%S); mkdir -p $D; mv "$@" $D && echo "moved to $D ok"; }
说明:
myrm()
{
D=/tmp/$(date +%Y%m%d%H%M%S);
#在/tmp文件夹中创建名为“当前日期”的文件;
#其中“date+%Y%m%d%H%M%S”是规定了日期的输出格式;
mkdir -p $D;
#以变量D中的路径创建文件夹。
mv "$@" $D && echo "moved to $D ok";
#将所要删除的文件移入变量D中的文件夹内,移入成功后,输出移动成功。
}
alias rm='myrm'
#命令别名定义方式,此定义成功后,无论输入rm或myrm系统都会做出相同操作。
输出:
hc@hc-virtual-machine:/tmp$ myrm(){ D=/tmp/$(date +%Y%m%d%H%M%S); mkdir -p $D; mv "$@" $D && echo "moved to $D ok"; }
hc@hc-virtual-machine:/tmp$ alias rm='myrm'
hc@hc-virtual-machine:/tmp$ touch {1..4}.log
hc@hc-virtual-machine:/tmp$ ls
1.log 2.log 3.log 4.log
hc@hc-virtual-machine:/tmp$ rm [1234].log
moved to /tmp/20181026111028 ok
hc@hc-virtual-machine:/tmp$ ls
20181026111028
hc@hc-virtual-machine:/tmp$ cd 20181026111028/
hc@hc-virtual-machine:/tmp/20181026111028$ ls
1.log 2.log 3.log 4.log
说明:
上面的操作过程模拟了回收站的效果,即删除文件的时候只是把文件放到一个临时目录中,这样在需要的时候还可以恢复过来。
由于我们当前已将rm绑定为myrm,所以我们无法执行删除操作
临时设置rm命令别名为myrm
alias rm='myrm'
此时若想删除回收站里的文件,
由于是临时的,所以换一个命令行窗口后,绑定就会失效
即换一个命令行窗口执行rm -r 命令删除即可
如果不想换命令行窗口,可以用sudo rm -rf 目录名
删除回收站的文件
或者解除临时绑定
unalias rm
输出:
hc@hc-virtual-machine:/tmp/20181026111444$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
alias rm='myrm'
hc@hc-virtual-machine:/tmp/20181026111444$ unalias rm
hc@hc-virtual-machine:/tmp/20181026111444$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
- 删库跑路
rm -rf /*
mv命令语法
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录。
一.命令格式:
mv [选项] 源文件或目录 目标文件或目录
二.命令功能:
视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件的链接也将丢失。
三.命令参数:
选项 | 描述 |
---|---|
-b | 若需覆盖文件,则覆盖前先行备份。 |
-f | force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖 |
-i | 若目标文件 (destination) 已经存在时,就会询问是否覆盖! |
-u | 若目标文件已经存在,且 source 比较新,才会更新(update) |
-t | 即指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后。 |
mv命令使用示例
1.将文件file1.txt重命名为file2.txt
命令:
mv file1.txt file2.txt
输出:
hc@hc-virtual-machine:~/test$ ls
file1.txt
hc@hc-virtual-machine:~/test$ mv file1.txt file2.txt
hc@hc-virtual-machine:~/test$ ls
file2.txt
2.将文件file2.txt移动到目录dir1中
命令:
mv file2.txt dir1
输出:
hc@hc-virtual-machine:~/test$ tree ../test/
../test/
├── dir1
│ └── log1
└── file2.txt
1 directory, 2 files
hc@hc-virtual-machine:~/test$ mv file2.txt dir1
hc@hc-virtual-machine:~/test$ tree ../test/
../test/
└── dir1
├── file2.txt
└── log1
1 directory, 2 files
3.将文件log1重命名为log2,如果log2已经存在,则询问是否覆盖
命令
mv -i log1 log2
输出:
hc@hc-virtual-machine:~/test/dir1$ ls
file2.txt log1 log2
hc@hc-virtual-machine:~/test/dir1$ cat log1
I'm log1
hc@hc-virtual-machine:~/test/dir1$ cat log2
I'm log2
hc@hc-virtual-machine:~/test/dir1$ mv -i log1 log2
mv:是否覆盖'log2'? y
hc@hc-virtual-machine:~/test/dir1$ ls
file2.txt log2
hc@hc-virtual-machine:~/test/dir1$ cat log2
I'm log1
hc@hc-virtual-machine:~/test/dir1$
4.将文件log2重命名为log3,无论log3是否存在,不进行询问,直接覆盖
命令:
mv -f log2 log3
输出:
hc@hc-virtual-machine:~/test/dir1$ touch log3
hc@hc-virtual-machine:~/test/dir1$ vim log3
hc@hc-virtual-machine:~/test/dir1$ ls
file2.txt log2 log3
hc@hc-virtual-machine:~/test/dir1$ cat log2
I'm log1
hc@hc-virtual-machine:~/test/dir1$ cat log3
I'm log3
hc@hc-virtual-machine:~/test/dir1$ mv -f log2 log3
hc@hc-virtual-machine:~/test/dir1$ ls
file2.txt log3
hc@hc-virtual-machine:~/test/dir1$ cat log3
I'm log1
说明:
-f 这是个危险的选项,使用的时候一定要保持头脑清晰,一般情况下最好不用加上它。
- 将目录dir1移动到目录dir2中
命令:
mv dir1 dir2
输出:
hc@hc-virtual-machine:~/test$ ls
dir1
hc@hc-virtual-machine:~/test$ mkdir dir2
hc@hc-virtual-machine:~/test$ tree ../test/
../test/
├── dir1
│ ├── file2.txt
│ └── log3
└── dir2
2 directories, 2 files
hc@hc-virtual-machine:~/test$ mv dir1 dir2
hc@hc-virtual-machine:~/test$ tree ../test/
../test/
└── dir2
└── dir1
├── file2.txt
└── log3
2 directories, 2 files
hc@hc-virtual-machine:~/test$
6.将目录dir2重命名为dir3
命令:
mv dir2 dir3
输出:
hc@hc-virtual-machine:~/test$ ls
dir2
hc@hc-virtual-machine:~/test$ mv dir2 dir3
hc@hc-virtual-machine:~/test$ tree ../test/
../test/
└── dir3
└── dir1
├── file2.txt
└── log3
2 directories, 2 files
hc@hc-virtual-machine:~/test$
说明:
当进行目录移动时,如果目标目录名存在,则将源目录移动到目标目录下,成为目标目录的子目录;如果目标目录不存在,则进行重命名操作
- 移动当前文件夹下的所有文件到上一级目录
命令:
mv * ../
输出:
hc@hc-virtual-machine:~/test$ tree dir3/
dir3/
└── dir1
├── file2.txt
└── log3
1 directory, 2 files
hc@hc-virtual-machine:~/test$ cd dir3/
hc@hc-virtual-machine:~/test/dir3$ ls
dir1
hc@hc-virtual-machine:~/test/dir3$ cd dir1/
hc@hc-virtual-machine:~/test/dir3/dir1$ ls
file2.txt log3
hc@hc-virtual-machine:~/test/dir3/dir1$ mv * ../
hc@hc-virtual-machine:~/test/dir3/dir1$ ls
hc@hc-virtual-machine:~/test/dir3/dir1$ cd ..
hc@hc-virtual-machine:~/test/dir3$ ls
dir1 file2.txt log3
hc@hc-virtual-machine:~/test/dir3$ tree ../dir3
../dir3
├── dir1
├── file2.txt
└── log3
1 directory, 2 files
hc@hc-virtual-machine:~/test/dir3$
8.将目录dir3下的所有内容移到dir2目录下
命令:
mv dir3/* dir2
输出:
hc@hc-virtual-machine:~/test$ tree ../test/
../test/
├── dir2
└── dir3
├── dir1
├── file2.txt
└── log3
3 directories, 2 files
hc@hc-virtual-machine:~/test$ ls
dir2 dir3
hc@hc-virtual-machine:~/test$ mv dir3/* dir2
hc@hc-virtual-machine:~/test$ ls
dir2 dir3
hc@hc-virtual-machine:~/test$ tree ../test/
../test/
├── dir2
│ ├── dir1
│ ├── file2.txt
│ └── log3
└── dir3
3 directories, 2 files
hc@hc-virtual-machine:~/test$
9.将当前目录(dir2)下的dir1,file2.txt,log3移动到dir3目录下
命令:
mv -t ../dir3 dir1 file2.txt log3
输出:
hc@hc-virtual-machine:~/test$ tree ../test/
../test/
├── dir2
│ ├── dir1
│ ├── file2.txt
│ └── log3
└── dir3
hc@hc-virtual-machine:~/test$ cd dir2
hc@hc-virtual-machine:~/test/dir2$ ls
dir1 file2.txt log3
hc@hc-virtual-machine:~/test/dir2$ mv -t ../dir3 dir1 file2.txt log3
hc@hc-virtual-machine:~/test/dir2$ tree ../../test/
../../test/
├── dir2
└── dir3
├── dir1
├── file2.txt
└── log3
3 directories, 2 files
hc@hc-virtual-machine:~/test/dir2$
说明:
-t : --target-directory=DIRECTORY move all SOURCE arguments into DIRECTORY,即指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后。
10.将log3重命名为log2对log2进行的内容进行覆盖,并给log2源内容进行备份
命令:
mv log3 -b log2
输出:
hc@hc-virtual-machine:~/test/dir3$ ls
dir1 file2.txt log2 log3
hc@hc-virtual-machine:~/test/dir3$ cat log2
2
hc@hc-virtual-machine:~/test/dir3$ cat log3
I'm log1
hc@hc-virtual-machine:~/test/dir3$ mv log3 -b log2
hc@hc-virtual-machine:~/test/dir3$ ls
dir1 file2.txt log2 log2~
hc@hc-virtual-machine:~/test/dir3$ cat log2
I'm log1
hc@hc-virtual-machine:~/test/dir3$ cat log2~
2
hc@hc-virtual-machine:~/test/dir3$
说明:
-b 不接受参数,mv会去读取环境变量VERSION_CONTROL来作为备份策略。
–backup该选项指定如果目标文件存在时的动作,共有四种备份策略:
1.CONTROL=none或off : 不备份。
2.CONTROL=numbered或t:数字编号的备份
3.CONTROL=existing或nil:如果存在以数字编号的备份,则继续编号备份m+1…n:
执行mv操作前已存在以数字编号的文件log2.txt.1,那么再次执行将产生log2.txt2,以次类推。如果之前没有以数字编号的文件,则使用下面讲到的简单备份。
4.CONTROL=simple或never:使用简单备份:在被覆盖前进行了简单备份,简单备份只能有一份,再次被覆盖时,简单备份也会被覆盖。
more命令语法
more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上。 more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能 。more命令从前向后读取文件,因此在启动时就加载整个文件。
一.命令格式:
more [-dlfpcsu ] [-num ] [+/ pattern] [+ linenum] [file ... ]
二.命令功能:
more命令和cat的功能一样都是查看文件里的内容,但有所不同的是more可以按页来查看文件的内容,还支持直接跳转行等功能。
三.命令参数:
参数 | 描述 |
---|---|
+n | 从笫n行开始显示 |
-n | 定义屏幕大小为n行 |
+/pattern | 在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示 |
-c | 从顶部清屏,然后显示 |
-d | 提示“Press space to continue,’q’ to quit(按空格键继续,按q键退出)”,禁用响铃功能 |
-l | 忽略Ctrl+l(换页)字符 |
-p | 通过清除窗口而不是滚屏来对文件进行换页,与-c选项相似 |
-s | 把连续的多个空行显示为一行 |
-u | 把文件内容中的下画线去掉 |
四.常用操作命令:
操作命令 | 描述 |
---|---|
Enter | 向下n行,需要定义。默认为1行 |
Ctrl+F | 向下滚动一屏 |
空格键 向下 | 滚动一屏 |
Ctrl+B | 返回上一屏 |
= | 输出当前行的行号 |
:f | 输出文件名和当前行的行号 |
V | 调用vi编辑器 |
!命令 调 | 用Shell,并执行命令 |
q | 退出more |
more命令使用示例
- 从第3行起显示log1文件中的内容
命令:
more +3 log1
输出:
hc@hc-virtual-machine:~/snap$ nl -b a log1
1 我是log1的第一行
2
3
4 我是log1的第四行
5 我是log1的第五行
6
7 我是log1的第七行
hc@hc-virtual-machine:~/snap$ more +3 log1
我是log1的第四行
我是log1的第五行
我是log1的第七行
2.从文件中查找第一个出现"五"字符串的行,并从该处前两行开始显示输出
命令:
more +/五 log1
输出:
hc@hc-virtual-machine:~/snap$ cat log1
我是log1的第一行
我是log1的第三行
我是log1的第四行
我是log1的第五行
我是log1的第七行
hc@hc-virtual-machine:~/snap$ more +/五 log1
...跳过
我是log1的第三行
我是log1的第四行
我是log1的第五行
我是log1的第七行
3.设定每屏显示2行
命令:
more -2 log1
输出:
显示输出文件的第一二行
hc@hc-virtual-machine:~/snap$ more -2 log1
我是log1的第一行
--更多--(20%)
按下ENTER键后,向下n行,需要定义。默认为1行,输出了第三行
我是log1的第一行
我是log1的第三行
--更多--(40%)
按下空格键后,向下滚动一屏(当前设置的是一屏为2行),输出了第四五行
hc@hc-virtual-machine:~/snap$ more -2 log1
我是log1的第一行
我是log1的第三行
我是log1的第四行
我是log1的第五行
--更多--(79%)
- 列一个目录下的文件,由于内容太多,我们应该学会用more来分页显示。这得和管道 | 结合起来
命令:
ls | more -5
输出:
hc@hc-virtual-machine:~$ ls
examples.desktop PycharmProjects vmware-tools-distrib 模板 图片 下载 桌面
git_demo snap 公共的 视频 文档 音乐
hc@hc-virtual-machine:~$ ls | more -5
examples.desktop
git_demo
PycharmProjects
snap
vmware-tools-distrib
--更多--
说明:
每页显示5个文件信息,按 Ctrl+F 或者 空格键 将会显示下5条文件信息。
head命令语法
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾。
一.命令格式:
head [参数]... [文件]...
二.命令功能:
head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。
三.命令参数:
参数 | 描述 |
---|---|
-q | 隐藏文件名 |
-v | 显示文件名 |
-c<字节> | 显示字节数 |
-n<行数> | 显示的行数 |
head命令使用示例
1.输出log1文件的前4行内容
命令:
head -n 4 log1
输出:
hc@hc-virtual-machine:~/snap$ nl -b a log1
1 我是log1的第一行
2
3 我是log1的第三行
4 我是log1的第四行
5 我是log1的第五行
6
7 我是log1的第七行
hc@hc-virtual-machine:~/snap$ head -n 4 log1
我是log1的第一行
我是log1的第三行
我是log1的第四行
2.输出log1文件除最后4行以外的全部内容
命令:
head -n -4 log1
输出:
hc@hc-virtual-machine:~/snap$ head -n -4 log1
我是log1的第一行
我是log1的第三行
hc@hc-virtual-machine:~/snap$
3.输出log1文件的前24个字节
命令:
head -c 24 log1
输出:
hc@hc-virtual-machine:~/snap$ head -c 24 log1
我是log1的第一行
hc@hc-virtual-machine:~/snap$
4.输出log1文件的除最后24个字节以外的内容
命令:
head -c -24 log1
输出:
hc@hc-virtual-machine:~/snap$ head -c -24 log1
我是log1的第一行
我是log1的第三行
我是log1的第四行
我是log1的第五行
hc@hc-virtual-machine:~/snap$
tail命令语法
tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不断刷新,使你看到最新的文件内容.
一.命令格式;
tail [必要参数] [选择参数] [文件]
二.命令功能:
用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
三.命令参数:
参数 | 描述 |
---|---|
-f | 循环读取 |
-q | 不显示处理信息 |
-v | 显示详细的处理信息 |
-c<数目> | 显示的字节数 |
-n<行数> | 显示行数 |
–pid=PID | 与-f合用,表示在进程ID,PID死掉之后结束. |
-q | –quiet, --silent 从不输出给出文件名的首部 |
-s | –sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒 |
tail命令使用示例
1.显示log1文件最后3行内容
命令:
tail -n 3 log1
输出:
hc@hc-virtual-machine:~/snap$ nl -b a log1
1 我是log1的第一行
2
3 我是log1的第三行
4 我是log1的第四行
5 我是log1的第五行
6
7 我是log1的第七行
hc@hc-virtual-machine:~/snap$ tail -n 3 log1
我是log1的第五行
我是log1的第七行
- 从第3行开始显示log1文件内容
命令:
tail -n +3 log1
输出:
hc@hc-virtual-machine:~/snap$ nl -b a log1
1 我是log1的第一行
2
3 我是log1的第三行
4 我是log1的第四行
5 我是log1的第五行
6
7 我是log1的第七行
hc@hc-virtual-machine:~/snap$ tail -n +3 log1
我是log1的第三行
我是log1的第四行
我是log1的第五行
我是log1的第七行
3.循环刷新查看文件内容
命令:
tail -f test.log
输出:
hc@hc-virtual-machine:~/snap$ ping 127.0.0.1 > test.log &
[1] 24615
hc@hc-virtual-machine:~/snap$ tail -f test.log
64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.065 ms
64 bytes from 127.0.0.1: icmp_seq=6 ttl=64 time=0.068 ms
64 bytes from 127.0.0.1: icmp_seq=7 ttl=64 time=0.157 ms
64 bytes from 127.0.0.1: icmp_seq=8 ttl=64 time=0.067 ms
64 bytes from 127.0.0.1: icmp_seq=9 ttl=64 time=0.034 ms
64 bytes from 127.0.0.1: icmp_seq=10 ttl=64 time=0.043 ms
64 bytes from 127.0.0.1: icmp_seq=11 ttl=64 time=0.031 ms
64 bytes from 127.0.0.1: icmp_seq=12 ttl=64 time=0.076 ms
64 bytes from 127.0.0.1: icmp_seq=13 ttl=64 time=0.045 ms
64 bytes from 127.0.0.1: icmp_seq=14 ttl=64 time=0.069 ms
64 bytes from 127.0.0.1: icmp_seq=15 ttl=64 time=0.067 ms
64 bytes from 127.0.0.1: icmp_seq=16 ttl=64 time=0.063 ms
^C
hc@hc-virtual-machine:~/snap$ ps -ef | less
[1]+ 已杀死 ping 127.0.0.1 > test.log
说明:
ping 127.0.0.1 > test.log & //在后台ping远程主机。并输出文件到test.log;这种做法也使用于一个以上的档案监视。用Ctrl+c来终止。
由于加了&,所以输出命令一直在后台运行,想要杀死它就得找到它的pid,然后kill -9 pid,终止输出