【Linux】一万七千字详解 —— 基本指令(二)

简介: 【Linux】一万七千字详解 —— 基本指令(二)

man 指令


语法: man [选项] 命令


功能:man 指令可以查阅 Linux 的联机手册

root下安装 man 指令:

yum intall -y man-pages


通过 sudo 来为普通用户安装(普通用户使用sudo):

sudo yum intall -y man-pages


man 可以查阅指令或库函数等内容… 我们先查阅一下 man 指令本身如何使用:


2f6a9a139f36eac7c62a641632498de6.png

查找手册介绍:

image.png


注: 为常用手册。


man 默认从1号手册开始查找 man 后的内容,按照手册顺序依次向后查找,找到就显示,找不到就是找不到


q 退出查阅


查找 printf 指令

[root@VM-4-3-centos ~]# man printf


9673efd90d5adc4f5ed38bd71f77eb51.png


注: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


b53e3bc09412bbc92e00c91fc54c84ef.png


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 为暴力,为不给是否覆盖提示,直接覆盖


但是实际上这里的不给提示是有歧义的,我们可以测试一下:


9c59f8aba23c5705ded07a6cd834a1e0.png


那么这是为什么?我第一次测试时,以为是系统错误了,但是反复登入几次测试结果都是这个。我就联想到了是不是 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。


示意图


image-20221119123949126.png


之前我们学习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



追加自带换行,不断向目标文件中新增内容


相关文章
|
1月前
|
存储 Linux
Linux专栏08:Linux基本指令之压缩解压缩指令
Linux专栏08:Linux基本指令之压缩解压缩指令
37 4
|
1月前
|
Linux
Linux专栏09:Linux基本指令之时间日期指令及关机重启指令
Linux专栏09:Linux基本指令之时间日期指令及关机重启指令
53 2
|
1月前
|
Linux
Linux专栏07:Linux基本指令之文件搜索指令
Linux专栏07:Linux基本指令之文件搜索指令
54 2
|
23天前
|
存储 人工智能 Ubuntu
Linux指令学习(一)
Linux指令学习(一)
53 0
|
1月前
|
安全 Unix Linux
【Linux】基本指令
【Linux】基本指令
|
1月前
|
存储 Linux 开发工具
【Linux】常见指令(下)
【Linux】常见指令(下)
|
1月前
|
存储 Linux 网络安全
【Linux】常见指令(上)
【Linux】常见指令(上)
|
11月前
|
存储 Linux C语言
Linux:入门学习知识及常见指令
Linux:入门学习知识及常见指令
|
4月前
|
人工智能 Unix Linux
Linux的学习之路:2、基础指令(1)
Linux的学习之路:2、基础指令(1)
42 0
|
4月前
|
Unix Linux Windows
Linux的学习之路:3、基础指令(2)
Linux的学习之路:3、基础指令(2)
57 0