man 指令
语法: man [选项] 命令
功能:man 指令可以查阅 Linux 的联机手册
root下安装 man 指令:
yum intall -y man-pages
通过 sudo
来为普通用户安装(普通用户使用sudo):
sudo yum intall -y man-pages
man 可以查阅指令或库函数等内容… 我们先查阅一下 man
指令本身如何使用:
查找手册介绍:
注:☆
为常用手册。
man 默认从1号手册开始查找 man 后的内容,按照手册顺序依次向后查找,找到就显示,找不到就是找不到
按 q
退出查阅
查找 printf 指令:
[root@VM-4-3-centos ~]# man printf
注:Linux 下也有 printf 指令,在 1号手册 中)
在 Linux 下使用 printf
指令:
[root@VM-4-3-centos lesson3]# printf "%d:%s\n" 10 "hello printf" 10:hello printf
使用 man
在 3号手册(C语言库函数) 查找 printf
:
[root@VM-4-3-centos lesson3]# man 3 printf
cp 指令
语法:cp [选项] 源文件或目录 目标文件或目录
功能: cp —— copy,顾名思义就是拷贝,复制文件或目录
常用选项:
-f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
-i 或 --interactive 覆盖文件之前先询问用户
-r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链
接,则一律视为普通文件处理
-R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理
拓展:
cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。
cp 为拷贝的操作,cp 指令默认拷贝的文件
cp 文件名 路径:拷贝文件
将 testcp2 中文件拷贝到 上级目录 lesson3 中:
[root@VM-4-3-centos lesson3]# cd testcp2 [root@VM-4-3-centos testcp2]# touch file.txt [root@VM-4-3-centos testcp2]# cp file.txt .. [root@VM-4-3-centos testcp2]# ll .. total 8 -rw-r--r-- 1 root root 0 Nov 19 00:59 file.txt drwxr-xr-x 3 root root 4096 Nov 19 00:50 testcp1 drwxr-xr-x 3 root root 4096 Nov 19 00:58 testcp2
cp -r 目录名 路径
:r 为递归,递归拷贝文件,即拷贝目录
将 testcp1 目录拷贝到 test2cp2目录:
[root@VM-4-3-centos lesson3]# tree . |-- testcp1 | `-- a | |-- b | | `-- c | | `-- d | `-- test.txt `-- testcp2 6 directories, 1 file [root@VM-4-3-centos lesson3]# cp -r testcp1 testcp2 [root@VM-4-3-centos lesson3]# tree . |-- testcp1 | `-- a | |-- b | | `-- c | | `-- d | `-- test.txt `-- testcp2 `-- testcp1 `-- a |-- b | `-- c | `-- d `-- test.txt 11 directories, 2 files
cp -f 文件名 路径
:强制拷贝。平常状况下,路径下有同名目录会给出覆盖提示;-f 为暴力,为不给是否覆盖提示,直接覆盖
但是实际上这里的不给提示是有歧义的,我们可以测试一下:
那么这是为什么?我第一次测试时,以为是系统错误了,但是反复登入几次测试结果都是这个。我就联想到了是不是 cp 本身的问题,所以我用 alias
查看了它的别名:
[root@VM-4-3-centos f1]# alias cp alias cp='cp -i'
这里的 cp -i 我们上面见过,它的意思是覆盖文件之前先询问用户,所以 cp 本质是 cp -i ,无论怎样都会先提问用户,比如我们的 cp -f 其实就被转换为了**cp -i -f**,这里我们可以通过 取消别名 的方式,来解决这个问题:
[root@VM-4-3-centos f1]# unalias cp
取消别名后:
[root@VM-4-3-centos f1]# ll .. total 16 drwxr-xr-x 2 root root 4096 Nov 19 01:33 f1 drwxr-xr-x 2 root root 4096 Nov 19 01:33 f2 -rw-r--r-- 1 root root 0 Nov 19 01:34 file.txt drwxr-xr-x 3 root root 4096 Nov 19 00:50 testcp1 drwxr-xr-x 4 root root 4096 Nov 19 01:08 testcp2 [root@VM-4-3-centos f1]# ll total 0 -rw-r--r-- 1 root root 0 Nov 19 01:33 file.txt [root@VM-4-3-centos f1]# cp -f file.txt .. // 没有给提示了
恢复别名:
[root@VM-4-3-centos f1]# alias cp='cp -i' [root@VM-4-3-centos f1]# alias cp alias cp='cp -i'
mv 指令
mv —— move,可以 剪切文件/目录 或者 重命名文件/目录。
语法: mv [选项] 源文件或目录 目标文件或目录
功能:
当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它
将所给的源文件或目录重命名为给定的目标文件名。
当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至
目标目录中。
常用选项:
-f :f —— force 强制的意思,如果目标文件已经存在,不会询问直接覆盖。
-i :若目标文件已经存在时,就会询问是否覆盖!
剪切:
mv 文件名 路径:剪切文件到指定路径
剪切 mydir 中的 file.txt 到上级目录 lesson3 中:
[root@VM-4-3-centos mydir]# ll total 0 -rw-r--r-- 1 root root 0 Nov 19 02:01 file.txt [root@VM-4-3-centos mydir]# mv file.txt .. [root@VM-4-3-centos mydir]# ll .. total 12 -rw-r--r-- 1 root root 0 Nov 19 02:01 file.txt drwxr-xr-x 2 root root 4096 Nov 19 02:01 mydir drwxr-xr-x 3 root root 4096 Nov 19 00:50 testcp1 drwxr-xr-x 4 root root 4096 Nov 19 01:08 testcp2
mv 目录名 路径
:剪切目录到指定路径
剪切 mydir 中的 mydirdir
目录到 上级目录 lesson3 中:
[root@VM-4-3-centos lesson3]# ll total 12 -rw-r--r-- 1 root root 0 Nov 19 02:01 file.txt drwxr-xr-x 2 root root 4096 Nov 19 02:01 mydir drwxr-xr-x 3 root root 4096 Nov 19 00:50 testcp1 drwxr-xr-x 4 root root 4096 Nov 19 01:08 testcp2 [root@VM-4-3-centos lesson3]# cd mydir [root@VM-4-3-centos mydir]# mkdir mydirdir // 创建目录 [root@VM-4-3-centos mydir]# mv mydirdir .. // 剪切到上级目录 [root@VM-4-3-centos mydir]# ll .. total 16 -rw-r--r-- 1 root root 0 Nov 19 02:01 file.txt drwxr-xr-x 2 root root 4096 Nov 19 02:03 mydir drwxr-xr-x 2 root root 4096 Nov 19 02:03 mydirdir drwxr-xr-x 3 root root 4096 Nov 19 00:50 testcp1 drwxr-xr-x 4 root root 4096 Nov 19 01:08 testcp2 [root@VM-4-3-centos mydir]#
重命名:
mv 可以重命名文件或目录
mv 文件名 新的文件名
:文件重命名。如果当前面目录并没有这个名字,且不是一个存在的目录,shell会判定它是一个新的文件名
把 file.txt 重命名为 newname.txt:
[root@VM-4-3-centos lesson3]# ll total 16 -rw-r--r-- 1 root root 0 Nov 19 02:01 file.txt drwxr-xr-x 2 root root 4096 Nov 19 02:03 mydir drwxr-xr-x 2 root root 4096 Nov 19 02:03 mydirdir drwxr-xr-x 3 root root 4096 Nov 19 00:50 testcp1 drwxr-xr-x 4 root root 4096 Nov 19 01:08 testcp2 [root@VM-4-3-centos lesson3]# mv file.txt newname.txt [root@VM-4-3-centos lesson3]# ll total 16 drwxr-xr-x 2 root root 4096 Nov 19 02:03 mydir drwxr-xr-x 2 root root 4096 Nov 19 02:03 mydirdir -rw-r--r-- 1 root root 0 Nov 19 02:01 newname.txt drwxr-xr-x 3 root root 4096 Nov 19 00:50 testcp1 drwxr-xr-x 4 root root 4096 Nov 19 01:08 testcp2
mv 文件名 路径 新文件名:剪切文件到指定路径并重命名
将 lesson3 下的 newname.txt 剪切到 testcp1 并重命名为 newnew.txt :
[root@VM-4-3-centos lesson3]# ll total 16 drwxr-xr-x 2 root root 4096 Nov 19 02:03 mydir drwxr-xr-x 2 root root 4096 Nov 19 02:03 mydirdir -rw-r--r-- 1 root root 0 Nov 19 02:01 newname.txt // 存在 drwxr-xr-x 3 root root 4096 Nov 19 00:50 testcp1 drwxr-xr-x 4 root root 4096 Nov 19 01:08 testcp2 [root@VM-4-3-centos lesson3]# mv newname.txt testcp1/newnew.txt [root@VM-4-3-centos lesson3]# ll testcp1 // 剪切并重命名到testcp1 total 4 drwxr-xr-x 3 root root 4096 Nov 19 00:50 a -rw-r--r-- 1 root root 0 Nov 19 02:01 newnew.txt [root@VM-4-3-centos lesson3]# ll total 16 drwxr-xr-x 2 root root 4096 Nov 19 02:03 mydir drwxr-xr-x 2 root root 4096 Nov 19 02:03 mydirdir // 删除掉了 drwxr-xr-x 3 root root 4096 Nov 19 02:57 testcp1 drwxr-xr-x 4 root root 4096 Nov 19 01:08 testcp2
总结:
- mv 文件名 不存在文件名:重命名
- mv 文件名 路径:剪切
- mv 文件名 目录 + 不存在文件名:剪切并重命名文件
- mv 目录名 目录 + 不存在目录名:剪切并重命名目录
echo 指令(含输出重定向)
echo "字符串"
:可以把字符串打印到屏幕上
[root@VM-4-3-centos lesson3]# echo "hello Linux" hello Linux
echo 在打印的时候默认是向显示器打印的。
echo "字符串" > 文件名
:将字符串写入文件中,若文件不存在会创建文件,为输出重定向
将 “aaa bbb ccc”,输出重定向 到 mylog.txt 中:
[root@VM-4-3-centos lesson3]# echo "aaa bbb ccc" > mylog.txt [root@VM-4-3-centos lesson3]# ll total 20 drwxr-xr-x 2 root root 4096 Nov 19 02:03 mydir drwxr-xr-x 2 root root 4096 Nov 19 02:03 mydirdir -rw-r--r-- 1 root root 12 Nov 19 03:18 mylog.txt // 文件被创建 drwxr-xr-x 3 root root 4096 Nov 19 02:57 testcp1 drwxr-xr-x 4 root root 4096 Nov 19 01:08 testcp2 [root@VM-4-3-centos lesson3]# cat mylog.txt // 被写入 aaa bbb ccc
测试 多次输出重定向 文件:
[root@VM-4-3-centos lesson3]# cat mylog.txt aaa bbb ccc [root@VM-4-3-centos lesson3]# echo "aaa" > mylog.txt [root@VM-4-3-centos lesson3]# cat mylog.txt aaa [root@VM-4-3-centos lesson3]# echo "bbb" > mylog.txt [root@VM-4-3-centos lesson3]# cat mylog.txt bbb [root@VM-4-3-centos lesson3]# echo "ccc" > mylog.txt [root@VM-4-3-centos lesson3]# cat mylog.txt ccc
每次重定向后,文件中的内容为最后一次重定向的结果。覆盖式写入(准备写入之前,先清空文件)
说了这么久,那么 输出重定向到底是什么意思?
这里的 >为 输出重定向,echo 默认是打印到屏幕上的。
如果 > 对应的 目标文件不存在 ,则会 自动创建 ,并把本来应该显示到显示器上面的文本,写入到 文件 中,这一过程,就叫 输出重定向 。
拓展一下:
显示数据到显示器上,就是向显示器打印,可以理解为向显示器写入,可以把显示器看做一种文件。
我们的C程序获取数据,比如 scanf、cin 都是从键盘读取到的,所以键盘也可以看做一种文件。
内存从键盘获取数据的过程,也就是 read ,对应着 input(输入)到程序中;内存显示数据到显示器的过程,也就是 write,对应着 output(输出) 到显示器上。这一过程就是IO。
示意图
之前我们学习C语言文件操作时,读写方法是对于文件的。所以我们可以抽象拓展出一个概念:Linux下一切皆文件 !!!
所以,输出重定向就是把原本写入到 显示器文件 的内容写入到文件中!
echo "字符串" >> 文件名:将字符串内容追加到文件中,为 追加重定向
例如追加字符串到 mylog.txt 中:
[root@VM-4-3-centos lesson3]# cat mylog.txt ccc [root@VM-4-3-centos lesson3]# echo "hello" >> mylog.txt [root@VM-4-3-centos lesson3]# cat mylog.txt ccc hello [root@VM-4-3-centos lesson3]# echo "Linux" >> mylog.txt [root@VM-4-3-centos lesson3]# cat mylog.txt ccc hello Linux
追加自带换行,不断向目标文件中新增内容