01-linux基础命令
一、linux
命令概述
命令 选项 参数
- 命令 :就是命令名;
- 选项:一般以
-
开头 比如:-a -p -r 等扩展命令的功能; - 参数:描述命令的目标,如我们要打开一个文件的话,参数就是要打开的文件名;
- 可以只有命令,没有选项和参数,选项和参数只是辅助功能,按需求加上。
二、linux
常用工具命令
1.查看帮助信息
1.1 --help
要查询的命令 --help
- 如查看 ls 命令的功能即选项等信息:
ls --help
- 部分结果
edu@edu:~$ ls --help
用法:ls [选项]... [文件]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.
必选参数对长短选项同时适用。
-a, --all 不隐藏任何以. 开始的项目
-A, --almost-all 列出除. 及.. 以外的任何项目
--author 与-l 同时使用时列出每个文件的作者
-b, --escape 以八进制溢出序列表示不可打印的字符
--block-size=SIZE scale sizes by SIZE before printing them; e.g.,
'--block-size=M' prints sizes in units of
1,048,576 bytes; see SIZE format below
......
1.2 man
man 是以章节的方式查看命令、库函数、系统调用的帮助信息,章节号 1 2 3 分别代表命令、系统调用、库函数。
man 1 ls
man 2 open
man 3 strcpy
如果省略章节号,默认为 1 ,查看系统命令的介绍。
2. tap 自动补全
键盘上按下 tap 键可以自动补全:
- 可以对命令,文件名等就行补全;
- 如果输入的内容只匹配到一个以输入内容开头的命令、文件名等,它会直接自动补全;
- 如果匹配到多个,不会自动补全,需要按两下 tap 列出所有匹配的对象;如
edu@edu:~/work$ ls
a1.txt a2.txt stage1_study_c // 当前目录有两个a开头的文件
edu@edu:~/work$ cat a1.txt // 输入a1按下tap可以自动补全
edu@edu:~/work$ cat a // 输入a,因为识别到多个a开头的,不会自动补全
a1.txt a2.txt // 按两下tap会列出识别到的所有
edu@edu:~/work$ cat a2.txt
3.history
用于查看历史命令,输入 history 会显示当前终端输入的历史命令,也可以使用键盘上下键在历史命令间来回切换。
edu@edu:~/work$ history
768 gcc test.c -D BIG_TO_SMALL
769 ./a.out
770 gcc test.c
771 ./a.out
772 gcc test.c -D BIG_TO_SMALL=1
......
4.重定向
4.1 >
edu@edu:~/work$ echo "hello world"
hello world
edu@edu:~/work$ ls
stage1_study_c
edu@edu:~/work$ echo "hello world" > a.txt
edu@edu:~/work$ ls
a.txt stage1_study_c
edu@edu:~/work$ cat a.txt
hello world
edu@edu:~/work$ echo "hello friend" > a.txt
edu@edu:~/work$ cat a.txt
hello friend
- 说明:
- echo 默认情况下将内容输出到终端;
>
重定向,将内容输出到指定位置,如文件,如果文件不存在,会创建文件再输入;>
不会往文件末尾添加,而是将文件内容删除了再写入;- cat 是查看文件内容的命令,会将文件内容输出到终端。
4.2 >>
edu@edu:~/work$ echo "hello world" >> a.txt
edu@edu:~/work$ cat a.txt
hello friend
hello world
- 说明:
>>
不会删除文件原本的内容,而是在文件末尾追加。
5.管道
管道分为两部分:写端和读端,我们一般将管道左边视为读端,右边视为写端。
edu@edu:~/work$ ps -A | grep ssh
951 ? 00:00:00 sshd
6069 ? 00:00:00 sshd
6079 ? 00:00:00 sshd
6130 ? 00:00:00 sshd
6172 ? 00:00:00 sshd
- 说明:
pa -A
命令用于查看当前所有进程信息;- grep 是查找命令,上面的演示是将当前运行的进程列表写入到管道,然后 grep 从中查找叫 ssh 的进程,并输出到终端;
- 管道命令一般用于在管道左侧进行数据的查找输出,然后在右侧对读取的数据就行处理。
三、文件操作相关的命令
1.ls 显示目录信息
ls 命令默认查看当前目录下有哪些文件和文件夹。
edu@edu:~/work$ ls
a.txt stage1_study_c
ls 还包含很多选项,常用的有 -a -l -h:
- -a 用于显示指定目录所有文件,包括隐藏文件(默认不显示);
- -l 以列表的形式显示,能显示文件类型,权限,大小等详细信息;
- -h 是将文件大小以更清晰的内存单位显示,默认是字节为单位显示;
- 当包含多种选项时,选项的顺序随意,也可以连在一起写,即只要一个 -;
- ls 还可以指定目录显示。
- 命令演示
edu@edu:~/work$ ls
a.txt stage1_study_c
edu@edu:~/work$ ls -a
. .. a.txt stage1_study_c .vscode
edu@edu:~/work$ ls -a -l
总用量 20
drwxrwxr-x 4 edu edu 4096 12月 26 14:25 .
drwxr-xr-x 23 edu edu 4096 12月 26 14:14 ..
-rw-rw-r-- 1 edu edu 25 12月 26 14:30 a.txt
drwxrwxr-x 4 edu edu 4096 10月 30 17:46 stage1_study_c
drwxrwxr-x 2 edu edu 4096 10月 14 10:41 .vscode
edu@edu:~/work$ ls -a -l -h
总用量 20K
drwxrwxr-x 4 edu edu 4.0K 12月 26 14:25 .
drwxr-xr-x 23 edu edu 4.0K 12月 26 14:14 ..
-rw-rw-r-- 1 edu edu 25 12月 26 14:30 a.txt
drwxrwxr-x 4 edu edu 4.0K 10月 30 17:46 stage1_study_c
drwxrwxr-x 2 edu edu 4.0K 10月 14 10:41 .vscode
edu@edu:~/work$ ls -alh
总用量 20K
drwxrwxr-x 4 edu edu 4.0K 12月 26 14:25 .
drwxr-xr-x 23 edu edu 4.0K 12月 26 14:14 ..
-rw-rw-r-- 1 edu edu 25 12月 26 14:30 a.txt
drwxrwxr-x 4 edu edu 4.0K 10月 30 17:46 stage1_study_c
drwxrwxr-x 2 edu edu 4.0K 10月 14 10:41 .vscode
edu@edu:~/work$ ls /etc/
acpi cron.monthly group- ld.so.conf network rc4.d sudoers
adduser.conf crontab grub.d ......
2.tree 树状显示目录信息
上面的 ls 命令只能显示当前目录里面的文件和目录,没法显示多级,tree 可以实现:
edu@edu:~/work$ clear
edu@edu:~/work$ tree
.
├── a.txt
└── stage1_study_c
├── 00_func.c
├── 00_func.i
├── 00_func.o
├── 00-the_first_code.c
......
- 说明:
- clear 用于全屏,当终端内容太多了,通过该命令全屏;
- 默认 ubuntu 不支持 tree 需要安装,通过命令
sudo apt-get update
先更新,再通过命令sudo apt-get install tree
安装tree。
3.cd 切换目录
切换到指定目录,常用的几种切换目录的方式:
cd ./目录 // 以相对路径切换到指定目录,./可以省略
cd 目录 // 以相对路径切换到指定目录
cd /目录 // 以绝对路径切换到指定目录
cd .. // 返回上一级
cd ~ // 进入家目录
cd // 进入家目录
cd - //进入上一次目录
- 命令演示
edu@edu:~/work$ cd ./stage1_study_c/ // 相对路径
edu@edu:~/work/stage1_study_c$ cd /home/edu/work/stage1_study_c/ // 绝对路径
edu@edu:~/work/stage1_study_c$ cd .. // 上一级目录
edu@edu:~/work$ cd ~ // 家目录
edu@edu:~$ cd // 家目录
edu@edu:~$ cd work/
edu@edu:~/work$ cd - // 上一次进入的目录
/home/edu
- 说明:相对路径,从当前路径找到指定路径;绝对路径,从根目录找到指定路径。
4.pwd 显示当前目录
以绝对路径的方式,显示当前工作路径。
edu@edu:~/work$ pwd
/home/edu/work
5.cat 查看文件内容
查看文件内容,并将内容输出到终端。
- 命令演示
edu@edu:~/study$ cat a.txt
hello world!
6.rm 删除
默认情况下用于删除指定文件:rm 文件名...
。
- 命令演示
edu@edu:~/study$ ls
a.txt b.txt c.txt test
edu@edu:~/study$ rm a.txt // 删除a.txt文件
edu@edu:~/study$ ls
b.txt c.txt test
edu@edu:~/study$ rm *.txt // 删除以.txt结尾的文件
edu@edu:~/study$ ls
test
edu@edu:~/study$ rm test/ // 删除文件夹失败
rm: 无法删除'test/': 是一个目录
rm
不加选项,只能用于删除普通文件,因为文件夹里面可能还有其它文件和文件夹,因此不能直接删除,需要加-r
选项,递归删除:
edu@edu:~/study$ rm -r test/
edu@edu:~/study$ ls
rm
另外一个选项-f
强制删除,如果某些文件没有执行权限,删除时会询问,一个个同意删除比较麻烦,可以直接强制删除:
edu@edu:~/study$ ls
a.txt b.txt c.txt test
edu@edu:~/study$ rm -r -f * // 强制递归删除所有文件和文件夹
edu@edu:~/study$ ls
edu@edu:~/study$
7.cp 拷贝
7.1将文件拷贝到文件夹
cp 源文件 目的目录(目录可以理解为文件夹的意思)
- 命令演示
edu@edu:~/study$ tree
.
├── a.txt
├── b.txt
├── c.txt
└── test
1 directory, 3 files
edu@edu:~/study$ cp a.txt test/
edu@edu:~/study$ tree
.
├── a.txt
├── b.txt
├── c.txt
└── test
└── a.txt
1 directory, 4 files
7.2将文件夹拷贝到文件夹
cp 源目录 目的目录 -r
- 命令演示
edu@edu:~/study$ tree
.
├── a.txt
├── b.txt
├── c.txt
├── test
│ └── a.txt
└── test2
2 directories, 4 files
edu@edu:~/study$ cp test test2 -r
edu@edu:~/study$ tree
.
├── a.txt
├── b.txt
├── c.txt
├── test
│ └── a.txt
└── test2
└── test
└── a.txt
3 directories, 5 files
- 说明:这里涉及到对文件夹的拷贝的时候,需要递归拷贝,因此加
-r
。
7.3备份文件
cp 源文件 备份文件
cp 源目录 备份目录
- 命令演示:文件备份
edu@edu:~/study$ ls
a.txt b.txt c.txt test test2
edu@edu:~/study$ cat a.txt
hello world
edu@edu:~/study$ cat b.txt
edu@edu:~/study$ cp a.txt b.txt
edu@edu:~/study$ cat b.txt
hello world
edu@edu:~/study$ cp a.txt d.txt // 备份到已存在的文件里去
edu@edu:~/study$ ls
a.txt b.txt c.txt d.txt test test2 test3 // 备份到不存在的文件里去
edu@edu:~/study$ cat d.txt
hello world
- 会将源文件的内容拷贝到指定文件里去;
- 也可将源文件的内容拷贝到不存在的文件里,备份的时候会创建指定文件。
- 命令演示
edu@edu:~/study$ cp test test3 -r
edu@edu:~/study$ ls
a.txt b.txt c.txt test test2 test3
- 如果目的文件不存在,就是给源目录备份;
- 如果目的目录存在,就是将源目录拷贝到目的目录下。
8.剪切
8.1移动
将源文件或目录移动到目的目录。
mv 源文件/目录 目的目录 // 这里目录操作也不需要加 -r
- 命令演示
edu@edu:~/study$ ls
a.txt b.txt c.txt test test2
edu@edu:~/study$ mv c.txt test
edu@edu:~/study$ mv test2 test
edu@edu:~/study$ tree
.
├── a.txt
├── b.txt
└── test
├── c.txt
└── test2
2 directories, 3 files
8.2文件重命名
mv 源文件名 新文件名
- 命令演示
edu@edu:~/study$ ls
a.txt b.txt test
edu@edu:~/study$ mv a.txt d.txt // 重命名新文件名不存在
edu@edu:~/study$ ls
b.txt d.txt test
edu@edu:~/study$ cat d.txt
hello a.txt
edu@edu:~/study$ cat b.txt
hello b.txt
edu@edu:~/study$ mv d.txt b.txt // 重命名新文件名存在
edu@edu:~/study$ ls
b.txt test
edu@edu:~/study$ cat b.txt
hello a.txt
- 说明:
- 当重命名新文件名不存在,就是单纯实现了重命名效果;
- 当重命名新文件名存在,则是把新文件名以前的文件删除,再定义一个同名文件,只不过里面的内容是源文件的内容。
8.3重命名文件夹
mv 源目录 新目录
- 命令演示
edu@edu:~/study$ ls
b.txt test
edu@edu:~/study$ mv test test_plus
edu@edu:~/study$ ls
b.txt test_plus
- 当新目录名存在,是实现的剪切功能;
- 当新目录名不存在,实现的重命名功能。
9.创建文件和目录
9.1 touch 创建文件
touch 文件1 文件2...
- 命令演示
edu@edu:~/study$ ls
edu@edu:~/study$ touch a.txt b.txt
edu@edu:~/study$ ls
a.txt b.txt
- 说明:
- 未指定目录,默认都是在当前目录创建的;
- 可以一次创建一个或多个文件,文件间用空格隔开。
9.2 mkdir 创建目录
mkdir 目录1 目录2...
- 命令演示
edu@edu:~/study$ ls
a.txt b.txt
edu@edu:~/study$ mkdir test
edu@edu:~/study$ ls
a.txt b.txt test
edu@edu:~/study$ mkdir a/b/c
mkdir: 无法创建目录"a/b/c": 没有那个文件或目录
edu@edu:~/study$ mkdir a/b/c -p
edu@edu:~/study$ tree
.
├── a
│ └── b
│ └── c
├── a.txt
├── b.txt
└── test
4 directories, 2 files
- 说明:
- 可以一次创建一个或多个同级目录,目录间用空格隔开;
- 如果一次创建多级目录,外层目录不存在是会创建失败的,需要加
-p
创建。
10.查找命令
10.1 find 查找
find 路径 -name 文件名
- 命令演示
edu@edu:~/study$ find ./* -name a.txt // 从当前目录查找
./a.txt
./test/a.txt
edu@edu:~/study$ sudo find /* -name a.txt // 从绝对路径查找
[sudo] edu 的密码:
/home/edu/study/a.txt
/home/edu/study/test/a.txt
/home/edu/work/stage1_study_c/day10_test/a.txt
/home/edu/work/a.txt
find: `/run/user/1000/gvfs': 权限不够
- 注意:从绝对路径查找时需要加
sudo
获取管理员权限。
10.2 grep 查找
10.2.1终端输入内容中查找
grep 要查找的内容
- 命令演示
edu@edu:~/study$ grep hello
hello world
hello world
^C
- 说明:
- 被查找到的内容会高亮显示;
- 键盘按下
ctrl + c
退出查找。
10.2.2从指定的文件中查找
grep 查找信息 指定文件或路径 -n(显示内容所在行号)
- 命令演示
edu@edu:~/study$ grep bb a.txt -n // 从a.txt查找
1:dgywbbcw
2:cucbbxbvhqv
4:bbqvxvwqxwqx
edu@edu:~/study$ grep bb *.txt -n // 从当前路径使用.txt文件中查找
a.txt:1:dgywbbcw
a.txt:2:cucbbxbvhqv
a.txt:4:bbqvxvwqxwqx
b.txt:1:fbecbb
b.txt:3:xbwhb hb bb
b.txt:4:swcwqce4bbc865
- 说明:
- 找到以后会显示文件名及行号,会显示整行,将要找的内容高亮显示;
- grep 还可与管道结合使用,前面已经介绍过,这里不做演示。
11. ln 链接文件
11.1软链接
ln 源文件名 链接文件名 -s
- 命令演示
edu@edu:~/study$ ls
a.txt
edu@edu:~/study$ ln a.txt a_s.txt -s // 创建软连接
edu@edu:~/study$ ls
a_s.txt a.txt
edu@edu:~/study$ echo "hello world" >> a.txt
edu@edu:~/study$ cat a.txt
hello world
edu@edu:~/study$ cat a_s.txt
hello world
edu@edu:~/study$ ls -lh
lrwxrwxrwx 1 edu edu 5 12月 26 16:39 a_s.txt -> a.txt // 软链接
-rw-rw-r-- 1 edu edu 12 12月 26 16:39 a.txt // 源文件
edu@edu:~/study$ rm a.txt
edu@edu:~/study$ cat a_s.txt
cat: a_s.txt: 没有那个文件或目录
- 说明:
- 软链接可以理解为就是一个快捷方式;
- 通过文件名和软链接都能查看文件信息;
- 源文件和软链接间数据是同步的;
- 删除软链接,对源文件没有影响,但是删除源文件,软链接就没用了。
11.2硬链接
ln 源文件名 链接问名
- 命令演示
edu@edu:~/study$ ls
a.txt
edu@edu:~/study$ ln a.txt a // 创建硬链接
edu@edu:~/study$ ls -lh
总用量 0
-rw-rw-r-- 2 edu edu 0 12月 26 16:47 a // 硬链接
-rw-rw-r-- 2 edu edu 0 12月 26 16:47 a.txt // 源文件
edu@edu:~/study$ echo "hello world!" >> a
edu@edu:~/study$ cat a.txt
hello world!
edu@edu:~/study$ cat a
hello world!
edu@edu:~/study$ rm a.txt
edu@edu:~/study$ ls
a
edu@edu:~/study$ cat a
hello world!
- 说明:
- 源文件和硬链接间数据是同步的,通过文件名和硬链接都能查看文件信息;
- 删除硬链接,对源文件没有影响,同样删除源文件,硬链接也没有影响,它们是相互独立又数据同步的存在。
12. tar 压缩与解压
tar 是一个打包的命令,需要加上选项才能完成压缩或解压的功能。打包可以理解为我们将一堆衣服放进包装袋打包,压缩是将包装里的空气抽空,把体积压缩到尽可能小。
12.1 gzip 格式
12.1.1 gzip 压缩
tar zcvf 压缩包包名 文件 1 文件 2 ...
-
说明:
- z:代表是 gzip 格式的压缩方式;
- c:代表创建压缩文件,即执行压缩功能;
- v:代表显示压缩进度;
- f:代表设置压缩包包名;
- 上面选项 zcv 可以调换顺序,但 f 必须在最后。
-
命令演示
edu@edu:~/study$ ls
a.txt b.txt c.txt
edu@edu:~/study$ tar zcvf myFile.tar.gz *.txt
a.txt
b.txt
c.txt // 压缩进度
edu@edu:~/study$ ls
a.txt b.txt c.txt myFile.tar.gz
- 说明:对于
linux
系统而言,压缩包名可以不加后缀,但这里加后缀myFile.tar.gz
主要是告诉用户,这是通过tar
压缩的gzip
格式的压缩包。
12.1.2 gzip 解压
tar zxvf 压缩包的名字
- 命令演示
edu@edu:~/study$ ls
myFile.tar.gz
edu@edu:~/study$ tar zxvf myFile.tar.gz // 解压缩
a.txt
b.txt
c.txt
edu@edu:~/study$ ls
a.txt b.txt c.txt myFile.tar.gz
- 说明:
- x:代表执行解压缩动作,其它同压缩;
- 如果不指定解压缩到哪个目录,默认解压到当前目录。
- 解压到指定目录见下面操作:
tar zxvf 压缩包的名字 -C 指定的目录
- 命令演示
edu@edu:~/study$ mkdir test // 创建一个test目录
edu@edu:~/study$ tree
.
├── a.txt
├── b.txt
├── c.txt
├── myFile.tar.gz
└── test
1 directory, 4 files
edu@edu:~/study$ tar zxvf myFile.tar.gz -C test // 解压到test目录
a.txt
b.txt
c.txt
edu@edu:~/study$ tree
.
├── a.txt
├── b.txt
├── c.txt
├── myFile.tar.gz
└── test
├── a.txt
├── b.txt
└── c.txt
1 directory, 7 files
- 说明:-C 为大写。
12.2 bz2 格式
12.2.1 bz2 压缩
tar jcvf 压缩包包名 文件 1 文件 2 ...
- 命令演示
edu@edu:~/study$ ls
a.txt b.txt c.txt
edu@edu:~/study$ tar jcvf myFile.tar.bz2 *.txt // bz2压缩
a.txt
b.txt
c.txt
edu@edu:~/study$ ls
a.txt b.txt c.txt myFile.tar.bz2
- 说明:和 gzip 压缩步骤完全一样,这是 z 换成了 j ,还有压缩包后缀换了。
12.2.2 bz2解压
tar jxvf 压缩包包名
- 命令演示
edu@edu:~/study$ ls
myFile.tar.bz2
edu@edu:~/study$ tar jxvf myFile.tar.bz2 // 解压缩
a.txt
b.txt
c.txt
edu@edu:~/study$ ls
a.txt b.txt c.txt myFile.tar.bz2
- 也可以解压到指定目录,和 gzip 差不多,不做过多演示。
还有一种暴力解压缩,就是无视压缩格式,直接解压。
tar xvf 压缩包名
- 命令演示
edu@edu:~/study$ ls
myFile.tar.bz2
edu@edu:~/study$ tar xvf myFile.tar.bz2
a.txt
b.txt
c.txt
edu@edu:~/study$ ls
a.txt b.txt c.txt myFile.tar.bz2
四、编译器
1.gedit 编译器
gedit
是 linux
下文本编辑器。
gedit 文件名 // 就可打开文件进行编译
2.vim 编译器
2.1安装 vim 编译器
sudo apt-get update
sudo apt-get install vim
sudo apt-get install ctags
2.2 vim 的三种模式
- 编辑模式:修改代码,复制、粘贴、剪贴、查找,编辑模式,左下角什么也没有;
- 插入模式:用户写代码,插入模式,左下角显示 --插入–;
- 命令行模式:保存退出,左下角显示 :。
- 三种模式的切换:
- vim 打开一个已经存在的文件,默认进入编辑模式;
- vim 打开一个不存在的文件,先创建文件,默认进入插入模式;
- 编辑模式到插入模式,按键盘的 i 或 o,i 代表在当前行插入,o 是在下一行插入;插入模式进入编辑模式按esc;
- 编辑模式到命令行模式,按
shift + :
,命令行模式进入编辑模式按esc; - 插入模式和命令行模式不能直接切换,要回到编辑模式再切换。
2.3编辑模式下的常用命令
- u 撤消前面多次修改。
ctl + r
反撤销 - [n]x 删除光标后 n 个字符。3x 表示删除光标后 3 个字符
- [n]X 删除光标前 n 个字符。3X 表示删除光标前 3 个字符
- [n]dd 删除从当前行开始的 n 行
- [n]yy 复制从当前行开始的 n 行
- p 粘贴
- dw 删除一个单词
- yw 复制一个单词
- . 执行上一次操作
shift + zz
保存退出当前文件- [n]G:将光标定位到第 n 行开始处。5G 将光标移动第 5 行开始处
- G:将光标定位到文件结束处
- gg:将光标定位到文件开始处
- /字符串:从光标开始处向文件尾查找字符串
- n:同一方向重复上一次查找命令
- N:反方向重复上一次查找命令
:nohls
取消高亮:set hls
设置高亮
2.4命令行模式常用命令
- q 退出 w 保存 !强制执行
wq!
强制保存并退出w!
强制保存不退出w 文件名
,另存- 打开多文件:
vim a.c b.c c.c
- 切换某个文件:
open c.c
切换到 c.c 中 !linux 命令
,等价在终端上运行