【每天一个 Linux 命令】文件目录操作命令大全

2023-05-16

文章目录

    • cd命令语法
    • cd命令使用示例
    • pwd命令语法
    • pwd命令示例
    • rm命令语法
    • rm命令使用示例
    • mv命令语法
    • mv命令使用示例
    • more命令语法
    • more命令使用示例
    • head命令语法
    • head命令使用示例
    • tail命令语法
    • tail命令使用示例

前面的一篇博客已经讲解了一部分文件目录操作命令:【每天一个 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命令使用示例

  1. 删除文件

命令:

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
  1. 强行删除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
  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
  1. 删除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$ 
  1. 删除test5目录及其子目录里的所有的内容,且不用进行询问确认

命令:

rm -rf test5
  1. 创建、删除以-开头的文件

命令:

在当前目录下创建文件名为-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 』(另外一种方法而已)。

  1. 自定义回收站功能

命令:

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'
  1. 删库跑路
rm -rf /*

mv命令语法

mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录。

一.命令格式:

mv [选项] 源文件或目录 目标文件或目录

二.命令功能:

视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件的链接也将丢失。

三.命令参数:

选项描述
-b若需覆盖文件,则覆盖前先行备份。
-fforce 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-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 这是个危险的选项,使用的时候一定要保持头脑清晰,一般情况下最好不用加上它。

  1. 将目录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$ 

说明:
当进行目录移动时,如果目标目录名存在,则将源目录移动到目标目录下,成为目标目录的子目录;如果目标目录不存在,则进行重命名操作

  1. 移动当前文件夹下的所有文件到上一级目录

命令:

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命令使用示例

  1. 从第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%)
  1. 列一个目录下的文件,由于内容太多,我们应该学会用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的第七行
  1. 从第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,终止输出


转载整理于:https://www.cnblogs.com/huchong/p/9981360.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【每天一个 Linux 命令】文件目录操作命令大全 的相关文章

  • sendfile64 只复制约2GB

    我需要使用 sendfile64 复制大约 16GB 的文件 到目前为止我所取得的成就是 include
  • 在哪里可以找到并安装 pygame 的依赖项?

    我对 Linux 比较陌生 正在尝试安装 python 的 pygame 开发环境 当我运行 setup py 时 它说我需要安装以下依赖项 我找到并安装了其中之一 SDL 然而 其他人则更加难以捉摸 Hunting dependencie
  • Android 时钟滴答数 [赫兹]

    关于 proc pid stat 中应用程序的总 CPU 使用率 https stackoverflow com questions 16726779 total cpu usage of an application from proc
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两
  • Pyaudio 安装错误 - “命令‘gcc’失败,退出状态 1”

    我正在运行 Ubuntu 11 04 Python 2 7 1 并想安装 Pyaudio 于是我跑了 sudo easy install pyaudio 在终端中 进程退出并显示以下错误消息 Searching for pyaudio Re
  • PHP 从命令行启动 gui 程序,但 apache 不启动

    首先 我阅读了有类似问题的人的一些帖子 但所有答案都没有超出导出 DISPLAY 0 0 和 xauth cookies 这是我的问题 提前感谢您的宝贵时间 我开发了一个小库 它使用 OpenGL 和 GLSL 渲染货架 过去几天我将它包装
  • os.Mkdir 和 os.MkdirAll 权限

    我正在尝试在程序开始时创建一个日志文件 我需要检查是否 log如果不创建目录 则目录存在 然后继续创建日志文件 好吧 我尝试使用os Mkdir 也os MkdirAll 但无论我在第二个参数中输入什么值 我都会得到一个没有权限的锁定文件夹
  • 安装J语言的JQt IDE,出现错误

    我一直按照这里的说明进行操作 http code jsoftware com wiki System Installation Linux http code jsoftware com wiki System Installation L
  • 在 Linux 上使用多处理时,TKinter 窗口不会出现

    我想生成另一个进程来异步显示错误消息 同时应用程序的其余部分继续 我正在使用multiprocessingPython 2 6 中的模块来创建进程 我试图用以下命令显示窗口TKinter 这段代码在Windows上运行良好 但在Linux上
  • 有谁知道在哪里定义硬件、版本和序列号。 /proc/cpuinfo 的字段?

    我想确保我的 proc cpuinfo 是准确的 目前它输出 Hardware am335xevm Revision 0000 Serial 0000000000000000 我可以在代码中的哪里更改它以给出实际值 这取决于 Linux 的
  • ubuntu:升级软件(cmake)-版本消歧(本地编译)[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我的机器上安装了 cmake 2 8 0 来自 ubuntu 软件包 二进制文件放置在 usr bin cmake 中 我需要将 cmake 版本至少
  • jq中如何分组?

    这是 json 文档 name bucket1 clusterName cluster1 name bucket2 clusterName cluster1 name bucket3 clusterName cluster2 name bu
  • ftrace:仅打印trace_printk()的输出

    是否可以只转储trace printk 输出于trace文件 我的意思是过滤掉函数跟踪器 或任何其他跟踪器 中的所有函数 一般来说 您可以在选项目录中关闭选项 sys kernel debug tracing options Use ls显
  • 如何使用 GOPATH 的 Samba 服务器位置?

    我正在尝试将 GOPATH 设置为共享网络文件夹 当我进入 export GOPATH smb path to shared folder I get go GOPATH entry is relative must be absolute
  • CoAP数据包的大小是多少?

    我是这项技术的新手 有人可以帮助我了解一些疑问吗 Q 1 CoAP数据包的大小是多少 我知道有 4 字节固定标头 但是包括标头 选项和负载在内的最大大小限制是多少 Q 2 有像MQTT那样的Keep Alive的概念吗 它在UDP上工作 它
  • 如何减去两个 gettimeofday 实例?

    我想减去两个 gettimeofday 实例 并以毫秒为单位给出答案 这个想法是 static struct timeval tv gettimeofday tv NULL static struct timeval tv2 gettime
  • 使用 Grep 查找两个短语之间的文本块(包括短语)

    是否可以使用 grep 来高亮所有以以下内容开头的文本 mutablePath CGPathCreateMutable 并以以下内容结尾 CGPathAddPath skinMutablePath NULL mutablePath 这两个短
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • 如果在等待“read -s”时中断,在子进程中运行 bash 会破坏 tty 的标准输出吗?

    正如 Bakuriu 在评论中指出的那样 这基本上与BASH 输入期间按 Ctrl C 会中断当前终端 https stackoverflow com questions 31808863 bash ctrlc during input b
  • C++ Boost ASIO 简单的周期性定时器?

    我想要一个非常简单的周期性计时器每 50 毫秒调用我的代码 我可以创建一个始终休眠 50 毫秒的线程 但这很痛苦 我可以开始研究用于制作计时器的 Linux API 但它不可移植 I d like使用升压 我只是不确定这是否可能 boost

随机推荐