Scua 23年Linux复习笔记

Linux

第一讲

Linux的起源、历史、特点、定义

  • Linux是一个类Unix内核的可以自由发布的实现版本,是一个操作系统的底层核心(内核)
  • Linux => 内核
  • Linux系统 => 内核 + 工具 + 配套软件
  • 特点:
  • 开放性(遵循标准)
  • 多用户
  • 多任务
  • 良好的用户界面
  • 设备独立性(把外部设备当做文件处理)
  • 丰富的网络功能
  • 可靠的系统安全
  • 良好的可移植性

GNU、GPL

  1. GNU = GNU‘s Not Unix
  2. GNU计划:1983年Richard Stallman创办GNU计划,旨在建立一套完全自由和可移植的类Unix操作系统
  3. GNU GPL:GNU General Public License(GNU通用公共许可证)
  4. GPL核心思想:
    保证任何人有共享、修改、发布自由软件的自由
    自由软件的衍生产品必须以GPL为重新发布的许可证
    允许公司销售自由软件(硬件/服务),提供源代码

常见发行版本

redhat,centos,ubuntu,puppy。。。

商业、共享、自由和免费软件的区别和联系

商业软件
  • Commercial Software
  • 由开发者出售拷贝并提供技术服务
  • 用户只有使用权
  • 不提供源代码
共享(试用软件)
  • Shareware
  • 开发者提供软件试用程序拷贝授权、升级和技术服务
  • 用户在试用该程序拷贝一段时间之后,必须向开发者交纳使用费用,否则不能继续使用
  • 不提供源代码
自由软件
  • Freeware或Free Software
  • 提供源代码
  • 任何人都可以自由传播、下载、使用、改写、重新发布
  • 自由软件不一定免费
免费软件
  • Freeware
  • 不需付钱,但免费软件不一定提供源代码
  • 只有当自由软件免费或者免费软件提供源代码的时候才是一样的

第二讲

Linux的安装方式(区别和联系,如何选择)、安装过程、远程连接方式

Linux内核版本号

内核版本号
  • 由Linus等人制定和维护,全球统一
  • 内核版本号格式:x. y. zz
  • x为主版本号
  • y为次版本号
  • zz为次次版本号
稳定版
  • ​ 内核的特性已经固定,代码运行稳定可靠,不再增加新的特性,要改进也只是修改代码中的错误。
2.6及以下版本(x.y.zz)
  • 次版本号=偶数 => 稳定版本
  • 次版本号=奇数 => 测试版本
3.0开始
  • 次版本号不再表示一个内核是稳定版本还是测试版本,所有发布出来的正式版本都是稳定版本
发行版本号
  • 由各个发行公司或者组织自行制定
  • 不同公司的发行版本之间无可比性

Linux目录结构、常见目录的作用和存放内容

  • /bin:常见系统程序目录
  • /boot:开机设定目录,也是摆放核心vmlinuz的地方
  • /dev: 摆放系统设备装置文件的目录
  • /etc:系统配置文件,尤其passwd,shadow
  • /etc/rc.d/init.d:系统开机的时候载入服务的scripts的摆放地点
  • /home:系统使用者的目录
  • /lib:Linux执行或编译程序函数库目录
  • /mnt:软驱与光驱接入挂载的地方
  • /proc:系统核心与执行程序的一些信息
  • /root:系统管理员的目录
  • /usr/bin,/bin:一般执行文件摆放的地方
  • /usr/sbin,/sbin:系统管理员常用指令集
  • /var:摆放系统日志文件的地方
  • /lost+fount:摆放系统不正常产生错误时遗失的片段

Linux系统结构图、主要组件构成

系统结构图

在这里插入图片描述

主要组件构成

在这里插入图片描述

关机、重启命令

不允许普通用户关机和重启

关机
  • shutdown -h now
  • init 0
  • halt -p
  • poweroff -p
重启
  • shutdown -r now

  • init 6

  • reboot

    shutdown [选项] 时间 [消息]

选项描述
-t seconds设定在几秒钟之后进行关机程序
-k并不会真的关机,只是将警告讯息传送给所有使用者
-r关机后重新开机
-h关机后停机
-n不采用正常程序来关机,用强迫的方式杀掉所有执行中的程序后自行关机
-c取消目前已经进行中的关机动作
time设定关机的时间
message传送给所有使用者的警告讯息

init 运行级别代码

代码描述
0关机级别
1单用户运行级别
2多用户,字符模式,但系统不会启动NFS
3多用户,字符模式,系统启动具有网络功能,常用运行级别
4用户自定义级别
5图形界面模式,常用运行级别
6重启级别

halt [选项]

选项描述
-d不要在wtmp中记录(记录开关机等信息的二进制文件)
-f不论目前的runlevel为何,不调用shutdown即强制关闭系统
-i在halt之前,关闭全部的网络界面
-nhalt前,不用先执行sync
-phalt之后,执行poweroff关闭电源
-w取消目前已经进行中的关机动作

reboot [选项]

选项描述
-d不把记录写到 wtmp 档案里
-f强迫重开机,不呼叫 shutdown 这个指令
-i在重开机之前,关闭全部的网络界面
-n在重开机前不做将记忆体资料写回硬盘的动作
-w并不会真的重开机,只是把记录写到 /var/log/wtmp 档案里

说明文档查看

man | info

man xxx | info xxx

  • 回车 下一行

  • 空格 下一页

  • q 退出

    有些命令提供了–help或者-h选项,可以查看命令的使用说明

第三讲

Linux交互方式

在这里插入图片描述

shell的作用、种类、默认shell

作用
  • ​ Shell是一个作为用户与Linux系统间接口的程序,它允许用户向操作系统输入需要执行的命令,返回执行结果

  • 在Linux中可存在多种Shell,一个用户同一时刻只能使用一个shell

  • 实现自动化运维

  • 查看当前系统支持的Shell列表

    ¨# cat /etc/shells

    查看当前用户使用的Shell版本

    ¨# echo $SHELL

种类
  • ash
    贝尔实验室开发的shell,bsh是对ash符号链接

  • bash
    GNU的Bourne Again Shell,是GNU Linux操作系统上默认的Shell。sh以及bash2都是对它的符号链接

  • tcsh

    是Berkeley UNIX C Shell。csh是对它的符号链接。

  • ksh

    Korn Shell的语法与Bourne Shell相同,同时具 备了C Shell的易用特点

  • zsh

    Korn Shell 的一个增强版本,具备bash Shell 的许多特点。

默认shell
  • GNU Linux工具中使用的是 bash shell
  • 作为/bin/sh被默认安装
  • 大多数Linux发行版中,shell程序/bin/sh实际上是对程序/bin/bash的一个链接
  • 如何知道/bin/sh链接到/bin/bash?
    ls -l /bin/sh

shell的功能(命令行提示符、自动补齐、历史记录查看、常用的快捷键、重定向、管道)

  • root(超级管理员)的命令提示符

  • $
    非root用户的命令提示符

    历史记录查看

    键盘↑↓键 上下翻看历史输入命令

    ctrl + p前一条指令

    ctrl + n后一条指令

    ctrl + r 反向搜索命令历史记录

    输入内容后,系统会找到最近一个包含这个内容的命令

    找到命令后,按回车执行命令,按上下键查找该命令前后命令,按左右键移动光标并修改命令

光标移动
  • ctrl + a 移动光标到行首

  • ctrl + e 移动光标到行尾

  • ctrl + d 删除光标所在字符

  • ctrl + u 剪切到行首

  • ctrl + k 剪切到行尾

    重定向

    n< 文件

    输入重定向

    wc -l < list.txt

    n> 文件

    输出重定向 覆盖原有内容

    ls > list.txt

    n>> 文件

    追加重定向 文件末尾添加

    echo abc >> list.txt

clear、echo、ls、cd、pwd、mkdir、rmdir、rm、touch、cat、more、less、head、tail、cp、mv(自己看PPT)

文件类型、相对路径、绝对路径、用户主目录、特殊目录、当前目录、工作目录

文件类型
  • 普通文件:[ - ]
    纯文字文件(ascii)或 二进制文件
  • 目录: [ d ]
  • 链接文件: [ l ]
  • 设备文件:
    区块设备文件:[ b ];
    字符设备文件:[ c ]
  • 管道文件: [ p ]
  • Socket文件: [ s ]
绝对路径

指从“根”开始的路径,也称为完全路径

相对路径

指从用户工作目录开始的路径

特殊目录
  • “.”代表该目录自己
  • “…”代表该目录的父目录
  • 对于根目录,“.”和“…”都代表其自己
工作目录/当前目录

用户登录系统后,某一时刻处在的目录,也称为当前目录

用户主目录
  • 添加用户时为该用户建立起来的目录
  • 每个用户都有自己的主目录 (普通用户一般在/home下,root用户在/root下)
  • 用户主目录可以用符号 ~表示
  • 快速回到当前用户的主目录 cd ~

第四讲

用户类型

  • 超级用户
    root,根用户,有最高的权限,可以对linux做任何操作
  • 普通用户
    受限的权限,没有对系统的完全控制权,用户之间私人的资源是相互隔离的
  • 系统用户
    与系统和程序服务相关的用户
    默认情况下,这些特殊用户的无法登录的,如果给这些用户授权登录口令后,就可以使这些用户登录系统

/etc/passwd 作用和内容

用户信息文件

  • 每一行存储一个用户的账号信息

  • 用户名:加密密码:用户ID:用户组ID:用户信息:用户主目录:登录Shell

  • 超级用户root的UID是0

    系统用户的UID在1000以内

    普通用户的UID从1000开始往上编号

/etc/shadow /etc/group作用

口令文件/etc/shadow
  • 每一行存储一个用户的登录密码信息,加密
  • 只有root用户才能读取这个文件
/etc/group
  • 每一行记录系统中的用户组信息
  • 组名:密码字段:用户组ID:用户名列表

useradd、passwd、usermod、userdel、groupadd、groupdel、chmod、chown、chgrp、ln、tar、gzip、unzip、awk、sed、cut、tr、find、grep(自己看PPT)

软连接和硬连接的区别和联系

硬连接(hard link)

​ 给文件一个副本(别名),同时建立两者之间的连接关系,修改其中一个,与其连接的文件同时被修改,如果删除其中一个,其余的文件不受影响。磁盘上只有一份数据。硬链接是存在同一个文件系统中

软连接(symbolic link)

​ 软链接的方式则是产生一个特殊的文件,该文件的内容是指向另一个文件的位置。它只是一个快捷方式,删除了源文件,这个连接文件就没用了。软链接可以跨越不同的文件系统。

区别与联系
  • 适用场景

  • inode节点

  • 链接数

  • 文件的属性

  • 对链接进行操作(修改,删除)对原文件的影响

  • 对原文件进行操作(修改,删除)对链接的影响

  • 需要指定绝对路径,否则链接失效

  • 联系:

    1. 对软链接或硬链接的内容进行修改,会对原文件有效

    2. 删除软链接或硬链接本身,不会对原文件有影响

常见正则表达式

  • ^
    锚定行的开始,如:‘^grep’ 匹配所有以grep开头的行
  • $
    锚定行的结束,如:‘grep$’ 匹配所有以grep结尾的行
  • .
    匹配一个非换行符的字符,如:‘gr.p’ 匹配gr后接一个任意字符,然后是p
    匹配0个或多个先前字符,如:‘*grep’ 匹配所有一个或多个空格后紧跟grep的行。.*一起用代表任意字符
  • []
    匹配一个指定范围内的字符,如:‘[Gg]rep’ 匹配Grep和grep
  • [^]
    匹配一个不在指定范围内的字符,如:‘[^A-F]rep’ 匹配不包含A-F的一个字母开头,紧跟rep的行
  • \(…\)
    标记匹配字符,如:‘\(love\)’ ,love被标记为1
  • \<
    锚定单词的开始,如:'\<grep’匹配包含以grep开头的单词的行
  • \>
    锚定单词的结束,如:'grep\>'匹配包含以grep结尾的单词的行
  • x\{m\}
    重复字符x,m次,如:‘o\{5\}’ 匹配包含5个o的行
  • x\{m,\}
    重复字符x,至少m次,如:‘o\{5,\}’ 匹配至少有5个o的行
  • x\{m,n\}
    重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5–10个o的行

第五讲

cal、date、wc、sort、which、whereis、su、yum、sudo(自己看PPT)

vi三种模式的功能、切换

命令模式

  • 启动vi后默认模式
  • 按下ESC键可进入命令模式
  • 输入的字符被当成命令,字符不回显

插入模式

  • 命令模式下通过i、a、o、c、r、s等命令进入

  • 输入的字符被当成文本内容,显示在屏幕上

末行模式

  • 命令模式下通过:、/、?等命令进入

  • 显示在屏幕的最后一行

  • 命令执行后,自动切换到命令模式

在这里插入图片描述

末行模式:保存、退出、显示/取消行号、搜索、替换

保存:

:q #正常退出。 如果文件有修改未保存需要强制退出

:q! #强制退出

:w #写入文件

:w filename #另存为

:wq #写入后退出

:wq! #写入后强制退出

:x #:wq一样

行号:

临时

:set nu | :set number #显示所有行号

:nu | :number #显示光标所在行号

:set nonu | :set nonumber #取消行号显示

长期

~/.vimrc #当前用户下的vim配置文件

搜索:

/xx

从光标所在位置往下搜索

?xx

从光标所在位置往上搜索

切换匹配项

n #向下搜索下一个匹配项

N #向上搜索上一个匹配项

替换:

😒/x/y

把光标所在行第一个匹配的x替换为y

:n,m s/x/y

把第n行到m行中每行中第一个匹配的x替换为y

:% s/x/y

把当前文件中所有行的第一个匹配的x替换为y

g : 全局 => 把每一行中所有的匹配项都替换

😒/x/y/g

:n,m s/x/y/g

:% s/x/y/g

命令模式:光标移动、删除恢复、复制粘贴、替换、切换到插入模式(含课外补充内容、课外作业)

光标移动:

h(左), j(下), k(上), l(右) <=> 键盘上下左右键

$ #移动到行未

0,^ #移动到行首

gg #定位第一行行首

G #定位末行行首

nG #定位到第n行行首

n+ #向下移动n行

n- #向上移动n行

删除&恢复:

x | nx #删除一/n个字符

dd | ndd #删除一/n行

d[w|e|b|$|^|G|gg …]

删除光标移动范围内的内容

u #撤销上一步操作

U #撤销对当前行的所有操作

复制&粘贴:

yy | nyy #复制一/n行

y[w|e|b|$|^|G|gg…] #复制光标移动范围内的内容

p #粘贴到光标所在位置下一个字符位置

替换:

r | nr

替换光标所在字符(相同字符)

自动退出

R

进入替换模式

替换光标所在字符,直到按下Esc

不会自动退出

进入插入模式:

i #在光标左侧插入

a #在光标右侧插入

o #在光标所在行的下一行插入

s #删除光标所在字符后插入

I #在光标所在行首插入

A #在光标所在行尾插入

O #在光标所在行的上一行插入

S #删除光标所在行

vi与shell交互

在末行模式下用“!”符号来访问Linux的shell

  • 例如
  • :!cat /etc/passwd | more
  • :! /bin/bash

vi冲突处理

  • 每次打开文件会创建一个名为 *.swp 的临时文件
  • 当多界面编辑、vi异常退出时会导致异常
  • 删除 *.swp 即可

文本格式转换

unix2dos(linux转window)、dos2unix(window转linux)

  • 使用
  • unix2dos | dos2unix filename #格式转换后覆盖源文件
  • unix2dos | dos2unix -n filename newFilename #格式转换后存为新文件

第六讲

ifconfig、ifup、ifdown、ping、netstat、service、chkconfig(自己看PPT)

网络配置文件的各自作用、设置静态IP方法

/etc/sysconfig/network最基本的网络信息,系统启动时读取该文件
/etc/sysconfig/network-scripts/此目录下的文件是系统启动时用来初始化网络的一些信息,例如:第一块以太网卡对应的文件为ifcfg-eth0
/etc/host.conf域名解析的配置文件
/etc/hosts域名或主机名与IP地址的映射文件
/etc/resolv.conf域名服务器配置文件
/etc/protocols定义使用的网络互联协议及协议号
/etc/services设定主机的不同端口的网络服务
设置静态IP方法

第七讲

两个网络模式的区别与联系(含图),如何选择

  • 独立的守护进程工作模式

在这里插入图片描述

  • 基于xinetd的工作模式

在这里插入图片描述

独立的守护进程模式(stand-alone)
  • 是Unix传统的C/S模式的访问模式
  • 在Client/Server模式下,服务器监听(Listen)在一个特定的端口上等待客户连接,连接成功后服务器和客户端通过端口进行数据通信
  • 守护进程的工作就是打开一个端口,并且等待(Listen)进入连接
  • 如果客户端发起一个连接请求,守护进程就创建(Fork)一个子进程响应这个连接,而主进程继续监听其他的服务请求
  • 运行独立的守护进程工作方式称作:stand-alone
基于xinetd的工作模式
  • 支持对TCP、UDP、RPC服务的管理
  • 可以实施基于时间段的访问控制
  • 功能完备的log功能,可以记录连接成功、连接失败的行为
  • 能够有效地防止拒绝服务(DoS)的攻击
  • 能够限制同时运行的同一类型的服务器的数目
  • 能够限制log文件大小
  • 能够将某个服务绑定在特定的系统接口上,从而实现只能允许私有网络访问某项服务
  • 能够实现作为其它系统的代理
stand-alone与xinetd区别与联系

standalone一次性启动,运行期间一直驻留在内存中,优点是对接入信号反应快,缺点是损耗了一定的系统资源,
因此经常应用于对实时反应要求较高的 专业FTP服务器.

xinetd只在外部连接发送请求时才调用FTP进程,不适合应用在同时连接数量较多的系统。不占用系统资源。

反应速度:standalone > xinetd
占用资源:standalone > xinetd

telnet服务的配置过程、telnet命令使用

yum install -y telnet telnet-server

chkconfig --list #查看启用情况

编辑(新建)/etc/xinetd.d/telnet

重新启动服务 systemctl restart xinetd

netstat -ntlp | grep 23

ftp两种工作模式的区别与联系(含图)

  • 主动模式PORT(服务器 主动连接 客户端)
  • 被动模式PASV (服务器 被动等待 客户端连接)
主动模式PORT

在这里插入图片描述

指的是FTP服务器“主动”去连接客户端的数据端口来传输数据

被动模式PASV

在这里插入图片描述

指的是FTP服务器“被动”等待客户端来连接自己的数据端口

ftp的配置过程、ftp命令的使用

FTP配置

yum install -y vsftpd ftp

默认会创建一个名为ftp用户,home目录为: /var/ftp

默认是同时监听IPv6、IPv4,端口 21

配置文件目录:/etc/vsftpd

FTP命令

ftp xx.xx.xx.xx | open xx.xx.xx.xx

get | mget filename

put | mput filename

binary | acsii 设置文件传输方式

cd 在远程主机切换目录

lcd 在本地主机切换目录

ls 在远程主机上执行ls

mkdir 在远程主机上创建目录

close 关闭

quit 退出

第八讲

shell程序的特点与用途

特点
  • shell程序可以认为是将shell命令按照控制结构组织到一个文本文件中,批量的交给shell去执行
  • 不同的shell解释器使用不同的shell命令语法
  • shell程序解释执行,不生成可以执行的二进制文件
  • shell使用解释型语言,不需重新编译
  • 它适合于编写执行相对简单的任务的工具,因为它更强调易于配置、维护和可移植性
  • 它不适合用来完成时间紧迫型和处理器忙碌型的任务
用途
  • 可以帮助用户完成特定的任务,提高使用、维护系统的效率
  • 可以更好的配置和使用Linux,实现自动化运维

shell程序的编写、执行和调试

程序编译和执行过程

一般步骤

  • 编辑文件
  • 保存文件
  • 将文件赋予可执行的权限
  • 运行及排错

常用到的命令

  • vi 编辑、保存文件
  • ls -l 查看文件权限
  • chmod 改变程序执行权限
  • 直接键入文件名运行文件

一般结构

  • shell类型
  • 函数
  • 主过程

变量声明与使用、read、位置变量、 H O M E 、 HOME、 HOMEPATH、$?

变量的声明和使用
变量是弱类型
  • 声明变量不用声明类型

  • 可以存储不同类型的内容

  • 大小写区分

格式

变量=值 (注意:等号两侧不能有空格)

变量的引用

格式:

  • $变量名 变量名为一个字符时使用

  • ${变量名} 变量名多于一个字符时使用

read

使用read将用户的输入赋值给变量

位置变量

bash在解释用户命令时,会把所输入的命令后面的参数使用位置变量传递给bash脚本程序

$0则代表脚本的名字

$$1, 2 … 2… 2n分别代表参数1、参数2…参数n

$*:这个变量包括参数的列表(字符串)

$@:这个变量包括参数的列表(数组)

$#:这个变量包括参数的个数

有点类似形参与实参

$* 所有参数看做一个整体
$@ 所有参数不看做一个整体,而是区分对待

环境变量
环境变量说明
$HOME用户的主目录
$IFS内部的域分隔符,一般为空格符、制表符或换行符
$PATH寻找命令或可执行文件的搜索路径列表,路径以冒号分隔
$$Shell脚本的进程号
$?紧邻的前驱命令的返回值 0=成功 1=失败
$TERM使用的终端类型
$SHELL查看当前用户所使用的的shell

双引号、单引号和倒引号的区别和联系

双引号
  • 字符串通常被放在双引号中
  • 如果在参数中包含一个或多个空白字符,必须给参数加双引号
  • 如果把一个带有$字符的变量放在双引号中,程序执行到该行时会把变量替换为它的值
  • 可用\字符取消$的特殊含义
单引号

由单引号括起来的字符都作为普通字符出现

倒引号

倒引号括起来的字符串都被shell解释为命令行,在执行时shell会执行该命令行,并以它的标准输出结果取代整个倒引号部分

简单数学运算、条件判断(字符串、数学)、逻辑运算

简单数学运算

expr命令计算一个表达式的值

格式 :expr arg

说明:

运算符和参数之间要有空格分开

通配符号(*)作为乘法运算符时要用\、“”、‘’符号修饰(注意是\)

let命令

条件判断

[ condition ] #[]右边和左边需要有空格

注意:

判断结果的一般定义:(与大多数语言不一样)

真:0

假:1

常用的文件属性条件判断
-f filename如果fn存在且fn为普通文件则返回真,否则返回假。 file
-b filename如果fn存在且fn为块设备则返回真,否则返回假。 block
-e filename如果fn存在则返回真,否则返回假。 exist
-d filename如果fn 存在且fn为目录则返回真,否则返回假。 directory
-r filename如果fn存在且fn可读则返回真,否则返回假。 read
-w filename如果fn存在且fn可写则返回真,否则返回假。 write
-x filename如果fn存在且fn可执行则返回真,否则返回假。 execute
-O filename如果fn存在且被当前用户拥有则返回真,否则返回假。
-L filename如果fn存在且fn为符号链接则返回真,否则返回假。
常用字符串属性条件判断
string_1 = string_2如果string_1和string_2两个字符串相等则返回真,否则返回假;
string_1 != string_2如果string_1和string_2两个字符串不相等则返回真,否则返回假;
-z string如果字符串string的长度为0则返回真,否则返回假; zero
-n string如果字符串string长度不为0则返回真,否则返回假;
string同-n string,如果字符串string长度不为0返回真,否则返回假。
常用的整数关系条件判断
mum_1 –eq num_2如果num_1和num_2相等则返回真,否则返回假;
mum_1 –ne num_2如果num_1不等于num_2则返回真,否则返回假;
mum_1 –gt num_2如果num_1大于num_2则返回真,否则返回假;
mum_1 –lt num_2如果num_1小于num_2则返回真,否则返回假;
mum_1 –le num_2如果num_1小于等于num_2则返回真,否则返回假;
mum_1 –ge num_2如果num_1大于等于num_2则返回真,否则返回假;
逻辑运算

逻辑与-a:condition1 -a condition2,如果两个条件都为真,则结果为真

逻辑或-o:condition1 -o condition2,如果两个条件有一个为真,则结果为真

逻辑非!:! condition,结果与condition相反

if、casse、for、while、until(自己看PPT)

控制结构
  • 分支结构
  • 循环结构
常见分支结构
  • if
  • case
常见循环结构
  • for

  • while

  • until

第九讲

gcc命令使用(一次编译、分开编译、不同目录、指定头文件)

gcc:

  • GNU project C and C++ compiler
  • GNU Compiler Collection
一步编译、分步编译
  • 采用一步编译 :

# gcc hello.c say_hello.c -o hello

  • 分步编译的方案 :

思路:

编译每一个.c文件,得到.o的目标文件

将每一个.o的目标文件链接成一个可执行的文件

# gcc -c say_hello.c -o say_hello.o

# gcc -c hello.c -o hello.o

# gcc hello.o say_hello.o -o hello

不同目录、指定头文件

-I 选项指定搜索头文件的特殊目录

# gcc hello.c functions/say_hello.c -o hello – I functions

注意:不在当前目录的文件,需要指定路径

make工具

作用:

根据makefile文件中预定的规则完成对特定文件的编译,最后生成对应的可执行文件

原理:

判断依赖项是否为最新,否则生成新的目标

make层次图、makefile文件

文件名代 码
say_hello.h#ifndef _SAY_HELLO_H #define _SAY_HELLO_H void say_hello(char *str); #endif
say_hello.c#include <stido.h> #include “say_hello.h” void say_hello(char *str) { printf(“%s”,str); }
hello.c#include <stdio.h> #include “say_hello.h” int main() { say_hello(“hello world!\n”); }
make层次图

在这里插入图片描述

makefile

在这里插入图片描述

gdb调试工具的基本使用

gdb 进入调试模式

file指定需要进行调试的程序
step单步(行)执行,如果遇到函数会进入函数内部
next单步(行)执行,如果遇到函数不会进入函数内部
run启动被执行的程序
quit退出gdb调试环境
print查看变量或者表达式的值
break设置断点,程序执行到断点就会暂停起来
shell执行其后的shell命令
list查看指定文件或者函数的源代码,并标出行号

静态函数库、动态函数库的创建与使用

静动态函数库一般都放在/usr/lib目录下

静态函数库

名字一般是libxxx.a

动态函数库

名字一般是libxxx.so

相对于静态函数库,动态函数库在编译的时候并没有被编译进目标代码中,程序执行到相关函数时才调用该函数库里的相应函数,因此动态函数库所产生的可执行文件比较小

静态函数库的创建与使用

链接静态库 man ar

# ar -rsv libpr.a pr1.o pr2.o //固定格式lib*

-rv:将文件插入库文件中,显示结果

#ar: creating libpr.a

>>a - pr1.o

>>a - pr2.o

#ls -l libpr.a

>>-rw-r–r-- 1 root root 1942 07-04 05:40 libpr.a

加载库文件编译main.c

# gcc -o main main.c -L. -lpr

# ls -l main

>>-rwxr-xr-x 1 root root 4998 07-04 05:48 main

# ./main

>>this is the first lib src!

>>this is the second lib src!

动态函数库的创建与使用

生成动态库

■**#** gcc -fpic -shared -o libpr.so pr1.c pr2.c

■**#** ls -l libpr.so

>>-rwxr-xr-x 1 root root 4326 07-04 05:53 libpr.so

隐式调用动态库

■**#** gcc -o main_so main.c ./libpr.so

■**#** ls -l main_so

>>-rwxr-xr-x 1 root root 4994 07-04 05:54 main_so

■**#** ./main_so

>>this is the first lib src!

>>this is the second lib src!

第十讲

磁盘设备的命名方式

Linux系统磁盘设备命名方式遵循一定的规则

  • 前两个字母表示分区所在设备的类型
    hd:IDE硬盘
    sd:SCSI硬盘(U盘,移动硬盘等)
  • 第三个字母表示分区在哪个设备上
    hda:第一块IDE硬盘
    sda:第一块SCSI硬盘
    sdb:第二块SCSI硬盘
  • 数字表示分区的次序
    hda1:第一块IDE硬盘第一个分区
    sdb2:第二块SCSI硬盘第二个分区
  • 查看硬盘及分区情况
    fdisk -l

Linux的文件系统、VFS的功能和作用(含图)

常见的文件系统

FAT、NTFS、ExtFAT、ext2、ext3、xfs、APFS

Linux支持哪些文件系统

输入命令 cat /proc/filesystems 查看

虚拟文件系统VFS
功能
  • 记录可用文件系统的类型
  • 将设备与对应的文件系统联系起来
  • 处理面向文件的通用操作
  • 涉及到针对文件系统的操作时,把他们映射到相关的物理文件系统
作用
  • 更好的支持多种不同的文件系统,把文件系统从操作系统和系统服务中分离处理来,在它们之间使用了一个接口层,也就是虚拟文件系统VFS(Virtual File System)
  • VFS是Linux内核中的软件层,它在内核中提供了一组标准的、抽象的文件操作,允许不同的文件系统实现共存,并向用户空间程序提供统一的文件系统接口
  • 通过VFS将不同的文件系统的实现细节隐藏起来,从外部看上去,所有的文件系统都是一样的

请添加图片描述

设备挂载过程

  • 查看设备:使用命令 “fdisk -l” 可以查看系统的存储设备
  • 挂载设备:首先使用mkdir命令建立挂载点目录,然后再使用mount命令挂载相关设备
  • 访问设备
  • 卸载设备:用户在使用完挂载设备后,不能直接将挂载设备从系统拔出,否则会出现问题,严重的会导致系统崩溃。系统必须先执行卸载命令然后再把该设备拔出,要使用umount命令

mkfs、fdisk、mount、umount、df、du、whoami、who、w、jobs、bg、fg、&(后台进程启动)(自己看PPT)

进程的概念、进程和程序的区别与联系

进程的概念
  • Linux系统上所有运行的东西都可以称之为一个进程,如每个用户任务、每个系统管理任务
  • 进程是一个程序的运行

Linux操作系统包括三种不同类型的进程

  • 交互进程:由shell启动的进程
  • 批处理进程:这种进程和终端没有联系,是一个进程序列
  • 守护进程:在后台持续运行的进程
进程和程序的区别与联系
  • 程序只是一个静态的指令集合,不占系统的运行资源,只占用磁盘空间
  • 进程是一个随时都可能发生变化的、动态的、使用系统运行资源(cpu,内存等)的程序
  • 一个程序可以启动多个进程

at和crontab的区别与联系、各自的创建、删除、查看

at和crontab的区别与联系
  • at命令产生的进程调度不具有周期性,只能在时间条件满足时执行一次(不具有周期性)
  • crontab让使用者在固定时间或固定时间间隔执行程序(重复周期性)
at

作用:指定在将来的某个时间点执行某些命令

用法: at [选项] [时间]

at now +1min -f xx在未来的1min时执行指定文件xx

crontab

对用户来说,只需要关注自己的crontab文件的撰写,不需干涉crond进程的执行

因为一个用户只有一个crontab文件,所以,crontab文件不能直接创建或者直接修改(root可以),必须通过crontab命令得到

crontab命令用于安装、删除或者列出用于驱动cron后台进程的crontab文件

用法:f1 f2 f3 f4 f5 program

  • 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。

  • 注意:f5:星期几 (0 - 6) (星期天 为0)

  • program中的执行不需要"."

    例子:30 8-23/1 * * * /con3.sh

    在早上8点30分到晚上23点30分之间,每隔1小时执行con3.sh文件

ps、kill、free(自己看PPT)

日志文件

  • 日志文件(log files)是包含关于系统消息的文件,包括内核、服务、在系统上运行的应用程序等
  • 多数的日志文件位于/var/log目录下,不同的日志文件记载不同的信息
  • 某些程序(如apache)在/var/log中有单独的日志文件目录
  • 多数日志文件都是用纯文本格式,可以使用任何文本编辑器如vi查看它们
  • 大多数日志文件都需要拥有特权才允许查看

第十一讲

Docker与虚拟机的区别

特性普通虚拟机Docker
跨平台通常只能在桌面级系统运行,例如 Windows/Mac,无法在不带图形界面的服务器上运行支持的系统非常多,各类 Windows 和 Linux 都支持
性能性能损耗大,内存占用高,因为是把整个完整系统都虚拟出来了性能好,只虚拟软件所需运行环境,最大化减少没用的配置
自动化需要手动安装所有东西一个命令就可以自动部署好所需环境
一致性环境一致性不高,不同系统差异大一致性好,不同系统都一样部署方式

Docker的优势

常规应用开发部署方式:

Windows 上开发、测试 --> 到 Linux 服务器配置运行环境部署

经典问题:这段代码在我机器上没问题啊!!!

Docker 开发部署流程:

Windows 上开发、测试 --> 打包为 Docker 镜像(可以理解为软件安装包) --> 各种服务器上只需要一个命令部署好

优点:确保了不同机器上跑都是一致的运行环境,不会出现我机器上跑正常,你机器跑就有问题的情况。

docker search, pull, images, run, start, stop, restart, ps, rm, attach, exec, commit, build, tag, push(自己看PPT)

Dockerfile

用来构建镜像的文本文件,包含所需的指令和说明

Dockerfile结构:

基础镜像信息(centos ubuntu …… nginx ……)

维护者信息(docker search可查看)

镜像操作指令(tar yum make)

容器启动时执行指令(系统启动时,第一个加载的程序/脚本/命令)

Dockerfile操作指令
FROM [镜像]指定新镜像所基于的镜像,第一条指令必须为FROM指令,每创建一个镜像就需要一条FROM指令,例如centos:7。from有两层含义:①开启一个新的镜像②必须写的一行指令
MAINTAINER [名字]说明新镜像的维护人信息(可写可不写)
RUN命令每一条RUN后面跟一条命令,在所基于的镜像上执行命令,并提交到新的镜像中,RUN必须大写
CMD [“要运行的程序”,“参数1”、“参数2”]指定启动容器时需要运行的命令或者脚本,Dockerfile只能有一条CMD命令,如果指定多条则只能执行最后一条,“bin/bash”也是一条CMD,并且会覆盖image镜像里面的cmd。
EXPOSE [端口号]指定新镜像加载到Docker时要开启的端口暴露端口,就是这个容器暴露出去的端口号。
ENV [环境变量] [变量值]设置一个环境变量的值,会被后面的RUN使用。容器可以根据自己的需求创建时传入环境变量,镜像不可以。
ADD [源文件/目录] [目标文件/目录]①将源文件复制到目标文件,源文件要与Dockerfile位于相同目录中,②或者是一个URL,③若源文件是压缩包则会将其解压缩。
COPY [源文件/目录] [目标文件/目录]将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中,copy只能用于复制,add复制的同时,如果复制的对象是压缩包,ADD还可以解压,copy比add节省资源。
VOLUME [“目录”]在容器中创建一个挂载点,简单来说就是-v,指定镜像的目录挂载到宿主机上(由容器创建和管理)。
USER [用户名/UID]指定运行容器时的用户
WORKDIR [路径]为后续的RUN、CMD、ENTRYPOINT指定工作目录,相当于是一个临时的“cd",否则需要使用绝对路径,例如workdir /opt。移动到opt目录,并在这下面的指令都是在opt下执行。

第十二讲

X Window的作用和组成(含图)、每个组成部分的作用

X Window的作用
  • 良好的网络支持

  • 个性化的窗口界面

  • 不内嵌于操作系统

X Window系统由三个基本元素组成
  • X Server服务端
  • X Client客户端
  • Xlib通信通道

请添加图片描述

【1】X 服务端

由系统供应商提供,通常无法被用户修改

只是一个普通的用户程序

每一套显示设备只对应唯一的X Server
是控制输入及输出设备并维护相关资源的程序,它接收输入设备的信息,并将其传给X Client,而将X Client传来的信息输出到屏幕上(在屏幕上构造方块(窗口),然后画出里面的元素)
【2】X 客户端

是应用程序的核心部分,它与硬件无关,每个应用程序就是一个X Client
X Client无法直接影响视窗行为或显示效果,它们只能发送一个请求给X Server,由X Server来完成这些的请求
【3】X 通信通道

X通信通道的主体是xlib(X函数库)

X Client调用xlib,利用相应的通信功能向X Server发出请求

X Server完成任务之后,同样调用xlib把结果显示指定的设备上去

修改系统运行级别(含运行级别0 3 5 6)

  • 临时更改(n为级别号)
    • init n
    • Telinit n
    • Startx(启动图形化环境,需要安装图形化界面)
  • 长期更改
    • systemctl set-default *.target

易错

  1. 当参数值里带有空格时 需要用双引号把参数包起来 例如 number=“hello world”,“$number”
    建议传参时每个参数都加上双引号

  2. $要不要跟{}

    大括号 {} 的作用是限定大括号里面的字符串是一个整体,不会跟相邻的字符组合成其他含义。推荐使用${}可以避免一些不必要的错误。

  3. date 年月日时分秒可写成
    date +‘%Y-%m%d %H:%M:%S’

    date +“%Y-%m%d %H:%M:%S”

    date ‘+%Y-%m%d %H:%M:%S’(推荐后两种)
    date “+%Y-%m%d %H:%M:%S”

  4. 对于case里的剩下的其他模式 可写成
    *)

    ;;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值