Linux常用命令知识点总结

V1.0 2024年4月17日 基本发布 发布于博客园

V1.1 2024年5月11日 增加环境配置及远程连接

V1.2 2024年6月2日 增加系统编程及一些相关的命令

V1.3 2024年6月4日 增加阿里云服务器相关配置

目录

目录


基本概念

  • PID进程ID
  • TID线程ID
  • PPID父进程ID
  • PGID进程所在组的ID
  • PCB 进程控制块(记录正在运行中的进程的参数PID)

基础指令

Linux命令基本格式

gec@ubuntu:~$ 命令   [选项]   [参数]  

文件操作

文件格式

file命令,该命令用于查看Linux系统中文件的类型,包括但不限于文本文件、目录、二进制文件、符号链接等。

file [选项] 文件名

file code.tar.bz2 #查看code.tar.bz2 的文件类型

文件权限和所有权

更改文件权限

chmod命令,是英文单词change module的缩写,利用该命令可以修改Linux系统的文件权限

chmod   <权限>   <文件>
chmod 755 file_name
chmod u+x file_name    # 给用户增加执行权限

系统中的所有用户被分成三类:文件所有者(现登录用户),同组用户和其他用户。这三类用户对这个文件的rwx权限,可以由命令 ls -l 来查看。

在上述列子中,rwx三组权限对应了三种用户。当我们需要修改这些权限的时候,为了便于描述,一般用3组八进制数来对应这些权限为,如下表所示:

image

更改文件所有者

chown user:group file_name

chown -R 账号名称:组名 文件或目录 #将目标文件改变权限到账号及所属组

更改文件所属组

chgrp 目标群组 文件名称	#改变所属群组
chgrp group file_name

创建文件

touch 文件不存在时创建空文件 , 文件存在时将已存在的文件或目录的时间标签更新为当前系统时间

touch  文件名            //可以一次性创建多个不同类型的文件

查看文件

连接并显示文件内容

cat命令,是英文concatenate的缩写,该命令是 Linux操作系统中最常用的命令之一。cat 命令允许创建单个或多个文件、查看文件内容、连接文件和重定向终端或文件中的输出,常用于查看文件内容。

cat file.txt #显示文本文件内容
cat -n a.c  #显示文本文件内容(并显示行号)
cat -A a.c   #显示文本文件内容(含不可见字符)
		  #注意:在某些情况下,我们可能需要检测文件中那些不可见的字符。比如在Windows系统中编辑了程序源文件,放到Ubuntu系统中编译可能会出现字符错误,这是因为Windows系统中的某些回车符、制表符跟Ubuntu系统的不一致,导致无法编译,而这些字符是不可见的,因此可以使用上述 cat -A 来识别。

分页查看文件内容

more file_name
less file_name

显示文件的开头部分

head file_name
head -n 10 file_name    # 显示前10行

显示文件的结尾部分

tail file_name
tail -n 10 file_name    # 显示最后10行

文本编辑器

nano file_name
vi file_name
vim file_name

删除文件

rm 永久性地删除文件系统中指定的文件或目录。在使用 rm 命令删除文件或目录时,系统不会产生任何提示信息

rm   [选项]  文件或目录
	-f:强制删除(force),和 -i 选项相反,使用 -f,系统将不再询问,而是直接删除目标文件或目录。
	-i:和 -f 正好相反,在删除文件或目录之前,系统会给出提示信息,使用 -i 可以有效防止不小心删除有用的文件或目录。
	-r:递归删除,主要用于删除目录,可删除指定目录及包含的所有内容,包括所有的子目录和文件。

移动文件

mv 命令,是英文move的缩写,该命令有两种作用:既可以在不同的目录之间移动文件或目录,也可以对文件和目录进行重命名。

mv  [选项]   源文件   目标文件/目录路径
	-f:强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖
	-i:交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项)
	-n:如果目标文件已经存在,则不会覆盖移动,而且不询问用户

复制文件

cp命令,是英文copy的缩写,主要用来复制文件和目录,同时借助某些选项,还可以实现复制整个目录,以及比对两文件的新旧而予以升级等功能。

cp  [选项]  源文件(被复制文件)  目标路径
	-i:若目标文件已经存在会询问,如果目标文件已经存在,则会询问是否覆盖  不会复制文件权限和属性
	-a:  会复制权限和属性
	-r:递归复制,用于复制目录
	-u:若目标文件和源文件有差异,则可以更新目标文件,可用于对文件的升级和备用

编辑文件

gedit命令,可以以记事本的风格打开一个文件,gedit图形化编辑器跟Windows下记事本的用法基本一致。

gedit  文件名

查找文件

find命令,该命令用于查找Linux系统中某个指定的路径下文件的位置,并且可以把文件的绝对路径输出到终端。注意:如果打算查找根目录下的文件,则应该使用sudo获取root权限。

find 路径 [选项] 文件名

find /usr -name  "xxx.h" #在/usr中查找所有以.h结尾的文件 
find /tmp -type d       # 在/tmp中查找类型为目录的文件
find / -name passwd #找出档名为 passwd 这个文件

查找命令路径

which命令,在Linux系统中该命令用于定位和查找系统中可执行文件的路径。它主要用于确定某个命令是否存在以及该命令的完整路径。

which [选项] 命令名

which ls #查找ls命令的路径

vim文本编辑器

因为中文编码有 big5 与utf8 两种,如果你的文件是使用big5 编码制作的,但在vim 的终端接口中你使用的是万国码(utf8), 由于编码的不同,你的中文文件内容当然就是一堆乱码了!

【1】安装并部署好 vsCode 编程环境,并安装 vim 插件,试试使用 vi 模式编写代码。

直接在 vsCode 中的扩展栏搜索 vim 安装即可。关于 vi 编辑器:

  • 特点:
    1. vi的改进版本叫vim(vi’s improved version),vi和vim是同一个软件。
    2. vi其初衷是解放鼠标,只用键盘高效操作所有的编辑任务。
    3. 没有菜单,操作分成编辑模式和命令模式,除了编辑之外的操作都在命令模式下进行。

Vi有三种工作模式:一般命令模式、编辑模式、指令列命令行模式。

image

一般指令模式(command mode)

作用: ①移动光标 ②搜索与取代 ③删除字符、删除整列 ④复制整列、粘贴整列

进入: ①默认进入②在编辑模式或指令列模式中按下 ESC

# ①移动光标
	[Ctrl] + [b]	#向上翻一页
	[Ctrl] + [f]	#向下翻一页
	0 或功能键[Home] #移动到这一列的最前面字符处
	$ 或功能键[End]	 #移动到这一列的最后面字符处
	gg #移动到这个文件的第一行 (常用)
	G #移动到这个文件的最后一行(常用)
    n <Enter> #n 为数字。光标向下移动 n 行(常用)
        
# ②搜索与取代
	/word	#向光标之下寻找一个名称为 word 的字符串。 (常用)
    :n1,n2s/word1/word2/g   #n1 与 n2 为数字。在第 n1 与 n2 列之间寻找 word1 这个字符串,并将该字符串取代为 word2 !
    :1,$s/word1/word2/g    #从第一列到最后一列寻找 word1 字符串,并将该字符串取代为 word2 !
    :1,$s/word1/word2/gc   #从第一列到最后一列寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 	
    					 #(confirm) 是否需要取代!(常用)
        
# ③删除字符、删除整列
	见下表
命令 效果
yy 复制游标所在的那一整行
nyy n为数字。复制光标所在的向下 n 列,例如 20yy 则是复制 20 列(常用)
p 将已复制的数据在光标下一列贴上
P 贴在游标上一列
X 向前删除一个字符(相当于 [backspace] 亦即是退格键)
x 向后删除一个字符 (相当于 [del] 按键)
dd 删除游标所在的那一整行
ndd n 为数字。删除光标所在的向下 n 列,例如 20dd 则是删除 20 列 (常用)
u 撤销, 复原前一个动作。
. 重复前一个动作的意思
ctrl+r 重做上一个动作
r 替换当前字符
k 光标向上移动
j 光标向下移动
h 光标向左移动
l 光标向右移动(小写的L)

删除文本

需要注意的是被删除的内容并没有真正删除,都放在了剪贴板中。将光标移动到指定位置处,按下 "p" 键,就可以将刚才删除的内容又粘贴到此处。

快捷键 功能描述
x 删除光标所在位置的字符
dd 删除光标所在行
ndd 删除当前行(包括此行)后 n 行文本
dG 删除光标所在行一直到文件末尾的所有内容
D 删除光标位置到行尾的内容
:a1,a2d 函数从 a1 行到 a2 行的文本内容

复制粘贴

快捷键 功能描述
p 将剪贴板中的内容粘贴到光标后
P(大写) 将剪贴板中的内容粘贴到光标前
y 复制已选中的文本到剪贴板
yy 将光标所在行复制到剪贴板,此命令前可以加数字 n,可复制多行
yw 将光标位置的单词复制到剪贴板

其他常用

某些情况下,可能需要把两行进行连接。比如说,下面的文件中有两行文本,现在需要将其合并成一行(实际上就是将两行间的换行符去掉)。可以直接在命令模式中按下 "J" 键。

如果不小心误删除了文件内容,则可以通过 "u" 键来撤销刚才执行的命令。如果要撤销刚才的多次操作,可以多按几次 "u" 键。

编辑模式(insert mode)

作用: ①以插入或取代来编辑内容

进入使用:

插入模式:i I  o O a A #均可进入编辑模式 退出ESC
	i #在当前光标处插入文本
	I #在当前光标所在行的开头处插入文本
	O #往上插一行
	o #往下插一行
	A #在当前光标所在行的末尾处插入文本
	a #在当前光标的下一个字符处插入文本

取代模式:
	r #取代一个字符
	R #一直取代, 直到按ESC结束

界面提示: INSERT 或 REPLACE

指令列命令模式command-line mode

作用: ①以插入或取代来编辑内容

进入使用: : / ?

#指令列模式的储存、离开等指令
	:w 	将编辑的数据写入硬盘文件中(常用)
	:q 	离开 vi (常用)
	:q! 放弃保存并退出
	:wq 储存后离开
	:wq! 则为强制储存后离开 (常用)

#vim 环境的变更
	:set nu 	显示行号,设定之后,会在每一列的前缀显示该列的行号
	:set nonu 	与 set nu 相反,为取消行号!

查找内容

:?printf #查找printf

如果在文件中并没有找到所要查找的字符串,则在文件底部会出现 "Pattern not found" 提示。

在查找过程中需要注意的是,要查找的字符串是严格区分大小写的,如查找 "shenchao" 和 "ShenChao" 会得到不同的结果。如果想忽略大小写,则输入命令 ":set ic";调整回来输入":set noic"。

如果在字符串中出现特殊符号,则需要加上转义字符 ""。常见的特殊符号有 \、*、?、$ 等。如果出现这些字符,例如,要查找字符串 "10$",则需要在命令模式中输入 "/10$"。

替换文本

快捷键 功能描述
r 替换光标所在位置的字符
R 从光标所在位置开始替换字符,其输入内容会覆盖掉后面等长的文本内容,按“Esc”可以结束
😒/a1/a2/g 将当前光标所在行中的所有 a1 用 a2 替换
:n1,n2s/a1/a2/g 将文件中 n1 到 n2 行中所有 a1 都用 a2 替换
😒/a1/a2/g 将文件中所有的 a1 都用 a2 替换

image

快捷键 功能描述
/abc 从光标所在位置向前查找字符串 abc
/^abc 查找以 abc 为行首的行
/abc$ 查找以 abc 为行尾的行
?abc 从光标所在为主向后查找字符串 abc
n 向同一方向重复上次的查找指令
N 向相反方向重复上次的查找指定

保存退出

需要注意:vi/vim 的保存和退出是在编辑模式中进行的,"w!" 和 "wq!" 等类似的指令,通常用于对文件没有写权限的时候(显示 readonly),但如果你是文件的所有者或者 root 用户,就可以强制执行。

命令 功能描述
:wq 保存并退出 Vim 编辑器
:wq! 保存并强制退出 Vim 编辑器
:q 不保存就退出 Vim 编辑器
:q! 不保存,且强制退出 Vim 编辑器
:w 保存但是不退出 Vim 编辑器
:w! 强制保存文本
:w filename 另存到 filename 文件
x! 保存文本,并退出 Vim 编辑器,更通用的一个 vim 命令
ZZ 直接退出 Vim 编辑器

目录操作

打印路径

pwd 命令,是英文单词print working directory的缩写,功能是显示用户当前所处的工作目录,可以把路径信息输出到终端。

pwd     //该指令输出的路径是绝对路径
pwd [-p] #	显示完整路径

获取路径

basename /etc/sysconfig/network #获取最后的文件名 network
dirname  /etc/sysconfig/network #获取目录名称

查看目录

显示当前目录下的内容

ls [选项] [目录名称] //选项可以省略,目录名称也可以省略

ls -a #列出当前目录下所有内容, 含 . 隐藏文件
ls -i #显示目录下每个文件的节点信息, 文件的节点相当于文件在磁盘的索引
ls -l #列出目录下的详细信息 可以简化为 ll
  • ls -l |grep '^d' 了解, 只显示当前路径下的文件夹

  • ls -l | grep ^- 了解,只列出文件命令

    文件是以 "-"开头 , 文件夹是 d,链接是l开头。^是正则表达,匹配输入字符串开始的位置。

    • -l:以长格式列出文件和目录的详细信息,包括文件权限、所有者、文件大小、修改时间等。
    • -a:显示所有文件和目录,包括以.开头的隐藏文件。
    • -h:以人类可读的格式显示文件大小,例如使用KB、MB、GB等单位。
    • -r:以相反的顺序显示文件和目录。
    • -t:按照修改时间排序,最近修改的文件或目录会显示在前面。
  • ll -d ll只会显示目录下内容的信息,而 ll -d 会显示目录本身的详细信息。 而llls -l的简写形式,ls -l会以长格式列出文件和目录的详细信息。

文件分类

Linux系统的思想是“一切皆文件”,所以Linux系统把文件分为七类:规则文件(-)、目录文件(d)、管道文件(p)、链接文件(l)、套接字文件(s)、字符设备文件(c)、块设备文件(b)

切换目录

cd [选项] [目录名称]

cd #用户家目录
cd -#刚刚去过的路径
cd ~#用户家目录 对应的绝对路径   /home/xxx    xxx就是用户名
cd ~用户名# 该用户的家目录
cd . #用户当前目录 此层目录
cd .. #相对当前所在目录的上一级目录

目录结构

image
根目录 /

常用路径 解释
bin: linux常用的命令
dev: linux外部设备的端口
etc: 系统所有的配置文件
lib: 系统的动态链接库(.so)
mnt: 系统挂载目录,例子: Windows的共享目录
home: 普通用户家目录 /home/gec
usr: 一般存放着头文件,库文件

相对路径 ./

绝对路径 /

创建目录

mkdir [-m or -p] 目录名 创建空目录

gec@ubuntu:~$ mkdir  [-m  or  -p]  目录名
	-m 选项用于手动配置所创建目录的权限,而不再使用默认权限。
	-p 选项递归创建所有目录,以创建 /home/gec/test/abc为例,在默认情况下,你需要一层一层的创建各个目录,而使用 -p 选项,则系统会自动帮你创建 /home、/home/gec、/home/gec/test 和 /home/gec/test/abc。
	
mkdir -m 711 test1#创建有权限的目录
mkdir -p a/b/c #递归创建目录

压缩与解压缩

tar命令,该命令的作用是归档/释放 以及 压缩/解压,归档的意思把文件统一打包但不作压缩处理,所以压缩和归档生成的包的大小不同。

tar  选项  目标文件  源文件           
	-c:创建一个新的归档文件。
	-x:从归档文件中提取文件。
	-f:指定要处理的归档文件名。     //该选项必须放在所有选项的最后面
	-z:使用gzip压缩创建tar文件。
	-j:使用bzip2压缩法创建存档文件。

归档/释放

tar cf a.tar dir/*  #将目录dir中的所有文件归档成a.tar
tar tf a.tar        #查看归档文件a.tar
tar xf a.tar        #释放归档文件a.tar

压缩/解压

tar czf a.tar.gz dir/*  将目录dir中的所有文件归档并压缩为gz格式
tar xzf a.tar.gz        ==> 解压压缩文件a.tar.gz

tar cjf a.tar.bz2 dir/* 将目录dir中的所有文件归档并压缩为bz2格式
tar xjf a.tar.bz2       ==> 解压压缩文件a.tar.bz2

补充

#压缩与解压缩
#tar:归档文件
tar -cvf archive.tar file1 file2    # 创建归档
tar -xvf archive.tar                # 解压归档
tar -czvf archive.tar.gz directory  # 创建压缩归档
tar -xzvf archive.tar.gz            # 解压压缩归档

#gzip 和 **gunzip**:压缩和解压缩文件
gzip file
gunzip file.gz

#zip 和 **unzip**:压缩和解压缩文件
zip archive.zip file1 file2
unzip archive.zip

用户管理

用户切换

sudo su - #默认切换root管理员
sudo su #普通用户切换超级用户 实际开发中尽量避免一直使用超级用户
sudo su [用户]#切换用户,但是不切换工作目录
sudo su - username#切换username用户且切换工作环境
sudo [命令]	#拥有部分管理员权限执行命令
exit #超级用户退回为普通用户

用户信息查看

cat /etc/shadow   # 查看账号数量及其信息
cat etc/passwd # 查看所有用户信息
id <用户名称> #查看用户信息

用户创建

useradd -m -u 800 user2 # 创建用户并赋予权限
useradd -m -G group2 ah #创建用户ah,目录默认,并添加到组 group2中

image

sudo gpasswd root  #建立超级用户

用户删除

userdel test5 -r  # 删除用户test5及其主目录

修改用户信息

usermod -l u1新 user1源 -u 700 -d /test -p 123456 # 修改已有的账号信息 
usermod –l mtest3 test3 –g 1001  –d /home/mtest3 #将test3用户名修改为mtest3,用户组gid改为1001,用户主目录改为/home/mtest3
usermod -G 1100  用户名user01 #修改附加组
usermod -g 1000 user01 # 修改用户所属附加组
passwd <用户> #修改用户密码

image

用户组操作

一个用户可以有多个附加组,但只能有一个基本组

cat /etc/group 查看用户组的信息,用文本编辑器查看

group_name:group_password:group_id:group_members

image

cat /etc/gshadow 查看这个文件需要root权限

image

用户组的管理命令

groupadd 创建新的组账号

groupadd -g 343 newgroup 添加用户组, 1000以上为普通

image

修改用户组信息

groupmod

groupmod -n linux新名字 newgroup旧名称 # 更改组的名字

groupmod -g 300 组名称 #修改组编号

image

删除用户组

userdel  <要删除的用户名> # 删除用户
groupdel <目标组名称> # 删除组,但先删除或踢出去组员

组成员变动

gpasswd:设置组账号密码(极少用),添加、删除组成员。

gpasswd <组A> #修改组A的密码   极少用
gpasswd -a  <用户名>  <组名> #向组内添加一个用户。
gpasswd -d  <用户>  < 组名> #从组内删除一个用户。
gpasswd -M <用户1,用户2>   <组名> #把用户加入组,以逗号分隔。

gpasswd -a user1 sudo  #把user1添加到sudo组里,拥有sudo权限

密码修改

修改用户密码

passwd user2 # 修改用户密码  ,但先进入root

网络操作

配置网络

ifconfig命令,该命令的作用是查看或者设置系统IP地址,ifconfig并非系统自带命令,需要利用命令进行安装使用:

sudo apt install net-tools //安装指令只需要执行一次即可

基本格式:

ifconfig   [选项]

ifconfig #查看网络配置信息
ifconfig ens32 192.168.1.6# 修改静态IP 但只能临时生效! 需要写入启动文件

image

设置静态IP

以下的配置信息展现如何使用 netplan 来给 NetworkManager 配置自动获取IP的信息,如下:

基本格式如下:

sudo gedit /etc/netplan/01-network-manager-all.yaml

image

说明:

[192.168.100.100/24] 中的24代表设定的IP地址的前24比特位为子网掩码,也就是255.255.255.0
nameservers 代表 DNS 服务器
图片中的IP地址等参数只是例子,大家需要根据实际情况进行修改,否则会导致无法联网。
注意:如果用户已经配置好 yaml 文件之后,需要执行如下命令来使之生效,操作如下所示:
gec@ubuntu:$ sudo  netplan  apply

网络测试

ping命令,该命令的作用是向指定主机发送要求回应的ICMP数据包,可以用来测试网络是否连通。

 ping  IP地址 
 ping  主机域名

注意:一般而言,如果网络是畅通的,那么ping命令将会看到数据包返回的延迟时间,否则如果看不到延迟时间,那么网络就是不通的。

软件管理

apt管理器指令

apt命令来安装软件包

apt update					#更新软件源
apt upgrade					#更新所有已安装的包
apt install  	<pkg>		#安装软件包<pkg>,多个软件包用空格隔开
apt remove	<pkg>		#移除软件包<pkg>
apt purge  	<pkg>		#移除软件包及配置文件
apt autoremove	   		#自动删除不再需要的软件包和依赖关系
apt-cache depends 软件包名 #显示该件包的依赖信息
apt-cache search 软件包名# 搜索软件包

apt常用命令

image

image

数据源地址

lUpdate 更新和查询软件包数据源:/var/lib/apt/lists (存放Ubuntu已经下载的个软件源数据);

lUpgrade 升级软件包数据源:/etc/apt/sources.list

lUbuntu 软件中心和APT安装的数据源:/var/lib/dpkg/states

l卸载数据软件包备份位置:/var/cache/apt/archieves

dpkg命令

•dpkg是用来安装.deb文件,但不会解决模块的依赖关系,且不会关心ubuntu的软件仓库内的软件,可以用于安装本地的deb文件,实现手动安装软件包文件(如网络不通、或安装软件源中不存在)。

•如果自己下载了deb包,那么可以直接双击deb包文件,用ubuntu软件中心进行安装,也可以用dpkg命令行工具安装。

  • 安装deb包:安装前,要先查找再安装。 使用命令如下:#dpkg –i deb 包名
  • 列出系统所有安装的软件包:sudo dpkg –l
  • 列出软件包详细的状态信息sudo dpkg –S 包名
  • 列出属于软件包的文件 sudo dpkg –L 包名

帮助手册

help帮助

命令名  --help

man手册

编程开发的过程中,需要使用众多的系统指令、各类函数库、系统调用、各类系统脚本文件等,这些种类繁多、功能各异的信息,可以通过统一的man手册来获取第一手资料,man文档是帮助信息的权威通道,是大多数教程、书籍的知识来源。

由于 man 手册所需要罗列的帮助条目众多,因此 man 手册被妥善地分为9册,不同的帮助信息被放入对应的man分册中:

man文档的九个分册:

  1. Shell命令(默认已安装)
  2. 系统调用
  3. 库函数
  4. 特殊文件(通常出现在/dev目录下)
  5. 文件的特殊格式或协定(例如/etc/passwd的格式)
  6. 游戏
  7. 杂项(例如一些宏定义)
  8. 系统管理员命令(通常只能由管理员执行)
  9. 非标准内核例程

使用man手册查询命令、函数时,一般直接在man后面接上待查条目即可,但有时候会遇到同一个待查询的条目存在于多个man分册的情况,这就需要先罗列出该条目所在的分册信息,然后再根据需要去选择帮助文档的序号。

# 查询单一分册的条目:
man strcpy

# 查询存在于多个分册的条目:
 man -f printf # 先使用 -f 来查看有哪些分册包含了该条目
		printf (1)           - format and print data
		printf (3posix)      - print formatted output
		
 man 3posix printf # 根据需要,指定查询某一册帮助分册
 
 #查询某一分册的条目
 man 1 ls
 man 3 printf

注意:
按 q退出

磁盘/文件系统

查看分区

df命令,该命令的作用是查看系统分区信息,侧重在文件系统级别的磁盘占用方面,用法如下:

df [选项]  
   -h #转换为倍数显示

创建链接

ln 命令,是英文link的缩写,中文具有链接的含义,该命令用于给文件创建链接,在Linux系统中,为文件创建链接的方式分为以下两种:

ln  [选项]  源文件  目标文件         
	-s #创建软连接文件

软链接:类似于 Windows 系统中给文件创建快捷方式,即产生一个特殊的文件,该文件用来指向另一个文件,此链接方式同样适用于目录。

硬链接:文件的基本信息都存储在inode中,而硬链接指的就是给一个文件的 inode 分配多个文件名,通过任何一个文件名,都可以找到此文件的inode,从而读取该文件的数据信息。

注意:软链接文件的源文件必须写成绝对路径,而不能写成相对路径(硬链接没有这样的要求),否则软链接文件会报错。

U盘操作

插入FAT32格式U盘到USB0接口

sudo df -h # 查看磁盘使用情况, 查看挂载点
cd /mnt/udisk #然后可以看见一个已经挂载了的U盘路径, 即可对文件进行拷贝, 但程序应该拷贝出去执行, 因U盘不属于Linux的
umount /mnt/udisk #操作完毕后安全卸载U盘

image

文件系统挂载与卸除

若将新磁盘挂载到workspace文件夹上, 则workspace内原来的文件及文件夹会被暂时屏蔽, 显示的是挂载后的新磁盘的文件及文件夹

mount UUID='' 挂载点 mount 装置文件名 挂载点

blkid /dev/vda4# 查看 vda4 的uuid
mount UUID="e0a6af55-26e7-4cb7-a515-826a8bd29e90" /data/xfs
mount /dev/sr0 /data/cdrom # 将sr0挂载到cdrom

umount (将装置文件卸除)

umount [-fn] 装置文件名或挂载点
	-f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下;
	-l :立刻卸除文件系统,比 -f 还强!
	-n :不更新 /etc/mtab 情况下卸除。
	
umount /mnt/udisk #操作完毕后安全卸载U盘

系统/进程/其它

查看系统内存使用情况

显示Linux系统中 空闲的、已用的物理内存 及 swap内存,及 被内核使用的buffer

free -h

第一行Mem: 系统物理内存的使用情况
第二行Swap: swap交换内存的使用情况

total: 系统中内存的总量,
used: 已用内存总量(used = total-free-buffers-cache)
free: 空闲内存容量(真正尚未被使用的物理内存数)
shared: 共享内存使用的容量
buff/cache: buffers和cache所用总量的总和(buffers为内核缓冲区所用的内存,cache为页缓存和slabs所用的内存容量)
available:为估算值,是在不需要swapping内存的情况下,可用物理内存容量。它是从应用程序的角度看到的可用内存数量。

列出指定目录下的所有内容

tree [选项] [目录]

参数说明:

  • -a 显示所有文件,包括隐藏文件
  • -d 只显示目录
  • -f 显示每个文件的绝对路径
  • -i 不显示树枝,常与 -f 参数配合使用
  • -L level 遍历目录的最大层数,level为大于0的正整数

进程状态

ps命令,是英文process state的缩写,该命令用于获取Linux系统中各进程的当前状态参数

ps   [选项] 

image

系统时间

date命令,date中文具有日期的含义,利用该命令可以查看或者修改Linux系统日期和时间。

date
date  -s   日期时间    //  -s选项可以设置日期和时间

命令别名

alias命令,该命令用于创建和管理命令别名,可以简化日常的指令输入以及提高开发效率!

alias 别名=命令

alias l="ls -l"# 注意单次有效, 若要重复有效, 得写入启动文件
source .bashrc #写入配置后,让配置命令文件立即生效

注意:alias命令设置的别名只在当前终端中有效,如果需要永久生效,需要将其写入到用户家目录下的配置文件.bashrc中,然后使用source命令使配置文件立即生效。一定在尾部进行追加。

清除屏幕

clear命令,该命令用于清除终端的一面屏幕,为了提高终端的可读性以及提高开发的效率!

clear

系统开关机

reboot 	#重启电脑
poweroff	#关机
suspend	#进入休眠模式

查看硬件信息

查看CPU架构信息

lscpu #查看CPU核心的编号和其他相关信息 方法①

cat /proc/cpuinfo | grep "^processor"#打印CPU的详细信息 方法②

nproc #显示当前系统中可用的处理器数量 方法③

top 或 htop #显示每个CPU核心的使用情况

系统信息和管理

  1. uname:显示系统信息

    uname -a    # 显示所有系统信息
    
  2. top:实时显示系统任务

    top
    
  3. ps:显示当前进程

    ps
    ps aux    # 显示所有进程
    
  4. df:显示文件系统磁盘空间使用情况

    df -h    # 以人类可读的格式显示
    
  5. du:显示目录或文件的磁盘使用情况

    bash

    du -h file_or_directory
    du -sh directory    # 显示目录总大小
    
  6. free:显示内存使用情况

    free -h
    
  7. uptime:显示系统运行时间和负载

    uptime
    
  8. who:显示当前登录用户

    who
    
  9. man:显示命令的手册页

    man command_name
    

网络操作

  1. ping:测试网络连接

    ping hostname_or_ip
    
  2. ifconfig:显示或配置网络接口(现代系统使用ip命令)

    ifconfig
    
  3. ip:显示或配置网络接口

    ip addr show
    ip link set eth0 up    # 启用网络接口
    
  4. netstat:显示网络连接、路由表等

    netstat -tuln    # 显示监听的端口
    
  5. ssh:通过SSH远程登录

    ssh user@hostname_or_ip
    
  6. scp:通过SSH复制文件

    scp source_file user@hostname_or_ip:/path/to/destination
    
  7. wget:下载文件

    wget url
    
  8. curl:传输数据

    curl url
    

交叉编译

编译程序

# 编译程序
gcc example.c -o example
arm-linux-gcc demo.c -o demo_arm
# 运行程序
./example

传送文件

tftp协议

# 从电脑的TFTP主目录传送文件(比如a.txt)到开发板    参数 -g 获取  -r 指定文件名
tftp  -g  <本机IP>  -r  a.txt   <目标计算机的IP> #获取 目标计算机 的tftp目录下的 a.txt文件

# 将开发板的文件(比如b.txt)发送到电脑的TFTP主目录  参数 -p 上传  -r 指定文件名
tftp  -p  <本机IP>  -r  b.txt   <目标计算机的IP> #从本机 发送 b.txt文件到 目标计算机的TFTP目录

★SSH协议scp命令

scp  <文件>  <用户名>@<远程主机ip>:<目标路径>    #上传文件给远程主机
#scp a.txt username@192.168.1.2:~/homework

scp  <host>@<ip>:<file>  <path>    #从远程主机下载文件
#scp username@192.168.1.2:~/xxx.txt

#注意:如果打算上传或者下载的文件是一个目录,可以使用scp命令的选项[-r],递归实现!

SSH 在Linux中连接另一个Linux

ssh root@192.168.5.xxx #在Linux(开发端)中通过ssh连接另一个Linux系统(开发板)

编译 运行

运行

设置CPU亲和性

启动一个新进程并绑定到特定CPU内核

taskset -c 0 ./my_program #启动一个新进程并绑定到特定CPU内核

taskset -p <PID> #显示当前进程的CPU亲和性

绑定已经运行的进程到特定CPU内核

假设你有一个进程,其PID是 1234,并且希望将其绑定到CPU核心0上运行:

taskset -cp 0 1234

GCC

GCC(GNU Compiler Collection,GNU编译器套件)

基本命令

  1. 编译单个源文件
gcc -o output_file source_file.c
  • -o output_file:指定输出文件的名称。
  • source_file.c:源文件。
  1. 编译并链接多个源文件
gcc -o output_file file1.c file2.c
  • file1.cfile2.c:多个源文件。

常用选项

  1. 指定目标架构

在嵌入式开发中,通常需要为特定的目标架构编译代码:

arm-linux-gnueabi-gcc -o output_file source_file.c
  • arm-linux-gnueabi-gcc:指定目标架构的交叉编译器。
  1. 优化选项
  • -O0:不优化(默认)。
  • -O1:基本优化。
  • -O2:较高水平的优化。
  • -O3:最高级别的优化。
  • -Os:优化代码大小。
gcc -O2 -o output_file source_file.c
  1. 调试信息
  • -g:生成调试信息。
gcc -g -o output_file source_file.c
  1. 预处理
  • -E:仅运行预处理器。
gcc -E source_file.c -o output_file.i
  1. 编译但不链接
  • -c:编译源文件但不链接。
gcc -c source_file.c -o output_file.o
  1. 指定包含路径
  • -I:指定头文件搜索路径。
gcc -I/path/to/include -o output_file source_file.c
  1. 指定库路径和库
  • -L:指定库文件搜索路径。
  • -l:指定要链接的库。
gcc -L/path/to/lib -lmylib -o output_file source_file.c
  1. 定义宏
  • -D:定义预处理宏。
gcc -DDEBUG -o output_file source_file.c
  1. 静态链接
  • -static:生成静态链接的可执行文件。
gcc -static -o output_file source_file.c
  1. 生成汇编代码
  • -S:生成汇编代码。
gcc -S source_file.c -o output_file.s

示例

  1. 为 ARM 架构编译并优化
arm-linux-gnueabi-gcc -O2 -o my_program my_program.c
  1. 编译并生成调试信息
gcc -g -o my_program my_program.c
  1. 编译多个源文件并链接库
gcc -I./include -L./lib -lmylib -o my_program main.c utils.c
  1. 生成静态链接的可执行文件
gcc -static -o my_program my_program.c

系统编程

查阅目标文件和可执行文件的区别

file  demo.out #查阅目标文件和可执行文件的区别

查看目标文件内部的数据

objdump <option(s)> <file(s)> # objdump -h demo.o查看目标文件内部的数据  
-h, --[section-]headers  Display the contents of the section headers 显示节标题内容

image

查看Linux系统中所有用户相关的进程的所有信息

ps -ef #以完整格式显示所有进程信息 查看进程的父子关系和启动时间
ps -aux #区分进程的状态 查看进程的资源使用情况(如 CPU 和内存)

ps 命令用于显示当前系统中的进程信息。ps -efps -aux 是两种常用的选项组合,它们的输出有所不同,具体如下:

ps -ef

  • 选项说明

    • -e:显示所有进程。
    • -f:以完整格式显示进程信息。
  • 输出格式

    • UID:进程所有者的用户ID。
    • PID:进程ID。
    • PPID:父进程ID。
    • C:CPU使用率。
    • STIME:进程启动时间。
    • TTY:终端类型。
    • TIME:进程使用的累计CPU时间。
    • CMD:启动进程的命令。
  • 示例

    UID        PID  PPID  C STIME TTY          TIME CMD
    root         1     0  0 08:00 ?        00:00:01 /sbin/init
    user      1234  1233  0 08:01 pts/0    00:00:00 bash
    

ps -aux

  • 选项说明

    • a:显示所有用户的进程,包括其他用户的进程。
    • u:以用户为中心的格式显示进程信息。
    • x:显示没有控制终端的进程。
  • 输出格式

    • USER:进程所有者的用户名。
    • PID:进程ID。
    • %CPU:进程使用的CPU百分比。
    • %MEM:进程使用的内存百分比。
    • VSZ:进程使用的虚拟内存大小(KB)。
    • RSS:进程使用的驻留内存大小(KB)。
    • TTY:终端类型。
    • STAT:进程状态。
    • START:进程启动时间。
    • TIME:进程使用的累计CPU时间。
    • COMMAND:启动进程的命令。
  • 示例

    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.1  22556  4100 ?        Ss   08:00   0:01 /sbin/init
    user      1234  0.0  0.2  50000  8000 pts/0    S    08:01   0:00 bash
    

区别总结

  1. 显示格式

    • ps -ef 使用完整格式显示进程信息,字段包括 UID, PID, PPID, C, STIME, TTY, TIME, CMD
    • ps -aux 使用用户为中心的格式显示进程信息,字段包括 USER, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME, COMMAND
  2. 选项风格

    • ps -ef 使用的是 Unix 风格的选项(单个破折号 -)。
    • ps -aux 使用的是 BSD 风格的选项(没有破折号或单个破折号 -)。
  3. 显示内容

    • ps -ef 更适合查看进程的父子关系和启动时间。
    • ps -aux 更适合查看进程的资源使用情况(如 CPU 和内存)。

备注

在某些系统上,使用 ps aux 而不是 ps -aux,因为 ps -aux 可能会被解释为 ps -a -u x,其中 -u 选项后需要一个用户名。为了避免这种情况,建议使用 ps aux 这种无破折号的 BSD 风格选项。

以树状结构显示进程,展示进程之间的父子关系

pstree #来打印进程关系
pstree -a #显示所有进程及其完整的命令行参数
pstree -p #显示进程的 PID
pstree -u #显示进程的用户
pstree username #显示特定用户的进程
pstree -h #水平显示树状结构
pstree PID #显示特定进程及其子进程
pstree -A #使用ASCII 字符显示树状结构
pstree -G #此选项使用宽字符显示树状结构,适用于某些终端环境。

进程前趋图来描述创建的进程之间的关系。进程前趋图也被称为进程树

给某个进程发送信号

kill - l #-l可以列出信号的名称

kill [信号] PID #给某进程发信号
   			   #kill -SIGTERM 1234  以宏的方式给进程1234发信号, 其宏是int类型
			   #kill -9 1234  发送 SIGKILL 信号

常用信号

  1. SIGTERM (15): 终止进程。默认信号。
  2. SIGKILL (9): 强制终止进程。无法被捕获或忽略。
  3. SIGHUP (1): 挂起信号,通常用于重新加载配置文件。
  4. SIGINT (2): 中断进程,类似于按下 Ctrl+C。
  5. SIGSTOP (19): 停止进程的执行。
  6. SIGCONT (18): 继续执行已停止的进程。

Linux系统中的信号编号为164,其中编号为131的信号为普通信号,编号为34~64的信号为实时信号

查看系统中所有的IPC(进程间通信)对象的信息

查看系统中所有的IPC(进程间通信)对象的信息

ipcrm -s <semid> # 要删除信号量组,可以使用 ipcrm 命令与 -s 选项,后跟信号量集的 ID。
ipcrm -m <shmid> # 要删除共享内存,可以使用 ipcrm 命令与 -m 选项,后跟共享内存的 ID。
ipcs -s  # 查看所有信号量组
ipcs -m  # 查看所有共享内存
ipcs -a # 查看所有ipcs
ipcrm -q <msqid> # 删除消息队列。
ipcs -q # 查看当前的消息队列。

配置开发环境

更改服务器源

setting-->about-->software&updates-->Ubuntu Software-->Download from中修改为aliyun

修改完毕后

sudo apt update# 更新Ubuntu系统的服务器软件清单
sudo apt upgrade#检查软件更新

配置SSH

打开terminal终端

若之前有安装过则要把openssh干净卸载

sudo apt-get remove openssh-server openssh-client --purge -y #卸载SSH软件,同时清除openssh的配置文件(/etc/ssh目录下)
sudo apt-get install openssh-server openssh-client #安装SSH 
sudo systemctl restart ssh #重启ssh

检查端口是否开放

sudo apt install net-tools # 安装网络工具
sudo netstat -anp |more #输入netstat查看是否有ssh的22号端口开放

例如:

image

查看服务状态

sudo service ssh status

修改默认ssh端口号(可选)

若要修改默认ssh端口号

要修改配置文件

sudo vim /etc/ssh/sshd_config

查看行号, 按ESC进入一般指令模式,按:进入指令列模式

:set nu

image

在一般指令模式下, 移动光标在port位置, 按i进入插入模式, 然后修改你的端口号, 并去掉注释#。

然后按ESC , :wq!保存退出

然后重启SSH服务:

sudo /etc/init.d/ssh stop
sudo /etc/init.d/ssh start

开放防火墙端口(可选)

开放防火墙端口16899

sudo iptables -A INPUT -p tcp --dport 16899 -j ACCEPT

允许通过防火墙

sudo ufw allow ssh

vscode配置公钥免密码连接ssh

配置简单, 参考网络文章, 可解决每次都要输入密码的"难题"

安装vmware-tools[可选]

sudo  apt  install  open-vm-tools    open-vm-tools-desktop

安装man手册

在默认情况下,系统只安装第一册,其他的帮助信息一般需要用户自己手动安装,安装指令如下:

sudo apt-get install  man-db manpages manpages-de  manpages-de-dev  manpages-dev glibc-doc manpages-posix  manpages-posix-dev manpages-posix

安装Vim文本编辑器

sudo  apt  install   vim#安装vim

安装gcc

sudo apt install gcc #安装gcc
gcc --version # 验证gcc是否成功安装:  将显示gcc的版本信息。
sudo apt install g++#支持C++编译,可以安装g++
sudo apt install make#安装编译和构建相关的工具,make

修改root密码

sudo passwd root

安装交叉编译环境arm

在 / 根目录创建 DevelopmentTool 文件夹, 然后将arm-linux-gnueabi-5.4.0.tar.xz上传到其中

su - root#切换root用户
cd /
mkdir DevelopmentTool #创建存放工具的文件夹
 chmod 777 arm-linux-gnueabi-5.4.0.tar.xz #改变权限
 xz   --decompress  arm-linux-gnueabi-5.4.0.tar.xz #对压缩包进行解压
 tar xf arm-linux-gnueabi-5.4.0.tar#对归档文件进行释放
 cd   /DevelopmentTool/usr/local/arm/5.4.0/usr/bin#进入可执行命令文件
 #每个用户都要配置以下环境变量
 echo "export PATH=/DevelopmentTool/usr/local/arm/5.4.0/usr/bin:$PATH"  >>  ~/.bashrc#配置环境变量 写入用户家目录shell 脚本
 source ~/.bashrc#配置立即生效
 arm-linux-gcc -v#查看配置是否生效
 exit #退出root

若有多个用户则逐一创建账号

sudo adduser username #新建用户username并创建家目录

sudo usermod -aG sudo username #修改username账户, -a将用户添加到新组时保留用户在其他组的成员资格, 如果省略 -a,用户将被从除新指定组外的所有其他组中移除。-G 选项后面跟着的是用户要被添加进的一个或多个组。在这个例子中,组名是 sudo。让username有权限执行sudo命令

su - username #进入新用户
 echo "export PATH=/DevelopmentTool/usr/local/arm/5.4.0/usr/bin:$PATH"  >>  ~/.bashrc
 source ~/.bashrc
 arm-linux-gcc -v

监控软件htop

安装htop

sudo apt install htop # 安装监控软件
htop #查看监控信息

关闭Linux图形界面(GUI)

Linux图形界面相对于字符界面占用内存至少为286MB, 故而关闭图形界面可以节约很多服务器内存.

#停止图形化界面服务
#在字符界面(TTY)中登录后,可以使用以下命令来停止图形化界面服务(通常是 gdm, lightdm, sddm 等):
sudo systemctl stop gdm
sudo systemctl stop lightdm
sudo systemctl stop sddm

临时关闭图形界面

sudo init 3#临时关闭图形界面 或切换root账户 执行
		  #将系统切换到运行级别3,即多用户模式,没有图形界面。意味着系统会关闭图形界面(X server)并进入仅有命令行界面的模式。在服务器环境或需要进行系统维护时可能会用到。
sudo init 5#切回图形界面
		  #将系统切换到运行级别5,即多用户模式,有图形界面。意味着系统会启动图形界面(X server),并进入桌面环境。是典型的桌面用户模式。

image

init命令用于改变系统的运行级别(runlevel)。运行级别是操作系统运行的不同模式,每个运行级别对应不同的系统状态和服务。常见的运行级别包括:

  • 0: 关机
  • 1: 单用户模式(维护模式)
  • 3: 多用户模式,没有图形界面
  • 5: 多用户模式,有图形界面
  • 6: 重启

在现代的Linux系统(尤其是基于systemd的系统)中,init命令通常会被systemctl命令取代,但在一些系统中仍然可以使用init命令。

永久关闭图形界面

#切回root用户
 systemctl set-default multi-user.target # 设置默认目标为多用户模式 多用户模式(multi-user.target)是没有图形界面的运行级别
 reboot#重启 

恢复图形化界面

1. 启动图形化界面服务

如果你想恢复图形化界面,可以使用以下命令:


选择其中一个即可

sudo systemctl start gdm 
sudo systemctl start lightdm
sudo systemctl start sddm

2. 设置默认目标为图形化界面

sudo systemctl set-default graphical.target

3. 重启系统

sudo reboot # 重启后,系统会启动到图形化界面。

安装中文man手册(可选)

# 如果的多人使用, 需要root安装, 然后配置全局环境变量
# 安装手册中文包
sudo apt-get install  manpages-zh
# 查看中文man手册安装路径
dpkg -L manpages-zh | less
# 按q退出
q
# 为了和系统原来的man区分开,用alias给中文man的命令设置一个别名
alias cman='man -M /usr/share/man/zh_CN'
# 查看中文手册
cman ls
# 查看英文手册
man ls

#******************************************下面是个人安装的配置*****多人见后文******************
# 进入家目录
cd ~

# 当你将命令添加到 ~/.bashrc 文件中时,每次登录到 Ubuntu 系统时,bash shell 都会自动执行该文件中的命令,使其生效。使用文本编辑器打开 ~/.bashrc 文件。你可以使用任何你喜欢的文本编辑器,比如 nano:
nano ~/.bashrc

# 在 ~/.bashrc 文件中找到适当位置,建议最后行添加以下配置命令,用于设置中文手册:
	# 配置环境变量,让该用户每次都能有cman命令使用 2024年03月09日配置
alias cman='man -M /usr/share/man/zh_CN'
# 保存文件并关闭文本编辑器。使用以下命令使修改生效:
source ~/.bashrc

#现在,下次登录时,这些命令将自动执行,配置中文手册为首选语言。
#需要注意的是,~/.bashrc 文件只对当前用户生效。如果你希望对所有用户生效,可以修改 /etc/bash.bashrc 文件,但请注意进行适当备份和权限控制。
#另外,如果你已经在 ~/.bashrc 文件中添加了其他自定义命令,可以将上述配置命令添加到适当的位置,确保语言设置在其他自定义内容之前或之后不会发生冲突。

配置全局环境变量

配置全局cman手册

#切换为root用户
vim /etc/bash.bashrc  #配置全局变量
#将下面的代码拷贝到最下面**************************************

# man中文手册配置
alias cman='man -M /usr/share/man/zh_CN'

配置自定义脚本

cd /etc/profile.d #进入全局脚本文件夹
touch IoT_development.sh #创建自定义脚本文件 
chmod 644 IoT_development.sh
vim IoT_development.sh

#**************************************************复制粘贴下面的内容

# 本脚本用于配置嵌入式开发

# 所有用户都能使用的环境变量
# V1.0 2024年5月9日

# 欢迎语
echo '欢迎使用嵌入式Linux开发服务器! 祝bug全无, 一次通过! '

# 让所有用户都能使用man手册
export MANPATH=/usr/share/man:$MANPATH
# man中文手册配置
alias cman='man -M /usr/share/man/zh_CN'
# 让所有用户都能使用arm-gcc
export PATH=/DevelopmentTool/usr/local/arm/5.4.0/usr/bin:$PATH

#****************************END******结束复制*********************************
source ./IoT_development.sh #让脚本生效

配置防火墙(阿里云)

入站需要配置(从外面访问你), 出栈默认允许全部, 无需配置

image

image

VScode免密登录

本地 😗*vscode安装扩展: ** Remote Development

使用VSCode远程连接到Linux

  1. 点击左下角的图标

  2. 选择Connect Current Window to Host...
    image

  3. 选择Add New SSH Host

  4. 命令格式:ssh 用户名@地址

  5. 默认选项即可

  6. 看到右下角的弹窗Host added,添加完成!
    到这里就可以正常操作了,重复刚才的步骤

  7. 可以看到刚才添加的Host,选择它

  8. 选择Linux
    选择Continue

  9. 最后一步!输入密码!回车!结束!

实现免密码登录

① Windows生成公钥

私钥和公钥在目录C:\Users\用户名\.ssh
分别是id_rsaid_rsa.pub
若已有请跳到②

  1. 打开CMD

  2. 输入命令ssh-keygen 该命令要先在电脑上安装Git, 参考如何安装Git笔记

    如何配置git环境变量?

    然后将该路径添加进去 C:\Program Files\Git\usr\bin

    image

    然后重启cmd

  3. 三次回车确认即可生成

  4. 到目录C:\Users\用户名\.ssh查看公钥

    C:\Users\ROG3USER.ssh

    记事本打开id_rsa.pub 这里的名称可能不一样 但后缀是.pub

    ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMbhSof61fVA++vgkJLpj0GAmquKpfYjTRcUdsj/9qv8 ROG3USER@zqingyangROG3

    全部复制

② Linux操作

  1. 检查是否有.ssh文件夹

    cd ~
    ls-a# .ssh是隐藏的,需要用-a才能看到12
    

    如果有则看下一步
    如果没有

    cd ~
    mkdir .ssh
    
  2. 创建authorized_keys文件

    如果已有则修改该文件(如果没有,vim会自动创建该文件)

    vim ~/.ssh/authorized_keys
    

    vim操作

    1. i进入编辑模式
    2. 修改完毕,按Esc,输入:wq保存并退出

    将刚才复制的公钥粘贴到这里(先按i进入编辑模式,右键Paste),按Esc,输入:wq保存退出

    也可以像我这样添加两台电脑的公钥
    另外,如果是手动创建的.ssh目录和authorized_keys文件,需要将其权限分别修改为700和600,命令如下:

    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
    

③ 回到Windows检查是否成功

云端安装vscode插件

C/C++
C/C++ Extension Pack
Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code
CMake
CMake Tools
markdownlint
Prettier - Code formatter
VS Code Counter
C/C++ Themes

常见的bash 命令

cat 列出指定文件的内容
chmod 为指定文件或目录修改系统安全权限
cp 将指定文件复制到另一个位置
file 查看指定文件的文件类型
find 对文件进行递归查找
free 查看系统上可用的和已用的内存
head 显示指定文件内容的开头部分
help 显示bash内建命令的帮助页面
ln 创建针对指定文件的符号链接或硬链接
ls 列出目录内容
man 显示指定命令或话题的手册页
mkdir 在当前目录下创建指定目录
more 列出指定文件的内容,在每屏数据后暂停下来
mount 显示虚拟文件系统上挂载的磁盘设备或将磁盘设备挂载到虚拟文件系统上
mv 移动或重命名文件
passwd 修改某个系统用户账户的密码
pwd 显示当前目录
rm 删除指定文件
rmdir 删除指定目录
sudo 以root用户账户身份运行应用
tail 显示指定文件内容的末尾部分
tar 将数据和目录归档到单个文件中
touch 新建一个空文件,或更新一个已有文件的时间戳
uptime 显示系统已经运行了多久
vi 调用vim文本编辑器
which 查找可执行文件的位置
who 显示当前系统中的登录用户
history 查看历史操作命令
source 让脚本立即生效 root全局变量位置:/etc/profile
ping 测试网络状态
scp # 传输文件  
	# 接收文件 scp -P <端口号> -r           <远程用户名>@<域名或IP>:<远程路径> <当前路径>
	# 发送文件 scp -P <端口号> -r <当前路径> <远程用户名>@<域名或IP>:<远程路径> 
alias 给命令取别名
ifconfig 网络配置

参考 《Linux命令行与shell脚本编程大全.第3版 (布鲁姆,布雷斯纳汉)》P593页

自定义命令

开发板

sendser 发送文件到服务器
getser 从服务器获取文件

服务器

cd $gec #进入工作目录
posted @ 2024-05-11 10:01  舟清颺  阅读(344)  评论(0编辑  收藏  举报