linux复习知识点版

发布于:2024-04-17 ⋅ 阅读:(16) ⋅ 点赞:(0)

试列举linux的主要特点:

与UNIX系统兼容

自由软件,源码公开

性能高,安全性强

便于定制和再开发

互操作性高

支持多任务,真64位运算


bash的命令基本格式:

  • 命令名必须是小写的英文字母
  • 一般格式中由方括号括起来的部分是可选的
  • 选项以“-”开始,多个选项可用“-”连起来
  • Linux操作系统的联机帮助对每个命令的准确语法都做了说明

命令

说明

who

列出所有正在使用系统的用户、所用终端名和注册到系统的时间

echo

将命令行中的参数显示到标准输出(即屏幕)上

date

在屏幕上显示或设置系统的日期和时间

cal

显示公元19999年中任意一年或者任意一个月的日历

clear

清除屏幕上的信息

passwd

修改用户密码

reboot

重启

poweroff

关机

shutdown

关机

查看命令的帮助信息:

man 命令名:Linux系统命令手册
help 命令名:bash内置命令帮助信息
命令名 –h 或 命令名 --help:一般命令的内部帮助信息

文件组织方式:
树状结构        “根文件系统”        根目录(/) 是寻找所有文件以及其他文件系统的起点

文件路径:从某一树节点出发,沿树的分支到达目标文件或目录所在节点的路径

绝对路径:从根目录(/)出发直到目标文件或目录的路径
相对路径:从当前所在目录出发直到目标文件或目录的路径


~ 表示用户的主目录
. 表示当前目录
.. 表示上一级目录

在当前目录/home/liu

  /home/liu/abc  =  ./abc

  /home = ../


通配符
*:匹配任何字符和任何数目的字符
?:匹配单一数目的任何字符
[ ]:匹配[ ]之内的任意一个字符
[! ]:匹配除了[! ]之外的任意一个字符,!表示非的意思


文件类型: 

Linux 中“万物皆文件”
普通文件、目录、字符设备、块设备、 套接字等
类型不同,操作界面相同
普通文件
  文本文件、数据文件、可执行的二进制程序
目录文件
  是一种特别文件,利用它可以构成文件系统的分层树状结构
设备文件
  是一种特别文件,用来标记各个设备驱动器。字符设备、块设备等。   
符号链接文件
   是一种特殊文件,提供对其他文件的引用

命令

说明

ls

显示指定工作目录下之内容

pwd

显示当前工作目录的绝对路径

cd

切换当前工作目录

cp

将源文件或目录复制到目标文件或目录中

mv

对文件或目录重新命名,或者将文件从一个目录移到另一个目录中

rm

删除文件和目录

mkdir

创建目录

rmdir

从一个目录中删除一个或多个子目录

命令

说明

cat

由第一行开始显示文件内容

more

一页一页的显示文件内容

less

一页一页的显示文件内容(与more类似),可前后翻页

head

取出并显示文件前面几行

tail

取出并显示文件后面几行

touch

修改文件或者目录的时间标签

grep

查找文件里符合指定模式的字符串,并显示包含该模式的所有行

sort

对文本文件的各行进行排序

uniq

检查及删除文本文件中重复出现的行

以下了解即可,wc掌握一下: 

comm

对两个已排序文件进行逐行比较

diff

对两个文件进行逐行比较,列出差异信息

cmp

对两个文件进行逐字节比较,显示第一个差异位置

find

在指定目录下查找相应的文件

wc

统计指定文件的字节数、字数和行数

链接:为一个文件起多个名字,即别名
实现文件链接(绝对路径):

  • 同目录下不同文件名
  • 不同目录下同文件名

文件链接形式:

  • 硬链接 – 对象指针
  • 软链接(或符号链接) – 快捷方式

 权限操作:

文件主
文件所有者( owner
某文件的文件主 (owner) 和超级用户 (root) 具有对该文件的 控制权限
每个文件有单独唯一的文件主,以 UID 标记
用户组
管理员为用户分配的用户组
一个用户可以属于多个用户组
一个用户组也可以属于另外的用户组
每个文件属于一个用户组,以 GID 标记

 

文件类型

-  :普通文件        d :目录        l  :符号链接        c :字符设备        b :块设备

文件 /目录权限项目        • 读(r)        写(w)        执行(x)

chmod 设置文件或目录的存取权限
格式:chmod  [对象]  [操作符]  [模式]  文件
对象:u:文件主;g:同组用户;o:其他用户;a:所有用户
操作符:+:添加权限;-:取消权限;=:重置权限
模式:r/w/x/X

文件打包操作:
 tar

  • 打包/解包文件
  • 格式:tar  [选项]  文件或者目录

常用选项
-c:创建新的打包文件。
-t:列出打包文件的内容,查看已经打包了哪些文件。 
-x:从打包文件中释放文件。 
-f:指定打包文件名,需放在选项最后。 
-v:详细列出 tar 处理的文件信息。 
-z:用 gzip 来压缩/解压缩打包文件。(注:顺序一般为xcvzf)

例:

file 压缩并打包为 file.tar.gz
tar  zcvf   file.tar.gz  file
file.tar.gz 解压到 file
tar zxvf file.tar.zip

进程操作:

命令

说明

ps

查看当前系统中运行的进程信息

nice

修改进程优先级

kill

终止指定进程的运行

sleep

将进程暂停执行一段时间


 


文件

内容

passwd

用户名:密码:用户ID:ID:用户描述:主目录:登录shell

shadow

登录名:加密密码:上次更改时间:不可更改天数:有效期:...

group

组名:密码:ID:用户列表

 用户账号相关文件
passwd:用户关键信息
shadow:账号密码
group:用户组

命令

说明

useradd

添加用户账号

userdel

删除用户账号

passwd

设置用户密码

groupadd

添加用户组

groupdel

删除用户组

groupmod

修改组属性

命令

说明

su

切换为超级用户(root

sudo

使用超级用户权限执行系统管理命令

id

查看指定用户当前的UIDGID和用户所属的组信息

groups

查看指定用户当前所属的组

whoami

查看当前用户名

wwho

查看登录用户及相关信息

命令

说明

chmod

设置文件或目录的存取权限

umask

显示或设置新建文件权限的掩码

chgrp

改变文件或目录所属的用户组

chown

改变文件或目录的所有者或所属组

了解即可:

命令

说明

mkfs

创建文件系统

mount

安装文件系统

/etc/fstab

系统初始化分区安装配置文件

umount

卸载文件系统

mkswap

创建交换分区

swapon

激活交换分区

fsck

检查文件系统的状态

du

查看指定的目录或文件所占用的磁盘空间

df

显示目前文件系统磁盘使用情况

fdisk

创建和管理硬盘分区表


系统备份:

  •  完全备份        定期对系统做一次全面备份
  • 增量备份         仅备份短时间内修改过的数据
  • 更新备份         备份大版本之间修改的数据

 备份
        tar -czvf log.tar.gz /tmp/log
恢复
        tar -xzvf log.tar.gz
定时
crontab -e 编辑定时任务配置表
50 7 * * * /sbin/service sshd start   每天7:50开启ssh服务
0 0 1,15 * * fsck /home: 每月1号和15号检查/home 磁盘

 Linux系统安全设定方式
1.取消不必要的服务
2.限制远程存取
3.隐藏重要资料
4.修补安全漏洞
5.采用安全工具进行经常性的安全检查

系统安全管理三要素:

1.物理安全
①机房安全:报警、灾备。
②通信安全:防止信息泄露(被监听)。
③关键信息:钥匙或信用卡识别设备、关键文档资料

2.普通用户安全管理:保护用户资料安全

3. 超级用户安全管理 

文件

内容

ping

测试网络连通及速率

ifconfig

配置网络接口,即指定一个网络接口的地址,或者设置网络接口的参数

netstat

TCP/IP网络协议和连接进行统计

route

查看路由信息,为相应连接配置路由信息

Shell:解释性编程语言        执行复杂的系统管理任务

Shell脚本:程序+命令->文件        纯文本        .sh后缀        逐行执行

使用文本编辑器编辑脚本文件
vi script.sh

为脚本文件添加可执行权限
chmod a+x script.sh

输入重定向到shell脚本
bash < script.sh
不能带参数
以脚本名作为bash参数
在子shell中执行:bash script.sh  [参数1  参数2 ……]
在当前shell中执行: .  script.sh [参数1  参数2 ……]
直接执行
需有脚本文件的执行权限
文件路径执行:/path/script.sh              PATH=$PATH:.
文件目录添加到命令搜索路径(PATH)后,文件名执行:script.sh

 以 #! 开头:通知系统用何解释器执行此脚本
#!/bin/bash

注释
# 注释内容
# 脚本名称
# 脚本功能
# 作者及联系方式
# 版本更新记录
# 版权声明
# 对算法做简要说明(如果是复杂脚本)

引号

说明

双引号“”

$`\外的字符均作为普通字符

$ 变量替换,` 命令替换,\ 转义字符

单引号’’

所有字符均作为普通字符

倒引号``

字符串被shell解释为命令行,执行后以输出结果替换

使用命令的输出,常用于
在文本中嵌入命令的执行结果
命令参数是另一个命令执行的结果
格式
$(command)
`command`
cmd1 $(cmd2)
cmd1 `cmd2`
示例
echo now is `date`
echo I am in $( pwd )
变量名
字母、数字、下划线
起始不能为数字
大小写敏感
变量赋值
变量名 = 字符串
= 左右不能有空格
字符串内有空格时,需用引号括起来
可重新赋值
引用变量值
$ 变量名
${ 变量名 }
命令替换赋值
变量名 =` 命令表 `
变量名 =$( 命令表 )

输入:
read
从键盘上读取数据,赋值给指定的变量
格式: read  [ 选项 变量 1  [ 变量 2 ……]
选项
-r :取消“ \ ”的转义作用
-t timeout :设置读取时限,超时返回失败状态
-u fd :从文件描述符 df 对应的文件读取数据
-n nchars :读取数据长度不超过 nchars
-N nchars :读取数据长度等于 nchars

 输出:

echo
显示变量值或字符串
格式: echo  [ 选项 ]  < 变量或字符串 >
选项
-e :允许转义符
-n :显示内容后不换行

 位置参数:

script.sh  m1  m2  m3  m4  m5  m6  m7  m8  m9  m10     m11    m12
$0             $1   $2   $3    $4   $5   $6    $7   $8   $9   $(10)   $(11)   $(12)
set
为位置参数赋值
格式: set  参数 1  [ 参数 2 ……]
shift
移动位置参数

 算术运算:

let
执行整数算术运算
格式: let  算术表达式  或  (( 算术表达式 )
示例
n=1; let n=++n; echo $n
n=1; ((n+=1)); echo $n
n=1; let “n = n + 1”; echo $n
n=1; r=$((n+1)); echo $r  $n
n=1; r=$((n>0)); echo $r $n
expr
通用的表达式计算命令
格式: expr  表达式
* / () 需转义或用 括起来
示例
n=2; r=`expr $n \* 3`; echo $r
n=2; r=`expr $n “*” 3`; echo $r
a=1; b=0; r=`expr $a \> $b`; echo $r

 控制结构:

条件
if … then … elif … then … else … fi
选择
case … in … esac
循环
while … do … done
until … do … done
for … [in] … do … done 

表达式

功能

-r  文件名

若文件存在并且是用户可读的,则测试条件为真。

-w  文件名

若文件存在并且是用户可写的,则测试条件为真。

-x  文件名

若文件存在并且是用户可执行的,则测试条件为真。

-f  文件名

若文件存在并且是普通文件,则测试条件为真。

-d  文件名

若文件存在并且是目录文件,则测试条件为真。

-e  文件名

若文件存在,则测试条件为真。

-s  文件名

若文件存在并且文件的长度大于0,则测试条件为真。

-t  文件描述字

若文件被打开且其文件描述字是与终端设备相关的,则测试条件为真。默认的“文件描述字”是1

表达式

功能

-z   s1

如果字符串s1的长度为0,则测试条件为真。

-n  s1

如果字符串s1的长度大于0,则测试条件为真。

s1

如果字符串s1不是空字符串,则测试条件为真。

s1  =  s2

如果s1等于s2,则测试条件为真。“=”也可以用“==”

代替。在“=”前后应有空格。

s1 != s2

如果s1不等于s2,则测试条件为真。

s1 < s2

如果按字典顺序s1s2之前,则测试条件为真。

s1 > s2

如果按字典顺序s1s2之后,则测试条件为真。

表达式

功能

n1 -eq  n2

如果n1等于n2,则测试条件为真。

n1 -ne  n2

如果n1不等于n2,则测试条件为真。

n1 -lt  n2

如果n1小于n2,则测试条件为真。

n1 -le  n2

如果n1小于或等于n2,则测试条件为真。

n1 -gt  n2

如果n1大于n2,则测试条件为真。

n1 -ge  n2

如果n1大于或等于n2,则测试条件为真

逻辑与

逻辑或

逻辑非

[ expr1 -a expr2 ]

[ expr1 -o expr2 ]

[ ! expr ]

[[ pattern1 && pattern2 ]]

[[ pattern1 || pattern2 ]]

[[ ! pattern ]]

(( expr1 && expr2 ))

(( expr1 || expr2 ))

(( ! expr ))

条件控制: 

if expr1      # 如果 expr1 为真(返回值为0)

then          # 那么

   commands1  # 执行语句块 commands1

elif expr2    # expr1 不真,而 expr2 为真

then          # 那么

   commands2  # 执行语句块 commands2

 ... ...      # 可以有多个 elif 语句

else          # else 最多只能有一个

   commands4  # 执行语句块 commands4

fi            # if 语句必须以单词 fi 终止

 循环结构:

for variable in list

# 每一次循环,依次把列表 list 中的一个值赋给循环变量

do          # 循环体开始的标志

  commands  # 循环变量每取一次值,循环体就执行一遍

done        # 循环结束的标志,返回循环顶部


for ((expr1;expr2;expr3)) # 执行 expr1

do # expr2的值为真时进入循环,否则退出 for循环

  commands  # 执行循环体,之后执行 expr3

done        # 循环结束的标志,返回循环顶部

Linux系统三层架构
靠近硬件的底层是 内核 ,即 Linux 操作系统常驻内存部分。
中间层是内核之外的 shell ,即操作系统的系统程序部分。
最高层是 应用层 ,即用户程序部分

 

gdb:

控制程序执行

 停止点:

断点 Breakpoint ,缩写 b ):程序执行到设置的断点的行就暂停, gdb 报告程序暂停处的断点信息,用于显示函数调用的踪迹和变量的值
观察点 Watchpoint ):程序执行到某个表达式(变量)的值发生变化时暂停
捕捉点 Catch point ):捕捉程序运行时出现的事件
运行程序
run [ args ]
args :传给被调试程序的命令行参数
单步跟踪
step [N]
程序执行 N 行后暂停, N 默认为 1 ,执行进入调用的函数内部
next [N]
step ,执行不进入调用的函数内部
连续执行
continue c fg
程序继续执行到下一停止点
makefile 文件:定义一系列规则来指定要编译的文件、编译顺序、文件间的依赖关系以及变量定义、注释等

 

系统调用
操作系统提供的、与用户程序之间的接口
执行过程
CPU 执行到用户程序中的系统调用时,处理机状态从用户态变为核心态,
系统调用完成后,控制返回到用户程序。
调用方式
与过程调用类似:函数名 + 参数
区别:过程调用不能进入核心态,系统调用可进入核心态

 

调用方式
系统调用和库函数调用方法相同
C 函数形式调用:类型、名称、参数
需使用对应的头文件: / usr /include/sys / usr /include/ linux
示例

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

int open(const char *path, int oflags);  #函数声明

int fd = open(“/home/user/file1”, O_RDWR); #函数调用


文件操作:

相关系统调用:
creat open close read write lseek link unlink mkdir rmdir chdir chmod
相关头文件:
<sys/ types.h > <sys/ stat.h > < fcntl.h > < unistd.h >

进程控制:

相关系统调用
fork exec wait exit getpid sleep nice
相关头文件
< unistd.h > <sys/ types.h > <sys/ wait.h >

 创建子进程案例:

#include <stdio.h>
#include <unistd.h>
//父子进程代码共享,但数据独有
pid_t  g_val = 100;
int main()
{
    pid_t pid = fork();//创建子进程
    if(pid < 0) {
        printf("fork error!\n");
        return -1; 
    }
    else if(pid == 0) {
        //子进程
        g_val = 200;
        printf("This is Child! g_val = %d p = %p\n",g_val,&g_val);
    }
    else {
        //父进程
        sleep(1);
        printf("This is Parent! g_val = %d p = %p\n",g_val,&g_val);
    }
    return 0;
}

pid_t类型,其实就是int,在内核中是通过typedef重命名过的,我们把其当做int类型即可。

如果创建子进程失败,会返回-1,是小于0的,而如果创建子进程成功,该函数则会返回俩个值,这一点和普通的函数有很大区别。它会给子进程返回0值,而给父进程返回子进程的pid(一个大于0的数),也正是通过给父子进程返回值的不同,从而我们可以使用选择语句对齐进行分流,从而让父子进程执行不同的代码,而达到我们创建子进程的某种目的。