一、绝对路径与相对路径
1.以 ./ 开始的路径名是相对路径
2.以 / 开始的路径是绝对路径.
相对路径:会随着用户当前所在的目录发生改变.
绝对路径:不会根据用户所在的路径而改变.
3.gcc 编译器
编译器把高级语言(C语言/JAVA语言/C++语言)生成二进制代码的一种工具.gcc 是专用于编译C语言的工具.
C语言程序生成可执行文件的过程
a、预处理 -E
预处理:进行宏展开,把所有的宏定义进行替换,把以 # 开头的语句进行替换.
#define MAX 100 宏定义
#include <stdio.h> 头文件
file main.c #查看当前文件的属性
main.c: C source, ASCII text #C语言源文件,ascii文本文件
预处理命令:
gcc main.c -o main.i -E
b、编译 -S
编译:把高级C语言 编译成 编程汇编语言
file main.s
main.s: assembler source, ASCII text #汇编语言
编译命令:
gcc main.i -o main.s -S
c、汇编 -c
汇编:把 ascii 文本编程 二进制文本
file main.o
main.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped #64位二进制文件
汇编命令:
gcc main.s -o main.o -c
d、链接
链接:把标准库添加到二进制代码中
file main
main: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter </lib64/ld-linux-x86-64.so.2>,
BuildID[sha1]=263e66632eda4c8f62795dcabd2e87a2ba088bc9, for GNU/Linux 3.2.0, not stripped 可执行二进制文件
gcc hello.o -o hello -lc -lgcc
gcc main.o -o main
#链接标准库,但是c 与 gcc 是默认的标准库可写可不写
-lc -lgcc
补充命令:
// 查看编译器的版本:
gec@ubuntu:~$ gcc -v
// 将源码 a.c 编译生成程序 a
gec@ubuntu:~$ gcc a.c -o a
// 编译源码的时候打开所有的警告
gec@ubuntu:~$ gcc a.c -o a -Wall
// 编译源码的时候指定自定义头文件
// xxx/xxx为自定义头文件所在路径
gec@ubuntu:~$ gcc a.c -o a -I xxx/xxx
// 编译源码的时候指定自定义库文件
// yyy/yyy为自定义库文件所在路径,name为库名称
gec@ubuntu:~$ gcc a.c -o a -L yyy/yyy -lname
// 编译源码的时候指定运行时自定义库文件所在路径
// zzz/zzz为自定义库文件在运行时的所在路径
gec@ubuntu:~$ gcc a.c -o a -Wl,-rpath=zzz/zzz
二、ssh 文件互传协议
在linux系统下文件互传的方式有很多,例如:共享文件夹,samba,tftp,ftp,nfs .... 但是这些方式只能传输文件无法远程控制,所以
最新方式是利用 ssh 进行远程控制与传输文件.
SSH(Secure Shell,安全外壳协议)是一种用于安全远程登录和其他网络服务的加密协议。
SSH 通过加密通信来保护数据在传输过程中的安全性,广泛应用于系统管理、文件传输和远程命令执行等场景。
1.关闭Windows防火墙
测试能否与目标主机ping通
ping 192.168.59.88 #测试与88 主机的同学是否接通
gec@PC-20240429TQJF:~$ ping 192.168.59.88
PING 192.168.59.88 (192.168.59.88) 56(84) bytes of data.
64 bytes from 192.168.59.88: icmp_seq=1 ttl=128 time=3.13 ms 显示速率则证明已经接通
64 bytes from 192.168.59.88: icmp_seq=2 ttl=128 time=0.887 ms
2.安装ssh 服务器与客户端
sudo apt-get update #更新软件列表
sudo apt-get install openssh-server #安装服务器端
sudo apt-get install openssh-client #安装客户端
重启ssh 服务器
sudo /etc/init.d/ssh start #开启ssh服务器
sudo /etc/init.d/ssh restart #重启ssh服务器
提示:ubuntu 20.04 服务器有bug 无法提供对方登录.
所以要安装22版本以上的ubantu才行
3.利用ssh 进行远程登录
成功登录后就会显示对方的主机信息
4.scp 传输文件
上传文件:
scp 文件名 用户名@目标ip地址:绝对路径
例子:上传一个 main.c 文件到gec用户 ip为192.168.59.1 的主机,并放入 /home/gec 目录
scp main.c gec@192.168.59.1:/home/gec
下载文件:
scp 用户名@目标ip地址:文件的绝对路径 ./
例子:下载用户为 gec 服务器地址为 192.168.59.1 的主机下的 /home/gec/main.c 文件到当前目录
scp gec@192.168.59.1:/home/gec/main.c ./
三、linux命令文档安装方法
1.下载u-tools 工具
uTools官网 - 新一代效率工具平台
2.进入插件市场安装linux命令文档
3.快速查找命令使用方法
alt + 空格
linux基础命令
ls 查看当前目录下的文件
1. ls ==> 列出当前目录的文件名
2. ls -l ==> 列出文件详情
3. ls -a ==> 列出文件名(含隐藏文件)
4. ls -la ==> 列出文件详情(含隐藏文件)
5. ls /etc ==> 列出指定目录 /etc 的文件名
6. ls -lh ==> 列出文件详情文件大小用 单位表示
linux目录文件的特点:
蓝色:目录
绿色:可执行文件
白色:一般性文件,如文本文件,配置文件等
红色:压缩文件或归档文件
浅蓝色:链接文件
红色闪烁:链接文件存在问题
黄色:设备文件
青黄色:管道文件
alias 取别名
作用:简化较长的命令。
alias c='clear' #给clear 命令取一个别名为 c
永久生效的配置流程:
vi ~/.bashrc #1.打开配置文件
alias c='clear' #2.添加到文件末尾 ,并保存退出 :wq
source ~/.bashrc #3.重新加载文件
cd 切换目录
cd /etc ==> 切换到 /etc
cd ==> 切换到家目录
cd - ==> 切换到刚刚去过的地方
cd .. ==> 切换到上一级目录
cd ../.. ==> 切换到上上级目录
date 查看当前日期
date #查看当前的时间
date +"%Y-%m-%d" #查看时间格式为 2025-02-25
date +"%Y-%m-%d %H:%M:%S" #查看时间格式为 2025-02-25 15:13:29
date -s 2025-02-27 #设置日期
date -s 16:50:00 #设置时间
date -s "2025-02-27 16:50:00" #设置日期时间
dpkg命令
是Debian Linux系统用来安装、创建和管理 .deb 软件包的实用工具。
dpkg -i package.deb # 安装包
dpkg -r package # 删除包
echo 输出文本
echo "hello world" #输出字符串"hello world"
echo $PATH #输出PATH 环境变量值 ✔️
四、⭐man 帮助手册
man man 查看帮助手册说明
man 1 ls #查看shell命令的使用
man 2 open #查看系统调用open函数使用
man 3 strlen #查看库调用strlen函数使用
man 3 srand 查看随机数产生的方法
man 2 time 查看时间函数
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main(int argc, char *argv[])
{
// 获取秒数数作为随机因子
unsigned int seed = time(NULL);
srand(seed); // 设置一个随机因子,如果一个随机因子是相同的,那么产生的随机数也是一样的!
unsigned int r = rand(); // 产生随机数
printf("%d\n", r%91 + 10 ); // 打印随机数
}
修改上述代码,产生 10 - 100 以内的随机数!
1、其他命令
pwd 输出当前所在目录
sort 对文本内容排序输出
root@[mail text]# cat sort.txt #直接读取文本
aaa:10:1.1
ccc:30:3.3
ddd:40:4.4
bbb:20:2.2
eee:50:5.5
eee:50:5.5
[root@mail text]# sort sort.txt #排序输出文本
aaa:10:1.1
bbb:20:2.2
ccc:30:3.3
ddd:40:4.4
eee:50:5.5
eee:50:5.5
uniq 去掉重复行
gec@ubuntu:~$ uniq file.txt
gec@PC-20240429TQJF:code$ cat my.txt
aaaaa
aaaaa
bbbbb
bbbbb
ccccc
ccccc
gec@PC-20240429TQJF:code$ uniq my.txt
aaaaa
bbbbb
ccccc
which 查看命令所在路径
gec@PC-20240429TQJF:code$ which ls
/usr/bin/ls
| 管道符号
将前面命令的输出,成为后面命令的输入:cmd1 | cmd2
gec@PC-20240429TQJF:code$ ls
a.out main main.c main.i main.o main.s my.txt 随机数.c
gec@PC-20240429TQJF:code$ ls | sort -r 👉将当前目录下的文件,按反序列出
随机数.c
my.txt
main.s
main.o
main.i
main.c
main
a.out
2、 文件管理命令
⭐mv 移动或重命名文件
gec@PC-20240429TQJF:~$ mv main.c new.c #重命名
gec@PC-20240429TQJF:~$ mv new.c dir/ #把文件移动到dir目录中
⭐cp 拷贝文件或者目录
gec@ubuntu:~$ cp file1 file2 ==> 将文件file1复制为file2
gec@ubuntu:~$ cp dir1/ dir2/ -r ==> 将目录dir1/复制为dir2/
⭐touch 创建普通文件
gec@PC-20240429TQJF:~$ touch main.c
⭐mkdir/rmdir 创建/删除目录
gec@PC-20240429TQJF:~$ mkdir dir #创建一个目录
gec@PC-20240429TQJF:~$ mkdir mycode/mytest/mylib -p #创建多级目录
gec@PC-20240429TQJF:~$ rmdir mycode/ #删除一个空目录
gec@PC-20240429TQJF:~$ rm mycode/ -r #删除一个非空目录
⭐rm 删除普通或目录文件
gec@ubuntu:~$ rm file
gec@ubuntu:~$ rm -r dir/
⭐find 查找linux系统中的文件
find /home -name "*.txt" 👉1.查找/home目录下 以 .txt 结尾的文件
find ./ -name "*.txt" -o -name "*.pdf" 👉2.查找./当前目录下 以 .txt 或 .pdf 结尾的文件
find . -type 类型参数 👉根据文件类型查找
f 普通文件
l 符号连接
d 目录
c 字符设备
b 块设备
s 套接字
p Fifo
find /lib -type l 👉3.查找/lib 目录下的链接文件
find /lib -type f -size +10k 👉4.查找/lib 目录中大于 10K 的普通文件
文件大小单元:
b —— 块(512字节)
c —— 字节
w —— 字(2字节)
k —— 千字节
M —— 兆字节
G —— 吉字节
-----------------下述命令了解即可------------------------------------
gec@ubuntu:~$ cat file.txt ==> 显示文本文件内容
head/tail 释义:查看指定文件的头部/尾部内容
gec@ubuntu:~$ head -n 6 file.txt #显示前面6行
gec@ubuntu:~$ tail -n 6 file.txt #显示后面6行
less 分屏上下翻页浏览文件内容
more 显示文件内容,每次显示一屏
od 查看二进制文件
od -t d1 文件名 #以ascii的形式输出
grep 搜索一个文本中的内容
grep "stdio.h" main.c #查找main.c3 文件中是否包含字符串stdio.h
grep 'apple' /usr -rn #在/usr中查找包含apple的文件
diff 比较两个文件的差异
diff file1 file2 ==> 检测文件file1和file2的差异信息
diff dir1/ dir2/ -urN ==> 检测目录dir1/和dir2/的差异信息
gec@ubuntu:~$ wc ==> 计算从键盘输入的数据,以ctrl+d结束
gec@ubuntu:~$ wc file.txt ==> 计算文件file.txt的数据
3、 ⭐tar 压缩与解压命令
Linux下最常用的压缩包格式是:
.tar.bz2
.tar.bz
.tar.gz
.tar.xz
.zip
tar 命令的可选参数:
x 👉 解压
c 👉 压缩
z 👉 对应bz格式文件
j 👉 对应bz2格式文件
v 👉 压缩信息是否可视
f 👉 file 文件
解压命令:
tar -xvf ????.tar.xz
tar -xvf ????.tar.gz
tar -xjvf ????.tar.bz2
tar -xzvf ????.tar.bz
压缩命令:
tar -cvf ????.tar.gz 压缩文件名
tar -cvf ????.tar.xz 压缩文件名
tar -czvf ????.tar.bz 压缩文件名
tar -cjvf ????.tar.bz2 压缩文件名
打包并压缩: tar -jcvf [目标文件名].tar.bz2 [原文件名/目录名]
解压并解包: tar -jxvf [原文件名].tar.bz2
注:小写j代表用bzip2算法来压缩/解压。
指定解压目录
tar -xvf 解压的压缩包 -C 指定的目录
4、zip 格式压缩包
sudo apt-get install zip #安装zip 解压工具
gec@ubuntu:~$ zip a.zip file dir/ ==> 将指定的文件和目录压缩成a.zip
gec@ubuntu:~$ unzip a.zip ==> 解压a.zip
5、权限管理命令
chmod 修改文件的权限
chown 修改文件所有者
gec@PC-20240429TQJF:~$ sudo chown jack main.c
gec@PC-20240429TQJF:~$ ls -l main.c
-rw-rw-r-- 1 jack gec 0 Feb 26 10:15 main.c
chgrp 修改文件所属组
gec@PC-20240429TQJF:~$ sudo chgrp jack main.c
gec@PC-20240429TQJF:~$ ls -l main.c
-rw-rw-r-- 1 jack jack 0 Feb 26 10:15 main.c
adduser 添加新的用户
gec@PC-20240429TQJF:home$ sudo adduser jack
Adding user `jack' ...
su 切换用户
gec@PC-20240429TQJF:home$ su jack
Password:
addgroup 添加用户组
delgroup 删除用户组
gec@ubuntu:~$ sudo addgroup gec ==> 添加用户组gec
gec@ubuntu:~$ sudo delgroup gec ==> 删除用户组gec
检查是否成功请 cat /etc/group
deluser 删除用户
gec@PC-20240429TQJF:~$ sudo deluser jack
[sudo] password for gec:
Removing user `jack' ...
Warning: group `jack' has no more members.
Done.
至此,希望看完这篇文章的你有所收获,我是Bardb,译音八分贝,道友,下期见!