Linux操作系统(基础)

在这里插入图片描述

在这里插入图片描述

(一)初识Linux:

免费,开源
内核版本:源代码
发行版本:不同公司对源代码做的定制
Linux上的目录相当于Windows上的文件夹
在这里插入图片描述

根目录下的文件夹中分别存放什么东西:

  • bin:存放一些命令:ls ; ps 等等。相当于windows系统下的一个可执行程序 (.exe)

  • boot:存放系统内核

  • dev:存放设备文件,硬件设备被抽象为文件放在dev里。stdin:代表键盘;stdout:代表屏幕等等一个个设备

  • etc:存放系统的配置文件:调系统的IP地址;对系统的启动级别进行设置等等对系统的一些设置操作。主要存放一些文本文件,记录一些信息

  • home:普通用户的家目录(Linux系统是一个多用户(2个以上的用户可以同时登录一台计算机)的系统)不同的用户只有在自己的家目录下才可以实现创建文件,修改文件,删除文件等操作
    ‘~’ :就代表该用户在自己的家目录下
    *在这里插入图片描述

  • root:管理员的家目录

  • lib:存放库文件的地方:C语言的库函数

  • proc:虚拟的目录,存放进程在内存中的一个映像(像访问文件一样,查看内存中的一些内容,系统关机以后,该目录下的文件就会消失)

  • usr:存放系统运行过程中不经常改变的一些文件:安装了一个软件

  • var:存放一些经常改变的文件:安装一个软件后常常产生一些数据

  • tmp:临时文件,除了家目录以外,用户也可以在该目录底下创建文件,修改文件等等

  • mnt:是临时挂载点。例如,把优盘插在电脑上,想要访问优盘里面的内容,它就必须出现在整个目录树里面,此时就会把优盘挂载到mnt底下,此时进入到mnt底下就相当于进入到优盘里面,就可以查看优盘里面的内容。

进入家目录:家目录就是home底下以该用户命名的文件夹:/home/xsy
home底下会存放多个用户的家目录
在这里插入图片描述
cd是命令;‘~’ 是参数;命令与参数之间有至少一个空格

(二)命令

1.基本命令:

  • 1.1 man:查看帮助文档,当命令和函数重名,需要带上序号
    1:代表命令
    在这里插入图片描述
    在这里插入图片描述

2:代表系统调用:其实现在内核中
在这里插入图片描述

在这里插入图片描述

3:代表库函数
在这里插入图片描述
在这里插入图片描述

  • 1.2 cd:改变当前路径,cd后加一个用户想去的位置:
    cd只能进入文件夹:cd tmp。
    不能进入普通文件: cd file.txt;//error;普通文件只能查看内容,编辑它,由vi或cat打开
    绝对路径走法:所有路径都从根开始
    去根目录下:cd /
    去home底下:cd /home
    cd /home/xsy/217/tmp
  • 1.3 pwd:显示当前位置
  • 1.4 ls:显示当前目录底下有那些文件,显示指定目录底下的文件。
    ls -l:显示当前目录底下所有文件的所有信息
    ls -a:显示所有文件,包括隐藏的文件(以点‘.’开头的文件)
  • 1.5 chmod:修改文件权限
  • 1.6 touch:创建普通文件
  • 1.7 mkdir:创建目录文件(文件夹)
  • clear:清屏
    *1.8 rm +普通文件名:删除普通文件
    rm -f +普通文件名:当该目录下没有该删除的文件会报错,加上-f 不给错误提示
    rm -rf +目录文件名:删除的目录文件本来就没有,所以不用报错
    rm -r +目录文件名:删除空文件夹或非空文件夹(本质上只能删除普通文件和空文件夹,所以删除目录文件时是先进去将它里面的普通文件全删除,然后它变成空文件夹,然后再把它删除)
    *1.9 rmdir +目录文件名:删除空文件夹
    在这里插入图片描述

*1.10 cp +文件名 文件名:拷贝普通文件到当前位置

在这里插入图片描述
将文件foo.h拷贝到当前位置并修改名字为f1
在这里插入图片描述
将普通文件f1拷入目录文件temp中
在这里插入图片描述

*1.11 cp -r +目录文件名 目录文件名:拷贝目录文件

将目录文件temp拷贝到当前位置并且修改名字为temp1

在这里插入图片描述
将目录文件day01拷贝到目录文件temp1中(因为都是在当前目录,所以不用加绝对路径)
在这里插入图片描述
*1.12 mv:移动文件;修改当前目录下文件夹的名字

将目录文件day01移动到目录文件temp中
在这里插入图片描述
将目录文件temp移动到temp1中并且修改名字叫temp2

在这里插入图片描述
修改temp1的名字为mytemp1

在这里插入图片描述

  • 1.13 find:查找文件
    在用户自己的家目录下面,按名称的方式查找 passwd文件:
    在这里插入图片描述
    在根目录下面,按名称的方式查找 passwd文件:
    在这里插入图片描述

  • 1.14 grep:在指定的文件中找到存在指定的字符串的行并打印(读一个文件,给定一个匹配条件)
    在main.c文件中找到含有include的行
    在这里插入图片描述
    -c:显示有几行
    -n:显示行号
    在这里插入图片描述
    与管道结合过滤信息:
    在bin目录下查找含有“bash”的文件
    ls会将结果打到屏幕上,现在让ls的结果写入管道(| :管道可以在俩个进程间传递数据),然后用grep再将数据从管道中读出来,匹配条件就是bash
    在这里插入图片描述

  • 1.15 wc:统计文本文件行数(-l),单词数(-w),字符数(-c)
    在这里插入图片描述

2.文件查看命令:

  • 2.1 cat:向文件中输入数据:从键盘输入数据到新建文件file1中(结束输入:Ctrl+d)
    在这里插入图片描述

2.1.1可以查看文件的内容(适合文件内容较少的)
在这里插入图片描述

2.1.2合并文件
在这里插入图片描述

  • 2.2 more: 分屏显示文件内容,不能修改,只能查看(适合文件内容较多)
    敲回车:显示下一行
    敲空格:显示下一页
    在这里插入图片描述

  • 2.3 less:反复查看文件内容(q:退出)
    在这里插入图片描述

  • 2.4 head:默认显示文件头10行
    在这里插入图片描述
    显示头3行:
    在这里插入图片描述

  • 2.5:默认显示文件末尾10行
    在这里插入图片描述
    显示末尾2行:
    在这里插入图片描述

3.文件编辑命令:

*3.1 vi/vim:vi是文本编辑工具,vim是vi的升级版本

注意:用vim打开一个文件,一定要正常退出。因为当vim打开一个文件,系统会自动生成一个.swp的隐藏转换文件,用来标识该文件已经被用户打开并使用,当用户正常退出关闭文件系统会自动删除该隐藏文件。因此当不正常退出,系统生成的隐藏文件会继续保留,当用户在其他终端,或者下一次继续打开该文件时,系统会报错

安装vim的命令
在这里插入图片描述
在这里插入图片描述

vi的3种模式:
在这里插入图片描述

在这里插入图片描述

1.命令模式:只能识别用户输入的一些命令**(输入命令 ‘ i ’ :切换到插入模式)**
在这里插入图片描述

2.编辑模式(插入模式):可以进行编辑
在这里插入图片描述

命令“ESC” :从插入模式回到命令模式
在这里插入图片描述

3.末行模式:保存或退出文件,执行搜索
“ :wq” :保存并退出
“ :q! ”:不保存退出

在这里插入图片描述

末行模式下的操作

在这里插入图片描述

  • 文件另存为:
    当文件失去写权限,但又在该文件中写了数据,此时需要重新保存
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    :w + 绝对路径+文件名
    :+ w + b.c ->保存在当前目录下,文件名字为b.c
    在这里插入图片描述
    在这里插入图片描述
vi的操作命令:
  • ESC + n + yy :复制n 行
    在这里插入图片描述
  • 将光标移动到需要复制的行,按p实现复制
    在这里插入图片描述
  • u :撤销一次复制操作
    在这里插入图片描述
  • Ctrl + r:恢复一次撤销操作
    在这里插入图片描述
  • dd:删除一行
    在这里插入图片描述
    在这里插入图片描述
  • n + dd:删除n行
    在这里插入图片描述
    在这里插入图片描述
  • dd+p 从该处删除,挪到别处(剪切)
    在这里插入图片描述
    在这里插入图片描述
  • Shift + c :删除一行光标后面的内容
    在这里插入图片描述
    在这里插入图片描述
  • cc :删除一行
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • : n :光标移动到第n行
    在这里插入图片描述

4.文件压缩与解压命令:

在这里插入图片描述
打包:
在这里插入图片描述

在这里插入图片描述
压缩:
在这里插入图片描述

释放时先解压再解包:
解压:
在这里插入图片描述
解包:
在这里插入图片描述
一步解压解包:
在这里插入图片描述

5.进程管理命令:

命令解释器(shell): bash,内核与用户交互的桥梁,每打开一个终端,都会首先运行一个bash,用户输入的所有命令都是由bash 解释执行
进程:一个正在运行的程序
进程控制块(PCB):
在这里插入图片描述

  • 5.1:ps:显示在当前终端中执行的命令(进程)
    在这里插入图片描述

5.11 ps -f :显示当前终端进程的详细信息
在这里插入图片描述

5.12 ps -ef:显示系统所有的进程详细信息
在这里插入图片描述

  • 5.2 kill:结束某一个进程,但是结束不了一个已经停止的进程
    在这里插入图片描述
    在这里插入图片描述

  • 5.2.1 kill -9:强制结束
    在这里插入图片描述

  • 5.3前台与后台运行程序
    前台执行:只有该命令结束了才可以执行下一条命令
    在这里插入图片描述
    结束前台命令的方法: Ctrl + C 或者直接 kill 原理一样
    在这里插入图片描述
    停止前台运行进程: Ctrl + Z
    在这里插入图片描述

后台执行:命令执行不占用命令终端,在后台执行,用户可输入下一条命令继续执行(多条命令同时执行),后台命令Ctrl + C 无法结束
在这里插入图片描述

  • 5.4 jobs:查看后台运行的程序。jobs -l :显示更多信息
    在这里插入图片描述

  • 5.4 前后台命令切换:
    第一步:将前台运行命令Ctrl + Z 停止。
    第二步:bg %任务号
    5.4.1 bg:将前台运行命令切换到后台运行
    在这里插入图片描述
    5.4.2 fg %任务号:将后台运行命令切换到前台运行
    在这里插入图片描述

  • 5.5 pkill:结束自己运行的一组进程
    在这里插入图片描述

  • top:系统检测工具

(三)文件

1.文件类型

(1)Windows系统下的文件类型:

  • .txt:文本文件
  • .jpg:图片文件
  • .exe:可执行程序

(2)Linux系统下的文件类型:

  • ‘-’:普通文件(文档文件):Windows 系统下的电影,图片,可执行程序,.C代码,在Linux系统下就属于普通文件。几乎可以由U盘拷走的都属于普通文件

  • ‘d’:目录文件(Windows系统下所说的文件夹)

  • ‘l’:链接文件

  • ‘p’:管道文件

  • ‘c’,‘b’:设备文件

  • ‘s’:套接字文件

  • 隐藏文件:以点‘.’开头的文件:例如 .a.c
    在这里插入图片描述

在家目录创建文件夹:
在这里插入图片描述
在文件夹中创建一个普通文件:
在这里插入图片描述

在这里插入图片描述

2.文件权限

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(1)修改文件权限文字设定法:

文件操作对属主减去写权限:
在这里插入图片描述

在这里插入图片描述
文件操作对属主加上写权限:
在这里插入图片描述

在这里插入图片描述
文件操作对其他用户加上所有权限:
在这里插入图片描述

在这里插入图片描述

(2)修改文件权限数字设定法:

属主:r+w+x
同组人:r+w+x
其他人:r+w
在这里插入图片描述

在这里插入图片描述

(四)Linux上C程序编译与调式

指令格式:
Windows: PE
Linux: ELF

gcc

gcc用于编译C程序-------->.c
g++用于编译C++程序---->
.cpp
在这里插入图片描述
用户写好的C程序,计算机不认识,需要将其转变成计算机可以识别的二进制指令
在这里插入图片描述
此时的main程序具有执行权限
在这里插入图片描述

运行main程序:
1 ./main:当前目录下的main程序
2 绝对路径下的main程序
在这里插入图片描述

1*.c程序到可执行程序:

(1)预编译:

内容:

  • 将头文件中的内容拷贝复制到*.i文件中
    <stdio.h>中没有printf函数的实现,只有函数声明。函数实现在C的标准库里
  • 替换宏定义
  • 删除注释
    在这里插入图片描述

(2)编译:

该过程一般可以检查出语法错误
内容:

  • 编译之后生成汇编代码
    在这里插入图片描述

(3)汇编:

内容:

  • 对汇编代码汇编生成机器指令
  • 生成*.o文件,只能在目标机器上执行的二进制文件(Windows上称为 *.obj文件)
    在这里插入图片描述

(4)链接:

链接出的可执行程序main 比main.o大的多
内容:

  • 把需要实现的库函数(printf) 链接到main中
  • 确定一些变量的地址(逻辑地址)
  • 确定的逻辑地址(函数入口地址,全局变量地址…)存放在一个文件中,不会改变,临时变量地址会改变
    在这里插入图片描述

在这里插入图片描述

2.编译链接一步完成

在这里插入图片描述

3.多文件编译示例

在这里插入图片描述

(1)分步编译:

在这里插入图片描述

(2)一步完成:

在这里插入图片描述

(3)makefile文件
  • 适用于 . c文件较多,gcc不方便
  • makefile 文件是文本文件,需要写清楚最终生成的可执行程序是谁,以及该可执行程序要如何生成(依赖关系,规则)

在这里插入图片描述

在这里插入图片描述
自动调用清除函数删除* .o 文件
在这里插入图片描述

(4)gdb调试

在这里插入图片描述

对象:正在运行的程序
类比VS:

  • Debug模式: - g
  • Release模式:删除 - g

gcc调试:加 - g
在这里插入图片描述
在这里插入图片描述

  • makefile 文件调试
    在这里插入图片描述
    不需要调试时删除 -g
    但是此方法操作麻烦,故改进如下:
    在这里插入图片描述
    当不需要调试信息时,删除 - g
    在这里插入图片描述
    调试过程:

  • gdb + 需要调试的可执行文件名
    在这里插入图片描述

  • 显示代码 l (list)
    在这里插入图片描述

  • 在第n行加断点:b(break) n
    在这里插入图片描述

  • 在函数入口地址加断点:b 函数名
    在这里插入图片描述

  • 显示在那些行加了断点:info break
    在这里插入图片描述

  • 删除断点:delete 断点编号

在这里插入图片描述

  • 启动程序进行调试: r
    在这里插入图片描述

  • 单步执行: n

  • 敲完n直接敲回车 重复上一步命令(不用一直敲n)
    在这里插入图片描述

  • 显示变量 i 的值: p i
    在这里插入图片描述
    在这里插入图片描述

  • 显示 变量i 的地址: p &i
    在这里插入图片描述

  • 跳出循环:先delete 后 c

  • 程序继续执行,遇到下一个断点就会停下来: c
    在这里插入图片描述

  • 进入函数:s

  • 显示函数调用:bt
    在这里插入图片描述

  • 退出: q

(五)库文件

库:预先编译好的方法(函数)的集合
库文件的声明:“foo.h" 放在 /usr/include 底下
库文件:libfoo,a 放在/lib 底下,或者/usr/lib底下

在这里插入图片描述

1.静态库:

形式:libxx.a

静态库创建过程:

  • 创建* .c文件。一个* .c文件中可以有多个函数实现,不一定一个文件中只实现一个方法
    在这里插入图片描述
    在这里插入图片描述
  • 编译*.c文件创建库
    在这里插入图片描述
    在这里插入图片描述
    用头文件链接:
    头文件与主函数不在一起:

在这里插入图片描述
在这里插入图片描述
头文件与主函数在一起:
在这里插入图片描述
头文件放在usr/include底下:
在这里插入图片描述
库文件:libfoo,a 放在/lib 底下,或者/usr/lib底下,不用指定位置
在这里插入图片描述

  • 调用库文件编译链接
    不标准的方法:
    在这里插入图片描述
    标准方法:
    在这里插入图片描述

2.共享库:

形式:libxx.so
在这里插入图片描述
C的标准库就是一个共享库,将所有库函数的实现预先编译好

创建一个共享库并使用:

在这里插入图片描述

在这里插入图片描述
通过改变环境变量,来告诉编译器,此时共享库不在标准目录底下,在指定的目录底下(该方法只在当前窗口有效)

目的:开发过程中并不知道新开发的库对原库有没有影响,因此需要先在本地目录下测试
在这里插入图片描述

3.静态库与共享库的区别:

在这里插入图片描述

区别:

  • Windows上一般称为静态库和动态链接库

  • 当/lib底下同时存在静态库和共享库时,系统默认优先调用共享库

  • 当静态库改变,必须重新将.c文件编译链接到可执行文件中
    但是共享库改变就不需要,因此共享库有利于开发

在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值