Linux系统编程 | 【01】Linux入门

一、shell

命令解释器,执行输入的命令;

1.1 相关操作

cat /etc/shells 查看当前系统下有哪些shell;

在这里插入图片描述

echo $SHELL:查看当前系统正在使用的shell;

在这里插入图片描述

1.2 快捷键盘
  • Ctrl-p:上;
  • Ctrl-n:下;
  • Ctrl-b:左;
  • Ctrl-f:右;
  • Ctrl-d:关闭;
  • Ctrl-a:光标移至命令开头;
  • Ctrl-e:光标移至命令结尾;
  • Ctrl-u:清除正在输入的命令行。

二、目录和文件

2.1 目录介绍

在这里插入图片描述

  • bin:存放二进制可执行文件;
  • boot:开机启动文件;
  • dev:存储设备;
  • etc:存用户的相关配置信息;
  • home:用户目录;
  • lib:存放所有库;
  • usr:软件资源;
    • bin:应用程序;
    • game:游戏程序;
    • lib:应用程序的库文件;
    • local:包含用户程序;
    • sbin:管理员应用程序。
2.2 文件路径

相对路径

从当前位置开始描述。

绝对路径

/目录开始描述。

快速切换

  • .:表示当前目录;
  • ..:表示上一级目录;
  • cd -:会切换到刚才的目录。
2.3 文件类型【查看文件的第一个字符】
  • 普通文件:-;
  • 目录文件:d;
  • 字符设备文件:c;
  • 块设备文件:b;
  • 软连接:l;
  • 管道文件:p;
  • 套字接:s;
2.4 ls

查看当前目录下的文件

参数

  • -a:显示隐藏文件;
  • -l:查看文件详细信息;
  • -d:显示目录;
  • -R:查看子目录;
2.5 which

查看指定命令所在路径。

2.6 pwd

查看当前所在路径

2.7 rm

删除文件

-r:删除文件夹;
-f: 强制删除。

2.8 touch
  • 将文件修改为当前时间;
  • 若文件不存在,则创建。
2.9 mv

移动文件。

mv 文件 指定目录

2.10 cp

拷贝文件

-a:拷贝文件夹的全部,且文件时间不变;
cp 拷贝文件 到指定目录

2.11 cat

查看文件内容

tac:文件倒置显示

2.12 more

分屏显示。

空格换页、回车换行、Ctrl+c退出

2.13 tree

需要安装: sudo apt-get install tree
显示目录和文件

2.14 du

显示磁盘大小

2.15 df

查看磁盘使用情况。
df --block-size=GB

2.16 ln

硬链接

  • 链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接;
  • 对其中一个文件修改【具有相同的inode】,则源文件也会被修改。

软链接ln -s file file.s

  • 本质是创建一个路径指向源文件。
  • 若要在任何文件都能访问,则file要使用绝对路径
  • -s:创建软连接

三、文件属性和用户用户组

3.1 whoami

查看当前登录用户。

3.2 chmod

修改文件属性。chmod [who] [+|-|=] [mode] 文件名

  • 在ls中权限组合【ugo】:chmod a+w file
    • u:所有者;
    • g:同组用户;
    • o:其他用户。
    • a:以上所有。

数字设定法:
rwx --> 421 ==> 设定 chmode 471 file 即文件-r--rwx--x

3.3 chown

修改用户权限:chown 用户:组 文件

3.4 修改用户组

修改用户组:chgrp 用户组 文件

四、查找与检索

4.1 find

find 目录 -type/-name ''

-size-name-maxdepth-type

若要配合管道使用|需要结合xargs;可在前后加上-print0=null作为文件的切割项

4.2 exec

执行语句。

find 目录 -xx 'findword' -exec [执行的语句] {} \;

  • \:表示转移;
  • {}:表示包括-exec前面的所有内容。
4.3 ok

与exec类似,但是交互方式的。

4.4 grep

根据内容检索。

grep -r '检索内容 文件'

五、软件的卸载与安装

5.1 apt-get
  • apt-get update:更新服务器列表;
  • apt-get install 软件名:安装软件;
  • apt-get remove 软件吗:卸载。
5.2 deb包安装
  • 安装deb软件包命令:sudo dpkg -i xxx.deb
  • 删除软件包命令:sudo dpkg -r xxx.deb
  • 连同配置文件- -起删除命令:sudo dpkg -r --purge xxx.deb
  • 查看软件包信息命令:sudo dpkg - info xxx.deb
  • 查看文件拷贝详情命令:sudo dpkg -L xxx.deb
  • 查看系统中已安装软件包信息命令:sudo dpkg -1
  • 重新配置软件包命令:sudo dpkg-reconfigure xxx

六、压缩包

6.1 tar
  • tar -zcvf 压缩包名称 .tar.gz压缩材料:压缩文件 【参数v:显示压缩过程可加可不加】
  • tar -zxvf 压缩包:解压缩

z代表gzip压缩方式;j表示bzip2压缩方式

6.2 rar

sudo apt-get install rar:需要先安装

  • rar a -r 文件.rar 文件:压缩;
  • unrar x 文件.rar:解压缩。
6.3 zip
  • zuo -r 文件.zip 文件:压缩;
  • unzip 文件.zip:解压缩。

七、其他命令

  • whoami:当前用户;
  • who:查看用户登录;
  • ps -aux:查看进程;
  • top:任务管理器;
  • env:显示所有环境变量;
  • w / who / whoami / last:查看用户登录情况;
  • adduser / passwd / userdel:创建用户修改密码/删除用户;
  • su:切换用户;
  • date / cal:查看日期日历;
  • write / wall / mesg:发送消息;
  • history:查看历史命令;
  • reboot:重启shutdown:关机 +*参数:时间/now;
7.2 网络相关命令
  • ping:检查网络可达性 ICMP协议;

ttl = time to live
ping to death DDoS 分布式拒绝服务攻击

  • ifconfig:127.0.0.1 回环地址
  • netstat -nap(p:进程);
7.3 进程相关命令:
  • ps:(查看进程:第一组数就是进程号);
  • ps -a(all)x(显示没有控制总段的进程);
  • ps -u:查看特定用户的进程;
  • ps -ef 查看所有进程
  • ps -aux:把结果按照cpu或者内存来筛选;
  • ps -aux --sort -pcpu | less:通过cpu来升序排序;
  • ps -aux --sort -pmem | less: 根据内存来升序;
  • ps -C: -C 参数,后面跟你要找的进程的名字。

kill:(结束进程)

  • kill -9:强制杀死进程;

jobs(查看后台的进程)

  • jobs –r:只显示running状态的进程;
  • jobs –p:只显示PID。

fg / bg(后台置前台 / 后台置前台)

  • Ctrl z:把前台放回后台。

top:(任务管理器、cpu、内存)

  • s:改变画面更新频率;
  • l:关闭或开启第一部分第一行 top 信息的表示;
  • t:关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示;
  • m:关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示;
  • N:以 PID 的大小的顺序排列表示进程列表;
  • P:以 CPU 占用率大小的顺序排列进程列表;
  • M:以内存占用率大小的顺序排列进程列表;
  • h:显示帮助;
  • n:设置在进程列表所显示进程的数量;
  • q:退出 top;
  • s:改变画面更新周期。

&

在启动命令后加 & 表示在后台运行

7.4 ssh命令:
  • 登录:ssh 用户名@ip(公网ip);
  • 文件操作scp 文件 root@ip:路径
  • scp :远程安全拷贝;
  • sftpsftp 用户名@ip 命令前可加个l -- local 文件加-r
  • lls:查看本地文件;
  • put:上传到链接的服务器;
  • get:下载,从链接的服务器下载下来。

八、vim命令

8.1 三种模式
  • 命令模式:【a\i\o\A\I\O\s\S】 -> 编辑;【:】-> 末行模式;
  • 编辑模式:【ESC】-> 命令模式;
  • 末行模式:2次【ESC】-> 命令模式;执行末行命令 -> 命令模式。
8.2 命令模式
8.2.1 插入
  • a:光标后插入;
  • A:行末插入;
  • i:当前光标插入;
  • I:行首插入;
  • o:换行插入;
  • O:上一行插入;
  • s:删除光标所在的字符,插入;
  • S:删除光标所在行,插入;
8.2.2 移动
  • h:左移;
  • j:下移;
  • k:上移;
  • l:右移;
  • M:光标移到中间行;
  • L:光标移到最后一行行首;
  • G:移动到指定行,行号G
  • G:移动文件末尾;
  • gg:光标到文件开头;
  • gg=G:程序自动格式化;
  • %:光标移动到一个括号中,执行会跳到相应的另一半;
  • 0:光标移到行首;
  • $:光标移至行尾;
8.2.3 删除
  • x:删除当个字符;
  • dw:删除单词,光标要在首字母;
  • D | d$:删除光标到行末;
  • d0:删除光标到行首;
  • r:按下,在按其他键即可替换;
  • V:按下,在移动光标即可选中;
  • dd:删整行,相当于剪切;
  • 数量 dd:光标在删除行首行,删除n行;
8.2.4 复制
  • yy:复制整行;
  • p:复制到光标后;
  • P:复制到光标前;
8.2.5 查找、替换
  • /查找内容:回车即可查找;
  • n:查找下一个;
  • *:光标放在要查找的单词上,在*即可查找下一个【若在任意一个单词,即可检索那个单词】;
  • #:查找上一个;
  • :s /要替换的/替换词:当行替换,替换光标所在行;
  • :%s /要替换的/替换词/g:全部替换,若无/g则单替换每一行中的第一个;
  • :起始行,末行s /要替换的 替换词:指定行替换;
  • u:撤销;
  • ctrl r:反撤销;
8.3.6 分屏
  • sp:上下分屏;
  • Ctrl ww:切换;
  • qall:退出所有;
  • vsp:左右分屏;
  • 章数 K:光标移至该函数,跳转到文档;
  • [d:光标移至该名,查看宏定义;
  • :!命令:命令可以为终端执行命令;

9、gcc编译

9.1 预处理
  • xx.c-> xx.igcc -E
  • 展开宏、头文件,替换条件编译,删除注释、空行、空白。
9.2 编译
  • xx.i -> xx.sgcc -S
  • 检查语法规范;
9.3 汇编
  • xx.s -> xx.ogcc -c
    将汇编指令翻译成机器指令;
9.4 gcc参数

-I 目录:指定头文件目录;
-c:只作预处理、编译、汇编;
-g:编译时添加调试文件;
Wall:警告;

十、静态库和共享库

10.1 静态库

对空间要求低,而时间要求高的程序中;

制作

  • 先将xx.c生成xx.o文件;
  • 在使用ar rcs name.a xx.o生成静态库;
  • 使用静态库,在编译之前添加静态库名称。
10.2 动态库

对时间要求低,对空间要求高。

制作

  • 先将xx.c 生成 xx.o文件;gcc -c xx.c -o xx.o -fPIC
  • gcc -shared -o 库名.so xx.o
  • 编译可执行程序时,要指定动态库,-l 指定库名-L 指定库路径
  • 链接器:工作于链接阶段,工作时需要-l-L
  • 动态链接器:工作于程序运行阶段,工作时需要提供动态库所在目录位置。
  • 【1】设置动态库路径:export LD_LIBRARY_PATH=路径,临时生效,重启后即失效;
  • 【2】若要永久生效,写入终端配置:.bashrc 在使用 source . bashrc
  • 【3】将动态库拷贝到/lib下;
  • 【4】配置文件:vi /etc/ld/so/conf,写入动态库的绝对路径,在ldconfig -v生效;
  • ldd 可执行文件:即可查看动态库配置路径。

11、gdb调试

  • -g:使用于编译,后续即可调试;
  • gdb xx.out:即可进入调试;
  • list num:即可在num查看;
  • b num:在num行设置断点;
  • r:运行;
  • n:下一条指令,会跳过函数;
  • s:下一条,会进入函数;
  • p x:查看变量的值;
  • finish:结束当前函数调用;
  • start:从头开始执行;
  • set args值:设置main参数值;
  • run 参数:可直接运行并设置main参数;
  • info b:查看断点信息;
  • b num if ..:条件断点;
  • ptype:查看变量类型;
  • bt:查看函数当前所在的栈帧;
  • frame num:切换栈帧;
  • display 变量:跟踪显示变量值;
  • undisplay 变量:取消跟踪;

12、makefile项目管理

执行顺序递归都最后的命令

12.1 规则
目标:依赖条件
	(tab缩进)命令
  • 目标要写在最前面
  • 若不要编译的时候显示该条命令,则在命令前增加@
  • 执行文件时,可指定目标make 目标,否则执行第一句;
  • 目标时间必须晚于依赖条件的时间,否则更新目标;
  • 依赖条件若不存在,找新的规则去产生依赖;
  • ALL: xx:指定生成目标;
  • 变量 =:替换;
  • +=:追加;
  • :=:恒等于。
12.2 函数
  • $(wildcard ./*.c):匹配当前工作目录下的所有.c文件,并组成列表;
  • $(patsubst %.c, %.o, $(src)):将src中包含参数1的部分,替换为参数2;
  • make clearn -n-n模拟执行;
12.3 自动变量
  • $:变量引用时,需要加上切使用()
  • $@:目标文件;
  • $^:所有依赖条件。
  • $<:在规则命令中,表示第一个依赖条件;
  • $?:构造所需文件列表中更新过的文件;
  • CC:默认CC=gcc CC=arm-linux-gcc
  • RM:删除文件,rm -f
12.4 模式规则
%.o:%.c【%:任意】
	gcc -c $< -o $@
【*:所有】
12.5 静态模式规则

$(obj):%.o:%.c:保证指向;

12.6 伪目标
.PHONY:
clean:(无依赖)
	-rm -rf xxx;
	// - 保证删除不存在的文件时,不报错;

使用:make clear

【注】:

  • 若该命令无注释,则make不会主动去寻找它的依赖性(即不会执行它的命令),若要执行,则需要加上该label。
  • 可以在一个makefile中定义不用的编译或是和编译无关的命令,比如程序的打包,程序的备份等等。
12.7 多目录工程
  • 源文件 src:放置*.c
  • 头文件 include:放置*.h
  • 库文件 lib:放置*.sc
  • 可执行文件 bin:生成二进制。
  • -I:头文件连接;
  • -L:库文件目录连接;
  • -l:库文件访问;
  • lm:连接系统库
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jxiepc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值