本系列文章为尚硅谷武晟然老师的Linux入门教程学习笔记,前面的系列文章链接如下
Linux入门教程:P3->Linux文件系统
Linux入门教程:P4->Vim编辑器
Linux入门教程:P5->网络配置
Linux入门教程:P6->系统管理
Linux入门教程:P7->Shell介绍
文章目录
一、目录操作命令
1.1 查看和切换工作目录
pwd
pwd的全称是print working directory,打印当前工作目录的绝对路径(从根目录开始一直走到当前工作目录这条路),是个内置命令。在终端中那个小波浪号就代表当前用户的主文件夹。
示例:我们不在虚拟机上打开终端去输命令了,因为实际工作的时候一般都是用远程登录的方式,所以我们使用XShell远程登陆进行操作。我们输入pwd,结果如下:
当我们切换目录后,再使用pwd可以看到当前工作目录改变了。
cd
cd的全称是change directory,用法为
cd 参数
,参数目录如下:
cd 绝对路径
:切换路径
cd 相对路径
:切换路径
cd ~或者 cd
:回到自己的家目录
cd -
:回到上一次所在目录
cd ..
:回到当前目录的上一级目录
cd -P
:跳转到实际物理路径,而非快捷方式路径
示例: 切换目录之桌面,可以看到当前的工作目录就变成了/root/桌面
问题:现在有两个目录a/b/c/d和a/b/c/e,如果我想从d跳转到e,难道每次使用cd命令都要加上前面的a/b/c?
答案:不需要,可以使用相对路径。比如说我们当前在/root/桌面目录下,而root目录下还有个视频目录,则我们可以通过cd ../视频/
切换到视频目录。
示例:当我们的目录在/root时,如果想跳转到root下的桌面目录可以直接使用cd 桌面/
,因为相对路径是以当前目录为起始点进行跳转。
示例:使用命令cd -
回到上一次所在目录
示例:通过cd
切换到当前用户的主目录,如果是root用户就回到/root。
我们这里使用su
命令切换回普通用户xzz的主目录,可以看到普通用户的主目录就是/home/xzz
1.2 列出目录内容
ls
ls就是list的缩写,作用是列出目录内容,包括文件和文件夹。ls后面可以跟许多选项,常用的是下面两种。
基本语法:ls [选项] [目录或文件]
常用选项
-a
:列举出目录下的全部的文件,连同隐藏档(开头为.
的文件和目录)一起列出来
-l
:长数据串列出,包含文件的属性与权限等等数据,等价于ll
示例: 直接使用ls
,可以看出列出了当前目录下的所有文件和目录。黑色的是文件,蓝色的是目录。
示例: 使用ls -a
,可以看到隐藏的文件和文件夹都列出来了。在Linux中,以.
开头的是隐藏文件/目录。
我们注意到这里面有个.
和..
,其中.
代表当前目录,..
代表上一级目录。这也是为什么我们可以在当前目录下使用cd ..
跳转到上层目录,也可以使用cd ./
以相对路径的方式跳转到其它目录,比如说这里我们通过cd ./桌面/
跳转到桌面目录中。
.bashrc
·.bashrc·这个文件非常重要,它就是我们当前用户的一个非常重要的配置文件,很多相关的环境变量、一些别名等都可以在里边去进行配置。这个是后话,我们用到的时候再说。
示例:ls -l
中的-l
是指以长数据串列出,l就是long的意思。也就是把当前文件的属性、权限、所属用户等各种信息全列出来,列成一行。
可以看到文件许多详细信息都被列举出来了。之前我们区分是文件还是文件夹是按照颜色来判别的,但是这个东西貌似不太靠谱,万一要是颜色错了就搞不清楚到底是什么东西了。其实这里很明确的判别方式:如果是一般文件,它的开头就是-
。如果是目录,它的开头就是d
,代表directory。
ls -l与ll
ls -l
与ll
是同一个东西,我们可以通过type ll
看出他就是ls -l
的一个别名而已。
1.3 创建和删除目录
mkdir
mkdir: 就是make directory的缩写,创建目录
基本语法:mkdir [选项] 要创建的目录
示例: 通过mkdir a
在当前目录创建一个目录a
示例: 通过mkdir /b
在当根目录创建一个目录b
示例: 通过mkdir b c
在当根目录创建一个目录b和一个目录c
注意: 不能嵌套地去创建目录。比如说我想创建一个目录d,然后在d下面创建一个目录e,然后在e下面创建一个目录f。不能直接通过mkdir d/e/f
来创建。
解决方案①:依次创建各级目录:mkdir d
、mkdir d/e
、mkdir d/e/f
解决方案②:mkdir -p
可以创建多级目录
rmdir
rmdir: 就是remove directory的缩写,移除一个空目录。
基本语法:rmdir 要删除的空目录
示例: 通过rmdir a
删除当前目录中的目录a
注意: 不能直接删除不为空的目录
解决方案①:嵌套地从下往上删除:
解决方案②:通过使用rmdir -p
来删除,但是无法直接使用
这时需要删除最底层的目录,如果删完了之后它的父目录变成空的了,这个时候就可以直接删掉
二、文件操作命令
2.1 创建文件
touch
基本语法: touch 文件名称
示例: 通过touch hello
在当前目录下创建一个hello文件。文件不带后缀名时默认就是文本文件,可以直接打开。
示例: 通过touch /home/xzz/hello2
在/home/xzz目录下创建一个hello2文件。
示例: 可以通过vim
创建文本文件,但是如果是以q
退出文本文件,则无法保存文件,文件也就会不存在。而touch是可以创建空文件的。
2.2 复制文件或文件夹
cp
cp: 就是copy的缩写,复制文件或目录到另一个地方。
基本语法:cp [选项] source dest
(复制source文件到dest)
示例: 将当前目录下的initial-setup-ks.cfg
文件复制到/home/xzz/
目录下
示例: 将当前目录下的initial-setup-ks.cfg
文件复制到/home/xzz/hello2
文件,效果就是进行覆盖。
使用vim打开hello2文件,可以看到内容被覆盖
当我们复制一个文件到另外一个含有同名文件的目录下时,也会提醒我们是否覆盖。我们这里再将initial-setup-ks.cfg
复制一次到/home/xzz/
目录下。
取消提示: 在cp前面加个\
就可以不再提示是否覆盖而是直接进行覆盖。我们这里将initial-setup-ks.cfg
复制到/home/xzz/
目录下的hello3
中。
然后可以看到hello3的内容被覆盖
原因分析: 我们使用type cp
命令可以看到cp
其实是cp -i
的别名
cp
是个内置命令,我们通过cp --help
去看看这个-i
选项代表什么。可以看到-i
代表以交互式的形式进行复制,所以会有提醒。
同样的,ls
也是个内置命令,我们通过cp --ls
可以看到ls
是ls --color=auto
的别名,代表将文件和目录以不同颜色显示出来。
在命令前面加个\
代表使用原生命令,即不加参数。于是我们在ls
前面加个\
,通过\ls
可以看出不再显示文件和目录颜色了。
复制目录:
我们也可以将目录复制到其它地方,但是直接复制目录没有意义,需要将目录下的所有内容一起复制过去。此时需要加上-r
选项,代表递归复制整个文件夹。
示例: 首先在当前目录下创建一个目录a
,然后将initial-setup-ks.cfg
复制到目录a
下,最后通过cp -r
将整个目录a
下的所有内容复制到/home/xzz/
下。可以看到成功将所有内容复制过去了,包括这个initial-setup-ks.cfg
文件。
2.3 删除和移动文件
rm
基本语法:
rm [选项] 要删除的文件
功能描述: 删除指定的文件。加上一些选项还可以删除目录中的所以内容。
选项说明:
-r
:递归删除目录中所有内容
-f
:强制执行删除操作,而不提示用于进行确认。
-v
:显示指令的详细执行过程
示例: 通过rm hello
直接删除当前目录下的hello
文件,会让我们确认是否删除
这是因为rm
是rm -i
的别名
通过加上参数-f
可以不提示。这里我们通过rm -f hello4
删除hello4文件。
示例: 加上-r
可以递归删除目录下的所有内容。我们这里使用rm -r a\
删除目录a\
下的所有内容。
可以看到会一直提示我们是否删除,所以加上-r
,即使用命令rm -rf c\
可以直接删除目录c\
下的所有内容。
注意: 不要使用rm -rf /*
,这就相当于把根目录下边的所有内容都删除掉。这个*
可以认为是一个通配符,将目录下的内容都删除,但是保留这个目录名。
示例: 我们这里有一个目录e
,里面有个文件hello
。我们通过rm -rf ./e/*
删除这个目录下的所有内容,但是保留这个目录。
mv
基本语法:
①mv 需要移动的文件名 新的文件名
②mv 需要移动的文件名 路径
功能描述: 语法①代表将文件移动到新的路径,并且改个名字。语法②代表将文件移动到新的路径。
示例: 当前目录下有文件hello
,有空目录e
。现在通过命令mv hello ./e/
将文件hello
移动过去。
示例: 现在通过命令mv ./e/hello aaaa
将目录e
下的文件hello
移动到当前目录下,然后将名字改为aaaa
。
2.4 查看文件
cat
基本语法:
cat [选项] 要查看的文件
功能描述: 直接打开文件查看其内容,不对其做任何修改。但是一次会将所有内容全部显示出来,如果文件内容较多,需要一直往上移动才能看到前面的内容。
选项说明:-n
:显示所有行的行号,包括空行
示例: 通过cat initial-setup-ks.cfg
查看该配置文件的内容
more
基本语法: more 要查看的文件
功能描述:more
指令是一个基于 VI 编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。
操作说明:
Enter
:向下翻一行
Space
:向下翻一页
b
:向上翻一页
Ctrl+F
:向下滚动一屏
Ctrl+B
:返回上一屏
=
:输出当前行的行号
:f
:输出文件名和当前行的行号
q
:代表立刻离开more,不再显示该文件内
示例: 通过more initial-setup-ks.cfg
查看该配置文件
less
基本语法:
less 要查看的文件
功能描述: less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
操作说明:
Space
:向下翻动一页
pagedown
:向下翻动一页
pageup
:向上翻动一页
G
:跳到末尾(和VIM类似)
g
:跳到开头(和VIM类似)
=
:显示文件名、当前这一页展示的是多少行等信息
/字串
:向下搜寻『字串』的功能;n
:向下查找;N
:向上查找;
?字串
:向上搜寻『字串』的功能;n
:向上查找;N
:向下查找;
q
:离开less
示例: 通过less initial-setup-ks.cfg
查看该配置文件
使用=
看看相关信息
使用/fi
向下搜寻fi
这个字符串
三、其他命令
3.1 控制台显示和输出重定向
echo
基本语法:
echo [选项] [输出内容]
功能描述: 输出内容到控制台
选项:-e
代表支持反斜线控制的字符转换,如\\
代表输出\
本身,\n
代表换行符号,\t
代表制表符(Tab键)
示例: 打印不同的内容到控制台。
示例: echo还可以看当前系统的环境变量,用法为echo $环境变量
。如果我们不知道看什么环境变量,直接echo $制表符(Tab)
,然后输入y
,就能显示所有的环境变量。
里面有很多我们熟悉的环境变量,如PATH
、USER
、HOSTNAME
,在这里路径下可以直接去执行系统命令。
诸如ls
、cp
等命令这些命令明明不在当前目录下却可以执行,这是因为这些命令所在路径都在环境变量PATH
里面声明。所以我们调用命令就像在当前目录下调用一样。
输出重定向
基本语法:
①ls > 文件
(功能描述:列表的内容写入文件中(覆盖写))
②ls >> 文件
(功能描述:列表的内容追加到文件的末尾)
③cat 文件 1 > 文件 2
(功能描述:将文件1的内容覆盖到文件2)
④echo “内容” >> 文件
(功能描述:将字符串内容追加到文件的末尾)
示例: 将列表的内容写入到文件info中
示例: 将字符串加在info文件末尾
3.2 监控文件变化
head
基本语法:
head 文件
(功能描述:查看文件头10行内容)
head -n 5 文件
(功能描述:查看文件头5行内容,5可以是任意行数)
功能描述: head用于显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容。
示例: 使用head
命令来查看info
文件的开头部分内容。
tail
功能描述:
tail
用于输出文件中尾部的内容,默认情况下tail
指令显示文件的后10行内容
基本语法:
tail 文件
(功能描述:查看文件尾部10行内容)
tail -n 5 文件
(功能描述:查看文件尾部5行内容,5可以是任意行数)
tail -f 文件
(功能描述:实时追踪该文档的所有更新)
示例: 使用tail
命令来查看info
文件的末尾部分内容。
监控文件变化
我们打开两个终端,一个终端输入
tail -f info
,另一个终端用于向info
文件中追加内容。
现在我们向info追加一些字符串,可以看到左边也会同步更新。
我们在左边按ctrl s
暂停监控,然后在右边继续追加字符串,可以看到左边没有同步更新(但是追加的内容实际上是保存着的)。
我们在左边按ctrl q
继续,可以看到之前暂停监控期间追加的东西又一下子出现了。
最后按ctrl c
退出。
注:如果不是追加而是直接覆写会报错
一些特殊情况:
如果我们用vim在这个文件末尾追加内容,然后保存退出。
左边监控的内容不会增加:这是因为Linux里面所有硬盘分区的文件都会分配一个编号,我们把这个编号叫做index,即索引节点号。可以用ls -i
命令直接看到这个节点号,在跟踪时是根据这个索引号去跟踪的。当我们用vim修改后这个索引号就变了,所以可以认为这个文件本质上变成了另外一个文件。
3.3 软链接
软连接
ln
就是link的简写,很显然就是要创建一个链接,链接到某个其他文件或者目录上面。所以我们一般用ln
来创建一个软链接
软链接
软链接跟Windows里边的快捷方式非常的类似。如果说我们要为一个文件或者一个目录创建一个软链接的话,那就相当于另外一个地方有一个单独的文件,这个文件链接到这个原始文件上的。链接文件有自己的数据块,它保存的主要就是链接的那个文件或目录的路。这样的话,通过当前的快捷方式,这个链接就可以跳转到我们真正要访问的那个文件上。这其实就有点像指针,当前我们创建的链接就相当于是一个指针,它指向另外一个内存空间对应的变量,而自己也可以看成一个单独的特殊的变量。
linux中的软链接案例
在根目录下的bin目录是一个快捷方式,它链接到的是user下边的bin目录。同样,sbin目录也是一个软链接,它链接到的是user下边的sbin目录。
ln
基本语法:
ln -s [原文件或目录] [软链接名]
软链接还有另外一个名字,符号链接。因为本质上来讲,我们是为原始的文件创建了一个链接到它的符号。在使用的过程中,一般就是要ln
后边加一个固定的选项,那就是-s
。s就是soft的第一个字母,ln -s
就是创建一个软链接的标准语法,后面就是我们的源文件或者目录的名称、创建的软连接的名称。
示例: 链接一个文件
我们想在用户xzz的主目录下创建一个链接,链接到root主目录下的info文件。
在用户xzz的主目录下通过命令ln -s /root/info Myinfo
创建链接。创建之后i我们看到它的颜色跟前面普通文件以及目录的颜色都完全不一样,我们用ls -l
看一下,前面是l
开头,表示当前这是一个链接文件。
我们使用less打开文件查看,可以发现内容正确。
现在我们通过Myinfo向里面末尾插入一个666
然后再root根目录下查看,可以发现成功进行了修改。
示例: 链接一个目录
我们在root根目录下创建一个folder
目录,里面再创建一个file
文件。
我们在用户xzz的主目录下创建一个链接,链接到root主目录下的floder文件夹,这个链接名字叫做myFolder
。可以看到,该链接下有文件fold
我们进入这个软链接下,使用pwd
查看当前file
文件的目录,可以看到,显示的就是当前的目录,而不是file
文件实际的目录。
如果想显示实际的路径,则使用pwd -P
接着,我们在root根目录下使用cd -P命令转到这个软链接所在目录。可以看到会转到这个软链接指向的目录实际所在目录。
示例: 删除软链接目录
使用命令rm -rf 链接名
删除链接目录。可以看到删除之后软链接没了,而原始的目录还在。
如果rm -rf 链接名/
删除链接目录,则会把软链接对应的真实目录下内容删掉。这里可以看到虽然原始目录folder还在,但是里面的文件file已经没了。
示例: 删除原始目录,不删除软链接文件,然后使用软连接文件去访问原始目录。
可以发现提示不存在这个文件夹。
硬链接
基本语法:
ln [原文件或目录] [软链接名]
硬链接的定义: 文件有一个非常重要的信息叫做inode,保存了文件对应的一些元信息(meta data),如文件的类型、文件的权限、当前的链接数、创建时间等等。这里边有一个非常关键的信息就是这个文件的唯一编号,即索引节点号。Linux允许不同的文件名称指向同一个inode节点,这样的话就有了一种用法,即创建一个新的硬链接去链接到具体存放数据的那一块区域。这样的话我们可以直接创建一个指向inode的相同的一个文件名,这对于之前的这个文件没有任何的影响,只是纯粹多了一个新的链接而已,这种链接方式就叫做硬链接。
硬链接的特点: 比如说有两个硬链接a
和b
丢链接到同一个文件,删除a后对b没影响,因为a和b是完全平等的。而对于软链接,如果删除了原始文件或目录,就无法通过软链接再去访问原始文件了。
当前文件的链接数:
指的并不是软链接的数量,因为软链接可以认为就是一个单独的链接文件。真正指的是它的硬链接的数量,硬链接相当于都是完全平等的,你删掉一个那另外一个还可以直接访问。在实际使用的时候,硬链接用的比较少,因为这种方式跟文件的inode相关,只能创建一个文件的硬链接,而不能针对目录去创建硬链接。
3.4 查看历史命令
history
功能描述: 查看历史输入的命令
示例: 通过history查看所以已经执行过的历史命令
通过history 10
查看最近10条使用的指令
通过!345
查看第345条指令
使用history -c
删除历史命令