Linux 最基础的命令
Linux 作为一个深受广大社区欢迎的操作系统,其功能的强大以及使用的便利使得它成为了我们学习操作系统的一个很好的板子,
首先我们要知道,操作系统的根本要义是使计算机更好用,因此我们学习它是为了方便我们使用计算机,让我们对计算机有更加深入的理解。
在讲解命令之前,先交给你们一个招数,叫做 ctrl + c,这个组合键可以帮助我们跳出某个正在执行的进程,比如说你执行某个命令,结果发现他无休止的执行下去了,此时你就得
通过这个组合键来停止该命令的执行
下面我们先学习一下 Linux 的一些最基础的指令,学会这些基本就可以上手 Linux 了:
ls 指令
该指令用于列出当前目录下的所有子目录与文件,列出文件名以及其他信息
ls 指令的选项有很多,下面只介绍平时用的很多的命令选项:
1、-a
该选项用于列出目录下的所有文件,包括以.开头的隐含文件
比如说,当我们在什么信息都没有的目录下用 ls 指令查看当前目录下的文件信息,会发现没有任何相应,但若我们加上-a选项,会看到:
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ ls -a
. ..
你会看到,一个新的目录下面隐含了两个文件,一个叫’.’,另一个叫’..’,这两个文件分别表示当前目录以及上级目录,我会在cd指令中重点讲解这两个
文件,你现在只需要知道这两个文件是隐含文件,只有通过-a选项才可以查看到
当然,隐含文件还有很多类型,比如说.config配置文件,还有许多环境变量的文件,这些文件一般都是通过隐含文件的形式来存放的
2、-l
该选项用于显示文件的详细信息,下面我会创建两个文件以及一个文本文件,创建好后通过 ls 指令查看效果如下:
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ ls
dir1 dir2 test.txt
可以看到,只显示了文件名,但我们若想要看到每个文件的具体信息,就可以通过-l选项查看:
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ ls -l (等价于 ll 命令,ll 是对 ls -l 指令的缩写)
total 8
drwxr-xr-x 2 ljx ljx 4096 Jul 12 21:58 dir1
drwxr-xr-x 2 ljx ljx 4096 Jul 12 21:58 dir2
-rw-r--r-- 1 ljx ljx 0 Jul 12 21:59 test.txt
其中 dir1 和 dir2 是目录文件,而 test.txt 是普通文件(文本文件)
我们可以观察到两个目录文件最前面有一个d标志,这个表示该文件是一个目录文件(directory),但 test.txt 文件前面显示
的是一个-,表示该文件是普通文件,除了 d 和 - 其实还有别的标志,目前我们只需要知道这两个就够了
3、-d
该指令可以让目录按照文件的方式显示,ls 后面若跟的是一个目录文件,则会显示该目录下的文件信息,但有时候我们只是想看看这个目录文件
的详细信息,因此我们需要通过-d选项让目录按照文件的方式显示,与此同时再配合-l指令就可以显示该目录文件的详细信息了
# 直接使用会显示dir1目录下面的文件信息
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ ls dir1
test_dir1.txt
# 使用-d选项就可以看到 dir1的信息
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ ls -d dir1
dir1
# 通过追加-l选项就可以看到 dir1 的详细信息了(-d -l 在显示 dir1 的信息(-d)的同时显示它的详细信息(-l))
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ ls -d -l dir1
drwxr-xr-x 2 ljx ljx 4096 Jul 12 22:08 dir1
# 可以将-d -l 选项综合写成 -dl,效果相同
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ ls -dl dir1
drwxr-xr-x 2 ljx ljx 4096 Jul 12 22:08 dir1
4、-F
该指令会在每个文件名后附上一个字符以说明该文件的类型,“”表示可执行的普通文件;“/”表示目录;“@”表
示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)。这里只需要知道“”表示可执行的普通文件;“/”表示目录,
其他的后面会讲到
使用示例:
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ ls -F
dir1/ dir2/ hello.cc hello.o* test.txt
其中 dir1 和 dir2 是目录文件,因此他们的后面会显示/,而 hello.o 是可执行程序,因此后面会显示*
hello.o 文件是通过 g++ 编译出来的可执行程序,hello.cc的信息如下:
#include <iostream>
using namespace std;
int main()
{
cout << "hello world" << endl;
return 0;
}
通过 g++ 编译后得到 hello.o 可执行程序,运行可得到输出:
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ g++ -o hello.o hello.cc
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ ./hello.o
hello world
这里我们会发现运行 hello.o 文件需要在文件名前面加上”./“,上面我们讲到”.”是一个目录,表示的是当前目录,因此这里
我们可以发现这两个隐藏文件的作用:指定执行的文件的路径。若我们直接输入hello.o,那么系统是不知道这个可执行程序在哪里的,
但我们在该文件前面加上”./“,系统就知道了需要执行的是当前目录下的 hello.o ,所以我们当然可以进入到当前目录的下一级目录,然后
使用../hello.o 去执行这个程序:
# cd dir1 表示跳转到当前目录下的 dir1 目录
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ cd dir1
# 此时该可执行程序位于上一级目录,通过../标识路径
╭─ljx@VM-16-15-debian ~/linux_review/lesson1/dir1
╰─➤ ../hello.o
hello world
pwd 指令
该指令很简单,用于显示用户当前所在的绝对路径:
╭─ljx@VM-16-15-debian ~/linux_review/lesson1/dir1
╰─➤ pwd
/home/ljx/linux_review/lesson1/dir1
cd 指令
该指令用于路径跳转
Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件:

其中最上面的是根目录,根目录是指向自己的,因此通过 cd 命令跳转到根目录的上层仍然是根目录,下面是 cd 命令的使用示例:
# 显示当前所在路径
╭─ljx@VM-16-15-debian ~/linux_review/lesson1/dir1
╰─➤ pwd
/home/ljx/linux_review/lesson1/dir1
# 通过 .. 跳转到上一层目录
╭─ljx@VM-16-15-debian ~/linux_review/lesson1/dir1
╰─➤ cd ..
# 检测是否跳转到了上一层(相对跳转)
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ pwd
/home/ljx/linux_review/lesson1
# 直接跳转到根目录(绝对跳转)
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ cd /
# 检测是否跳转到了根目录
╭─ljx@VM-16-15-debian /
╰─➤ pwd
/
cd -
该指令用于跳转到上一次所在的目录:
# 显示当前所在路径
╭─ljx@VM-16-15-debian ~/linux_review
╰─➤ pwd
/home/ljx/linux_review
# 跳转到根目录
╭─ljx@VM-16-15-debian ~/linux_review
╰─➤ cd /
# 再通过 cd - 命令跳转到上一次所在路径
╭─ljx@VM-16-15-debian /
╰─➤ cd -
~/linux_review
# 查看是否回到了上一次所在路径
╭─ljx@VM-16-15-debian ~/linux_review
╰─➤ pwd
/home/ljx/linux_review
cd ~
该指令用于跳转到自己所对应的家目录:
在 Linux 中,root 用户(超级管理员)的家目录在 /root 下,而其他普通用户的家目录在 /home/xxx 下面,因此
我们通过 cd ~ 指令就可以直接跳转到我们当前用户身份所对应的家目录下面了
╭─ljx@VM-16-15-debian ~/linux_review
╰─➤ cd ~
╭─ljx@VM-16-15-debian ~
╰─➤ pwd
/home/ljx
touch
该指令用于创建文件(非目录),比如说我想在当前目录下面穿件一个 test.txt 文本文件:
╭─ljx@VM-16-15-debian ~/linux_review/lesson1/dir2
╰─➤ touch test.cc
# 可以看到文件创建成功了
╭─ljx@VM-16-15-debian ~/linux_review/lesson1/dir2
╰─➤ ll
total 0
-rw-r--r-- 1 ljx ljx 0 Jul 12 22:58 test.cc
mkdir
该指令专门用于创建目录,通过上面可知,touch 命令是无法创建目录的,而我们需要通过这个命令创建目录文件:
普通的文件目录创建就不过多赘述了,下面我们讲一下 -p 选项,该选项可以用于递归创建目录:
# 同时创建 dir3 以及在下面递归创建 dir3_1 以及 dir3_1 下面递归创建 dir3_2
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ mkdir -p dir3/dir3_1/dir3_2
# tree 指令用于将目录按照树状图的形式显示出来 1 ↵
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ tree dir3
dir3
└── dir3_1
└── dir3_2
3 directories, 0 files
rmdir 及 rm 指令
rmdir
该指令只能用来删除目录文件,而 rm 指令包含了 rmdir 的所有功能,因此日后使用指令一般都用不到rmdir,下面详细介绍 rm 指令:
rm
rm命令可以同时删除文件或目录
语法:rm [-f-i-r-v][dirName/dir]
适用对象:所有使用者
功能:删除文件或目录
常用选项:
- -f 即使文件属性为只读(即写保护),亦直接删除
- -i 删除前逐一询问确认
- -r 删除目录及其下所有文件
下面介绍一下 -r 选项以及 -f 选项:
-r
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ rm dir1 1 ↵
rm: cannot remove 'dir1': Is a directory 1 ↵
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ rm -r dir1
有些目录文件下面并不是空的,因此需要通过 -r 指令递归删除目录以及目录下的所有文件
-f
在某些时候删除文件时会询问你是否确认删除该文件,加上这个选项后就可以跳过确认直接无脑删除了
这样一来就形成了一套递归删除文件夹的命令格式:
rm -rf [dir_name]
示例:
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ rm -rf dir3
cp
语法:cp [选项] 源文件或目录 目标文件或目录
功能: 复制文件或目录
说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,
则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存
在的目录,则会出现错误信息
常用选项:
- -f 或 –force 强行复制文件或目录, 不论目的文件或目录是否已经存在
- -i 或 –interactive 覆盖文件之前先询问用户
- -r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链
接,则一律视为普通文件处理 - -R 或 –recursive递归处理,将指定目录下的文件及子目录一并处理
同样的选项中 -r 和 -f 最常用,而这两个选项的用法和 rm 中的 -r 和 -f 相同,下面是使用示例:
复制单个文件到指定目录:
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ tree dir
dir
0 directories, 0 files
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ cp hello.o dir
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ tree dir
dir
└── hello.o
1 directory, 1 file
复制目录文件到指定目录(加上 -r 选项):
# 不加上 -r 选项无法 cp
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ cp dir tmp
cp: -r not specified; omitting directory 'dir'
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ cp -r dir tmp
mv
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命
令,经常用来备份文件或者目录。
语法: mv [选项] 源文件或目录 目标文件或目录
功能:
- 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的
目录中。 - 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它
将所给的源文件或目录重命名为给定的目标文件名。 - 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至
目标目录中。
常用选项:
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖
示例一:移动文件到指定目录下:
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ mv hello.o dir1
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ ls dir1
hello.o
示例二:改变文件名
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ mv hello.cc world.cc
# hello.cc 被改名为 world.cc
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ ls
dir dir1 test.txt world.cc
示例三:移动文件的同时改变文件名
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ ls
dir dir1 test.txt world.cc
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ ls dir1
test.cc
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ mv world.cc dir1/test.cc
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ ls
dir dir1 test.txt
╭─ljx@VM-16-15-debian ~/linux_review/lesson1
╰─➤ ls dir1
test.cc
这是你肯定会有疑问,既然 mv 指令既可以用于移动文件,又可以用于修改文件名,那么它在不同的场合到底发挥着什么功能呢?
其实很简单,首先我们把 mv 的功能理解为移动文件的同时修改文件名,那么我们会发现,若目标是目录文件,就无法修改文件名,就只能将文件移动过去,
但目的若是非目录文件,那么就意味着我们会将该文件移动过去的同时将该文件的文件名也修改了,可以理解为覆盖cp,再抽象一点,你可以理解为 windows 中
将某个文件剪切下来,然后选择另一个文件通过 ctrl + v 覆盖另一个文件为之前剪切的文件
cat
语法:cat [选项][文件]
功能: 查看目标文件的内容
常用选项:
- -b 对非空输出行编号
- -n 对输出的所有行编号
- -s 不输出多行空行
示例如下:
╭─ljx@VM-16-15-debian ~/linux_review/lesson1/dir1
╰─➤ cat -n test.cc
1 #include <iostream>
2 using namespace std;
3
4 int main()
5 {
6 cout << "hello world" << endl;
7 return 0;
8 }
╭─ljx@VM-16-15-debian ~/linux_review/lesson1/dir1
╰─➤ cat -ns test.cc
1 #include <iostream>
2 using namespace std;
3
4 int main()
5 {
6 cout << "hello world" << endl;
7 return 0;
8 }
╭─ljx@VM-16-15-debian ~/linux_review/lesson1/dir1
╰─➤ cat -nb test.cc
1 #include <iostream>
2 using namespace std;
3 int main()
4 {
5 cout << "hello world" << endl;
6 return 0;
7 }