Linux 命令和 Vim 操作

1. Linux 常用命令

Linux 常用包括软件安装,软件删除,服务启动,相关配置,基本的文件操作...

图形化界面可以完成的任务,都可以利用命令完成,甚至于命令可以完成图形化界面无法完成的相关功能。在嵌入式开发中,主要学习的 Linux 相关命令包括文件操作,路径切换,相关文件信息读取。

2. Linux 系统路径问题

2.1 根目录和家目录

Linux 环境中不存在分盘情况,不同 Windows 操作系统可以利用不同的磁盘来管理文件内容,在 Linux 中采用的方式是一个磁盘,文件夹形式内容管理。

在 Linux 中最大的文件是根目录,对应的标识符为 /

家目录,对应的当前用户个人目录,在家目录中执行任何的操作对于操作系统和其他用户无关。对应的简称标识符为 ~,真实路径为 /home/用户名, 例如当前计算机中的家目录真实路径为 /home/qf

2.2 相对路径和绝对路径【了解】

相对路径

  • 定义:以当前工作目录为参照物,去往其他文件夹或文件的【捷径】
  • 生活化案例,我在隔壁办公室,我在实验室,我在前台
  • 在 Linux 中操作相对路径可能使用到两个特定的标记符号
    • . 当前工作目录,目前所在文件夹
    • .. 当前工作目录的上级目录
    • 例如 当前工作目录为 /home/qf/desktop/aaa
      • . 对应路径为 /home/qf/desktop/aaa
      • .. 对应路径为 /home/qf/desktop

绝对路径

  • 定义:以根目录为参照的路径,并且绝对路径具备【唯一性】
  • 生活化案例,河南省郑州市高新区莲花街55号教育产业科技园 D 座千锋教育
  • 在 Linux 中所有以 / 开头的路径都是【绝对路径】

在 Linux 中相对路径和绝对路径的区分关系就是依据路径开头是否为 /

3. Linux 常用命令

3.1 cd change directory

在终端中切换当前工作目录,可以根据【相对路径】和【绝对路径】去往目标文件夹。

tips:在桌面鼠标右键打开终端,默认的工作目录为【家目录】

qf@qf:~$ cd 桌面
qf@qf:~/桌面$ 
	# 可以看到在 $ 之前的路径提示发生改变
	# 在 Ubuntu 中路径提示为完整路径,操作路径在家目录下,使用 ~ 代替 /home/username
	# 如果操作的路径是绝对路径,会提供完整的绝对路径内容 /etc/samba/

qf@qf:~/桌面$ cd 123
	# 切换到当前工作目录桌面下的 123 文件夹
qf@qf:~/桌面/123$ cd ../ABC
	# 从 ~/桌面/123 切换到当前工作目录的上级目录中的 ABC 文件夹
qf@qf:~/桌面/ABC$ cd /etc/samba/tls/
	# 利用绝对路径进行路径切换,需要提供有效绝对路径。
qf@qf:/etc/samba/tls$ cd
	# 单一 cd 命令,可以在任何工作目录回到家目录。
qf@qf:~$ cd - 
	# 可以回到上一次操作的工作目录,从哪儿来回哪儿去。
qf@qf:/etc/samba/tls
3.2 ls 查看操作

查看指定目录下的文件和文件夹情况

qf@qf:~$ ls 
	# examples.desktop  公共的  模板  视频  图片  文档  下载  音乐  桌面
 	# 可以查看当前工作目录下的文件和文件的名称,不同的文件类型有不同的颜色情况。

qf@qf:~$ ls -a
	# 查看当前工作目录下的所有文件和文件夹名称,包括隐藏文件和隐藏文件夹
	# 在 Linux 中,隐藏文件和隐藏文件夹,名称都是以 . 开头

qf@qf:~$ ls -l
	# 详情列表模式查看当前工作目录下的文件和文件夹的信息
	# 主要包括的信息内容有,文件类型,文件权限,文件归属关系,占用硬盘字节数,最后修改时间和文件名称

qf@qf:~$ ls -al
qf@qf:~$ ll
	# 详情列表模式查看当前工作目录下的所有文件和文件夹的信息,包括隐藏文件和隐藏文件夹。

【重点】文件详情内容解释

文件详情内容解释

3.3 touch 和 mkdir

touch 创建普通文件

mkdir 创建文件夹

touch 命令案例

qf@qf:~/桌面/123$ touch 1.txt
	# 在当前工作目录下创建指定名称的文件,1 是文件名 .txt 是文件拓展名/文件类型名/后缀名
	# 在 Linux 中支持未指定文件类型的普通文件,大多数都是可视化文本文件

qf@qf:~/桌面/123$ touch 2.txt 3.txt 5.txt 1.c 2.c 3.c
	# 可以进行批量文件创建,不同的文件名称利用空格隔开

mkdir 命令案例

qf@qf:~/桌面/123$ mkdir a
	# 在当前工作目录下创建目标文件夹 a
qf@qf:~/桌面/123$ mkdir a
mkdir: 无法创建目录"a": 文件已存在
	# 如果对应名称的文件或者文件已经存在,无法利用相同名称创建对应内容
qf@qf:~/桌面/123$ mkdir 1.txt
mkdir: 无法创建目录"1.txt": 文件已存在
qf@qf:~/桌面/123$ mkdir b c d
	# 可以进行批量文件夹创建,不同的文件夹名称利用空格隔开
qf@qf:~/桌面/123$ 
3.4 cp 复制操作

cp copy 复制

cp 操作

  • cp 操作普通文件
qf@qf:~/桌面/123$ cp 1.txt 123.txt
	# 复制 1.txt 内容到 123.txt
	# 当前操作省略的路径内容,默认都是在当前工作目录下完成对应操作
	# 如果提供的对应路径要求,可以在其他文件夹中完成操作

qf@qf:~/桌面/123$ cp 1.txt a
	# 1.txt 为普通文件,a 是在相同工作目录下的一个文件夹
	# 当前操作是将 1.txt 文件复制一份到当前工作目录下的 a 文件夹中

qf@qf:~/桌面/123$ cp 123.txt a/23333.txt
	# 123.txt 为普通文件,a 是在相同工作目录下的一个文件夹 
	# 当前操作是将 123.txt 文件复制一份到当前工作目录下的 a 文件夹中,同时指定目标文件名称
	# 为 23333.txt

qf@qf:~/桌面/123$ cp 123.txt /home/qf/桌面/ABC
	# 123.txt 为普通文件,提供的目标文件夹路径方式为绝对路径方式
	# 将 123.txt 拷贝到目标的绝对路径对应文件夹,要求路径真实有效,同时对应文件有【写入权限】
  • cp 操作文件夹
qf@qf:~/桌面/123$ cp a b
cp: -r not specified; omitting directory 'a'
	# cp 命令要求,如果操作的内容是文件夹内容,必须提供 -r 命令参数
	# 格式 cp -r 源文件夹 目标文件夹
	# 格式 cp -r src_dir dest_dir

qf@qf:~/桌面/123$ cp -r a b
	# a 和 b 都是文件,且存在
	# 当前操作是将 a 文件夹复制一份存储到 b 文件夹中
	# 当前操作省略路径关系,都是在当前工作目录下完成。
qf@qf:~/桌面/123$ cp -r a f
	# a 是一个文件夹存在,f 是一个未存在的内容
	# 当前操作是将 a 文件夹复制一份,到当前工作目录下,目标文件夹名称为 f
3.5 mv 移动操作
mv move 移动
  • mv 操作普通文件
qf@qf:~/桌面/123$ mv 1.txt 2.txt
	# 1.txt 普通文件存在,2.txt 不存在
	# 当前操作是将 1.txt 普通文件,重命名为 2.txt

qf@qf:~/桌面/123$ mv 2.txt a
	# 2.txt 是一个普通文件,a 是一个文件夹
	# 当前操作是将 2.txt 移动到 a 文件夹中

qf@qf:~/桌面/123$ mv a/2.txt .
	# 将当前工作目录下 a 文件夹中的 2.txt 普通文件,移动到当前工作目录

qf@qf:~/桌面/123$ mv 2.txt a/123.txt
	# 2.txt 是一个普通文件,a 是一个文件夹
	# 当前操作是将 2.txt 移动到 a 文件夹中,同时对文件进行重命名操作,修改名称为 123.txt
  • mv 操作文件夹
qf@qf:~/桌面/123$ mv a b
	# a,b 都是文件夹
	# 当前操作是将 a 文件夹移动到 b 文件夹中

qf@qf:~/桌面/123$ mv a q
	# a 是一个文件夹,q 不存在
	# 当前操作是将 a 文件夹重命名为 q 文件夹
3.6 rm 删除操作

【慎用】rm 删除文件或者文件夹不是放入到回收站中,是直接在磁盘抹掉数据,且无法还原!

  • rm 删除操作普通文件
qf@qf:~/桌面/123$ rm 1.txt
	# 直接删除当前工作目录下的 1.txt 普通文件

qf@qf:~/桌面/123$ rm 2.txt 1.c
	# 可以删除多个文件,不同的文件名称利用空格隔开

qf@qf:~/桌面/123$ rm 1.*
	# tips: * 是一个通配符
	# 当前操作是将工作目录下所有文件名称为 1,文件类型不限制的所有文件删除。

qf@qf:~/桌面/123$ rm *.c
	# tips: * 是一个通配符
	# 当前操作是将工作目录下所有 .c 结尾的文件进行删除操作

qf@qf:~/桌面/123$ rm *.*
	# tips: * 是一个通配符
	# 当前操作是将工作目录下所有名称带有 . 文件或者文件夹进行删除操作
	# 因为当前操作中未提供命令行参数 -r , 仅删除普通文件
  • rm 删除操作文件夹
qf@qf:~/桌面/123$ rm a
	# rm: 无法删除'a': 是一个目录 
	# rm 操作删除文件,需要提供命令行参数 -r
	# 修改之后的格式为 rm -r a

qf@qf:~/桌面/123$ rm -r a

qf@qf:~/桌面/123$ rm -r a b c
	# 可以进行批量删除,多个文件夹名称,利用空格隔开

qf@qf:~/桌面/123$ rm -r *
	# 删除当前工作目录的所有非隐藏文件和隐藏文件夹
	# 因为隐藏文件和隐藏文件夹开头都是 . 开头
3.7 chmod 修改文件或者文件夹权限【小难点】
3.7.1 权限标记和数值使用

权限对应数值

权限 作用 对应数值
r 可读 4
w 可写 2
x 可执行 1
- 不具备对应位置权限 0

案例分析

drwxrwxr-x
# d 开头,对应的是一个文件夹
# 第一组权限【拥有者】 rwx 可读可写可执行 4 + 2 + 1 => 7
# 第二组权限【同组用户】 rwx 可读可写可执行 4 + 2 + 1 => 7
# 第三组权限【访客】 r-x 可读不可写可执行 4 + 0 + 1 => 5
  • 当前为一个文件夹,对应的权限为 775 权限

案例分析

# 已知普通文件,同时权限为 664 
# 普通文件 -
# 第一组权限【拥有者】 6 ==> 4 + 2 + 0 ==> rw-
# 第二组权限【同组用户】 6 ==> 4 + 2 + 0 ==> rw-
# 第三组权限【访客】4 ==> 4 + 0 + 0 ==> r--
  • 终端中当前文件权限信息描述为 -rw-rw-r--
3.7.2 chmod 操作
qf@qf:~/桌面/123$ touch 1.txt
qf@qf:~/桌面/123$ ls -l
总用量 0
-rw-rw-r-- 1 qf qf 0 2月  11 15:56 1.txt
	# Linux 中默认创建普通文件对应的权限为 664 权限
qf@qf:~/桌面/123$ chmod 666 1.txt
	# 将 1.txt 文件修改为 666 权限,对应描述为 -rw-rw-rw-
qf@qf:~/桌面/123$ ls -l
总用量 0
-rw-rw-rw- 1 qf qf 0 2月  11 15:56 1.txt
	# 最终修改效果。

qf@qf:~/桌面/123$ mkdir a
qf@qf:~/桌面/123$ ls -l
总用量 0
-rw-rw-r-- 1 qf qf 0 2月  11 15:56 1.txt
drwxrwxr-x 2 qf qf 4096 2月  11 16:02 a
	# Linux 中默认创建文件夹对应的权限为 775 权限
qf@qf:~/桌面/123$ chmod 440 a
	# 将 a 文件夹修改为 440 权限,对应描述为 dr--r-----
qf@qf:~/桌面/123$ ls -l
总用量 0
-rw-rw-rw- 1 qf qf 0 2月  11 15:56 1.txt
dr--r----- 2 qf qf 4096 2月  11 16:02 a
	# 最终修改效果。
3.8 sudo 临时超级管理员权限【小难点】

sudo 是临时开启超级管理员权限,提供密码之后,临时对当前文件或者文件夹具备完全权限

  • 如果 sudo 超过 5 分钟未使用,后续使用需要提供密码
  • 如果当前终端关闭,后续使用需要提供密码
qf@qf:~/桌面/123$ ls -l
总用量 8
---------- 1 qf qf   17 2月  11 16:10 1.txt
	# 当前文件是无权限文件,任何用户任何角色,对于当前文件都没有任何的操作权限

qf@qf:~/桌面/123$ sudo gedit 1.txt
[sudo] qf 的密码: 
	# sudo 是开启所有权限,提供密码之后,可以修改,查看,当前目标文件
3.9 其他命令
  • ifconfig or ip addr 查看当前计算机的网络情况,如果是 Ubuntu 18.04 以上版本,请使用 ip addr ,如果是较低版本使用 ifconfig
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:06:23:d2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.13.11/24 brd 192.168.13.255 scope global dynamic noprefixroute ens33
       valid_lft 60515sec preferred_lft 60515sec
    inet6 fe80::d395:3094:f02:e9d6/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

  • Ctrl + L or clear 清理屏幕内容,刷新终端页面
  • ↑ ↓ 方向键上下,可以回顾之前的命令
  • top 终端任务管理器,可以查看当前计算机的所有执行任务占用资源情况
  • Ctrl + C 在终端中作用是中断当前程序执行,可以直接杀死程序。
  • cat tac nl 查看文本文件内容,cat 是正向查看,tac 是倒序查看,nl 带有文件行数查看
  • 后续使用到补充。。。。

4. Vim 操作

4.1 Vim 概述

开源免费的终端开发软件,支持各种插件,学习路线较为陡峭,需要掌握基本的文本编辑,操作和代码实现。

Vim 之父 Bram Moolenaar

4.2 Vim 三种模式
  • 编辑模式
  • 插入模式
  • 命令模式
4.3 编辑模式

编辑模式中可以完成针对于 Vim 快捷键操作,例如 复制,粘贴,删除,定位....

Vim 编辑模式指令 作用
yy 复制光标所在行
y[n]y or [n]yy n 是一个数值,表示从光标所在行开始复制 n 行
p 在光标所在位置下一行开始粘贴
dd 剪切光标所在行,如果仅剪切,功能为删除
d[n]d or [n]dd n 是一个数值,表示从光标所在行开始剪切 n 行
u 撤销之前的操作,回退
Ctrl + R 重做
gg 回到整个文档的第一行
ngg 跳转文档的第 n 行
home 跳转到光标所在行第一个位置
end 跳转到光标所在行最后一个位置
i,o,a 进入到插入模式
shift + : 进入到命令模式
4.4 命令模式

主要可以保存,退出目标文件,常用命令有

常用命令 作用
w write 保存
q quit 退出,如果文件已修改,无法使用
q! 强制退出,不保存文件退出
wq 保存退出
wqa 保存所有 vim 打开文件退出
wa 保存所有 vim 打开文件
vsplit 文件名 Vim 多个文件,不常用