Linux基础(指令+工具)

川长思鸟来 2023-01-11 08:41 248阅读 0赞

Linux基础指令

  • 基本概念

1.谈到linux,最先想到,linux和window有什么区别呢?

linux是一个多用户操作系统,多用户同时操作,但都有各自访问权限

linux下一切皆文件,文件夹也只是一个目录类型的文件而已

linux下的目录结构与磁盘分区的关系:目录结构唯一,是一个树形结构,最底层是一个根目录;可以将磁盘分区挂载在目录上给目录分配空间,即给一个指定的目录单独分配一块存储空间

window与linux不同,window的目录结构为一种磁盘分区以及分配目录结构的方式,即每一个单独空间都有一定的目录结构

2.文件所在位置的路径表示

绝对路径:路径以根目录作为起始

相对路径:路径以当前所在目录作为起始

  • 目录相关指令:

基础指令的格式:命令名称 【操作选项】 【操作对象】

(1)ls 浏览当前目录,查看当前目录下内容

目录就是常说的文件夹,打开一个新的终端,默认会处于一个目录中,这个目录就是当前登录用户的家目录

ls -l 查看文件中详细内容信息

ls -a查看隐藏文件

文件类型并不以文件后缀区分,后缀只是便于用户区分的一种标记而已

linux下以.符号作为起始的文件名都是预测文件

ls -la 组合选项,查看包含隐藏文件在内的所有文件详细内容信息

(2)man 手册查看 man ls 按q退出

(3)pwd 显示当前所在目录的路径

. 表示当前目录自身

.. 表示是当前目录的父目录

(4)mkdir 创建目录

mkdir -p 递归多层级创建目录 如果那一层不存在就创建那一层

(5)rmdir 删除空目录 如果删除目录中存在需要删除的文件夹 删除一般不采用rmdir 而是使用rm删除

rmdir -p 删除目录的同时将父目录删除

(6)rm 删除文件或目录(默认只能删文件,不能删目录)

rm -r 递归的删除掉目录中所有文件之后,然后再删除目录自身

rm -f 忽略提示信息直接进行操作

(7)cp 拷贝一个文件到指定位置

cp -r 递归拷贝目录中所有文件到制导位置

(8)mv 将一个文件移动到另一个位置(剪切)

(9)cd 进入指定的目录(改变当前的工作路径)

  • 文件相关指令:

(1)touch +文件名 刷新文件的时间属性,如果指定文件不存在则创建这个文件

在linux下,一个文件有三种时间属性: 访问时间、修改时间、状态改动时间
访问时间: 记录文件最近被阅读的时间(vim,cat,more等命令都能修改该值)。
修改时间: 记录文件最近被修改的时间(ls -l命令显示的时间即为该时间)。
状态改动时间: 记录该文件的inode节点被修改的时间。touch命令除了-d和-t选项外都会改变该时间。而且chmod,chown等命令也能改变该值。

(2)cat 打印文件内容(常用于查看短小的文件内容,直接在终端上打印)

(3)more 分页显示文件内容

空格:向下翻页 回车:向下按行滚动 q:退出

(4)less 分页显示文件内容

进入后:按f/b上下翻页 j/k按行滚动 匹配查找字符串:/ + str向下查找 ?+ str 向上查找 按q退出

(5)head 显示文件的前n行内容 默认前10行

也可以指定行数: head -n 3 +文件名 显示前3行内容

(6)tail 显示文件的末尾n行内容 默认末尾10行

也可以指定行数: tail -n 3 +文件名 显示末尾倒数3行内容

(7)head 和tail混合使用 通过管道符 实现显示文件 第10行内容

head -n 10 文件名 | tail -n 1

管道符:连接两个命令,将前边命令的处理结果,交给后边命令继续处理

  • 打包相关指令:

三种压缩方式:

(1)zip/unzip:

zip test.zip file1 file2…

unzip test.zip

(2)gzip/gunzip:

gzip test.gz file1 file2…

gunzip test.gz

(3)bzip2/bunzip2:

bzip2 test.bz2 file1 file2…

bunzip2 test.bz2

常用打包压缩指令:

tar 对多个文件或文件夹进行打包/解包,并且可以进行压缩/解压缩

tar -c:打包 tar -x :解包

-z:按照gzip格式压缩/解压缩 -j:按照bzip2格式压缩/解压缩

即:tar -czvf 打包压缩 tar -xvf 解包解压缩

  • 匹配查找指令

(1)grep 在指定文件中匹配包含指定字符串的行

-n 显示匹配到的包含指定字符串的行在文件中的行号

-R 在指定目录中对所有文件逐个进行字符串匹配

-v 匹配不包含指定字符串的行

-i 忽略大小写进行匹配

(2)find 在指定的目录中查找符合指定规则的文件

-name 通过文件名查找文件

-size +/-[cbkMG]通过文件大小查找文件 根据文件大小 +表示大于该大小的文件 -表示小于该大小的文件

-type 通过文件类型查找文件

-amin/-mmin/-cmin -ctime/-atime/-mtime 按照时间查找文件(min是分钟 time是天 a是访问时间 m是内容修改,c是文件变更(权限,位置变更))

  • 权限指令

(1)su username 切换用户

(2)sudo 对当前用户的这次操作进行提权

(3)u文件所有者 g文件所属组 o其他用户

r可读【可浏览】 r可写【在目录中创建删除文件 文件内容修改】 w可执行 【可进入】

(4)umask 查看或设置权限掩码 umask 002 对应权限 775

默认在shell中文件创建权限 掩码取反 或 777-usmask

(5)chmod 修改文件权限

(6)特殊权限:沾滞位 目录文件针对其他用户的一个权限

每个人只能在目录中创建文件或删除自己的文件,不能删除别人的文件

(7)chown 修改文件所有者 chown root file

linux基础工具

  • yum安装工具

1,yum makecache命令:将服务器的软件包信息缓存到本地

2,yum search命令:在所有软件包中搜索指定名称的软件包

3,yum upgrade/update命令:更新所有软件包(二者区别不大)

4 ,yum clear all 命令:清除缓存中所有软件包

5,yum install命令: 安装

6,yum remove命令: 卸载

  • 编辑器 vim

(1)普通模式:完成文本操作,光标移到,其他指令操作

光标移动: hjkl-左下上右; ctrl+f/b-上下翻页; gg/G-文档首行、尾行跳转
内容操作∶复制: yy/nyy,粘贴: p/np;剪切删除: dd/ndd—删除行,x-删除光标所在字符, dw-删除单词其他操作:撤销-u,反向撤销-ctrl+r;全文对齐-gg=G

(2)插入模式 i 插入数据

(3)底行模式:保存退出文件 Esc-> : wq :q :q!(强制退出)

注意:一个文件保存常出现的bug提示:

vim打开一个文件后,通常会创建一个临时文件以.sw*结尾
vim打开文件后,创建临时文件,编辑的时候会修改这个临时文件,只有在保存的时候,才会将修改的信息,写入到源文件中
注意:正常退出vim的时候会删除临时文件并且在文件没有正常关闭退出vim时,这个临时文件不会被删除每次打开源文件的时候都会有提示信息,这时候退出,
使用ls -a查看隐藏文件,删除掉这个交换文件以后就不会有提示了

  • 编译器

(1)编译阶段:

预处理阶段:展开所有代码(引入头文件,宏替换,删除注释……
编译阶段:检查语义语法错误;如果没有错误则将C语言解释成为汇编语言

汇编阶段:将汇编代码解释成为二进制的cpu指令
链接阶段∶将所有的指令代码打包到一起(不仅是打包我们自己的代码,还有链接库文件中的库函数指令代码),进行组织为可执行文件

(2)gcc编译器指令

gcc:C语言编译器、g++:C++语言编译器
-E只进行预处理;-S只进行编译处理;-c只进行汇编处理-О指定输出文件名称

20210129185236416.png

(3)动态链接库/静态链接库

动态链接︰链接动态库生成可执行程序,并没有把库中函数的实现指令直接拿过来写入可执行程序中,而是在可执行程序中记录了库中函数的符号信息
表,在运行可执行的时候需要去加载动态库到内存中。如果动态库不存在,则程序无法运行

动态链接的优缺点:生成可执行程序比较小,运行时动态库被加载到内存中,可以多个程序使用同一份内存中库函数代码;缺点是运行时需要依赖动态库的存在,不存在则无法运行 gcc编译器采用了动态链接库

静态链接∶链接静态库生成可执行程序,直接将库中我们用到的函数的实现代码指令,写入到了可执行程序文件中,程序运行的时候没有什么依赖

静态链接的优缺点:程序运行没有其他依赖,可以直接运行;但是可执行程序比较大,并如果多个程序使用同一个库中的函数,则这些程序同时运行时,则相同的库函数代码在内存中会存在多份,各是各的。

  • gdb调试器

目的:为了排查程序的运行错误

程序的错误分类:编译错误,链接错误,运行时错误(运行中逻辑不对以及程序运行时崩溃)

调试程序的前提:程序必须是一个debug版本,gcc/g++默认生成release版本, -g选项 生成debug可调式版本

gdb常用调试指令:gdb ./test.exe

流程控制:

r run :直接运行程序

start:开始逐步调试

l list:查看调试行附近代码

n next:下一步—逐过程—遇到函数直接运行完毕

s step:下一步—逐语句—遇到函数进入函数继续调试

until:直接运行到指定位置 until test.c:16 运行到16行

continue:继续从当前调试位置运行

b break:打断点 break test.c:14 在14行断点

ib info break: 查看断点信息

d delete:删除断点 delete id

watch:变量监控断点—当变量发生改变的时候停下来 watch variable_name

q quit:退出gdb

内存控制:

p print:查看或设置变量内容 示例:print variable_name 查看变量 print variable=3 可以设置更改变量值大小

bt breaktrace:查看函数调用栈—通常用于检测程序运行时崩溃位置

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MTMxNjEx_size_16_color_FFFFFF_t_70

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MTMxNjEx_size_16_color_FFFFFF_t_70 1

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MTMxNjEx_size_16_color_FFFFFF_t_70 2

  • make/Makefile:项目的自动化构建工具

Makefile:文本文件,记录一个项目的构建规则流程

makefile编写规则:

目标对象,依赖对象 , \t 为了生成目标对象要执行的指令,预定义变量 ,伪对象

预定义变量的使用:$@表示目标对象 $^表示所有依赖对象 $<表示依赖对象的第一个

伪对象:声明一个目标对象与外部文件无关,表示每次这个对象不管是否最新都要重新生成 .PHONY:

make:是一个解释程序,对Makefile中记录的构建规则流程逐步解释执行,完成项目的构建

make解释执行规则:

1,make指令表示运行make解释程序,程序会在当前目录下找到名称为makefile/Makefile文件,解释执行其中的项目构建规则

2,判断目标对象是否已经存在,存在的话是否需要重新生成—根据源码文件的最后一次修改时间对比

3,make每次在makefile中只会找到第一个目标对象进行生成,生成之后退出

4,make在生成目标对象的时候,会先查找依赖对象的生成规则,先生成依赖对象,然后再去生成目标对象


基本写法示例:

main:main.o child.o

gcc $^ -o $@

%.o:%.c

gcc -c $< -o $@

.PHONY:clean

clean:

rm main.o child.o main

20210202111444253.png

  • git项目版本管理工具

1, 在github建立远程仓库

2,将远程仓库克隆到本地: git clone https://github/AllenSquirrel/….

3,提交本次修改记录 git add —all ./ (提交指定文件 git add path/file)

4,提交本次仓库版本管理 :git commit -m “本次修改的备注信息”

5, 将本地版本同步到远程仓库:git push origin master(master是主分支)

发表评论

表情:
评论列表 (有 0 条评论,248人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Linux基础指令

    常用选项:-f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在.-i 或 --interactive覆盖文件之前先询问用户.-r递归处理, 将指...

    相关 Linux基础指令

    摘要:本文主要介绍了Linux指令的基本概念,然后介绍了ls、pwd、cd、mkdir、touch、cp、mv、rm、vim、输出重定向、cat等基础指令,并且举例进行实验。

    相关 Linux 基础指令及其基本操作

    在 Linux 下,我们是看不到这些驱动器盘符,我们看到的是文件夹(目录): linux没有盘符这个概念,只有一个根目录 /,所有文件都在它下面 ![在这里插入图片描