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

  • Post author:
  • Post category: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

    :远程安全拷贝;

  • sftp



    sftp 用户名@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.i



    gcc -E

  • 展开宏、头文件,替换条件编译,删除注释、空行、空白。


9.2 编译

  • xx.i

    ->

    xx.s



    gcc -S

  • 检查语法规范;


9.3 汇编

  • xx.s

    ->

    xx.o



    gcc -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

    :连接系统库



版权声明:本文为weixin_45926547原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。