linux系统基本操作原理和操作技巧

第一天内容:
1>. 命令解析器
2>. Linux快捷键
3>. Linux 系统目录结构
4>. 用户目录
5>. 文件和目录操作
6>. 文件和目录的属性
7>. 文件权限, 用户, 用户组
8>. 文件的查找和检索
9>. 软件的安装和卸载
10>. U盘的挂载和卸载

  1. 命令解析器:
    shell – unix操作系统
    bash – Linux操作系统
    本质: 根据命令的名字, 调用对应的可执行程序

  2. Linux 快捷键
    1>. 命令和路径补齐:
    tab: 自动补齐,当有多个相似的补齐选择时,可能要多次按tab键
    2>. 主键盘快捷键:
    1). 历史命令切换:敲击在主键盘上的向上箭头可以查看以往输入的命令
    历史命令:history
    向上遍历:ctrl+p//向上滚动
    向下遍历:ctrl +n//向下滚动
    2). 光标移动:
    向左:ctrl+b
    向右:ctrl+f
    移动到头部: ctrl+a
    移动到尾部:ctrl+e
    3). 删除字符:
    删除光标后边的字符:Ctrl + D//删除光标位置的一个字符(delete键功能)
    删除光标前边的字符:Ctrl+h或者Ctrl + W//删除光标位置的前一个单词(Alt + Backspace组合键功能)
    删除光标前的所有内容:Ctrl + &//恢复Ctrl + H/D/W删除的
    4)常见的快捷键
    F11:全屏切换
    Ctrl + →:光标移动到上一个单词的词首
    Ctrl + ←:光标移动到下一个单词的词尾
    Ctrl + T:将光标位置的字符和前一个字符进行位置交换
    Ctrl + U:剪切从行的开头到光标前一个位置的所有字符
    Ctrl + K:剪切从光标位置到行末的所有字符
    Ctrl + Y:粘贴Ctrl + U//Ctrl + K剪切的内容
    Ctrl + H/*:删除光标位置的前一个字符(backspace键功能)
    Ctrl + u 从光标处删除至命令行首
    Ctrl + k 从光标处删除至命令行尾
    Ctrl + w 从光标处向左删除至单词首
    Alt + d 从光标处向右删除至单词尾
    Ctrl + Shift + C:复制
    Ctrl + Shift + V:粘贴
    Ctrl + P:显示上一条历史命令
    Ctrl + N:显示下一条历史命令
    Ctrl + R:反向搜索历史命令
    Ctrl + J/M:回车(同enter键功能)
    F1:打开帮助指南

  3. Linux系统目录结构:
    1>. 根目录: / 后面加子目录
    2>. /bin: bin是Binary的缩写, 这个目录存放着最经常使用的命令。
    3>. /dev: dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的
    4>. /etc:这个目录用来存放所有的系统管理所需要的配置文件和子目录。
    5>. /home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
    6>. /lib:这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
    7>. /media: linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
    8>. /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
    9>. /root:该目录为系统管理员,也称作超级权限者的用户主目录。
    10>. /usr: 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录。

  4. 用户目录:
    1>. 绝对路径: 从根目录开始写 /home/itcast/aa
    2>. 相对路径: bb 相对于当前的工作目录而言
    . -> 当前目录
    … -> 当前的上一级目录
    - -> 在临近的两个目录直接切换 cd -
    3>. itcast@ubuntu:~$
    itcast: 当前登录用户
    @: at 在
    ubuntu: 主机名
    ~: 用户的家目录(宿主目录)
    $: 当前用户为普通用户
    #: 超级用户 – root

  5. 文件和目录操作
    1>. 查看我的目录
    1). tree – 必须安装该软件
    2). ls -la//目录的详细数据(所以者-对应三种用户操作r,w,x;同组用户r,x;其他人r)
    ls -加参数
    2>. 在目录之间切换:
    cd 加目录名
    cd -相邻的目录之间切换
    反回主目录:
    cd /home/aaa
    cd ~
    cd
    查看当前所在目录:
    pwd
    3>.创建目录
    创建一个目录: mkdir dirName(目录创建时不可以是已存在的)
    创建多个嵌套目录: mkdir dir/dir1/dir2 必须增加参数:-p
    4>.删除空目录:rmdir+删除的空目录
    rm+(-r)+非空目录//相当于递归操作(把记录都删除,难以恢复)
    rm+ri +非空目录,可以循环提示是否删除
    5>. 拷贝文件或者目录:cp +拷贝文件+粘贴文件(会覆盖以往存在的文件内容)
    cp +拷贝文件+粘贴文件±r(可以创建并粘贴在不存在的文件中)
    6>. 查看文件的具体信息:cat +文件名(相对于用于短文件)
    more +文件名(回车一行查看,空格一页翻页,不能反回看前面的内容)
    less +文件名(回车一行查看,空格一页翻页,不能反回看前面的内容,可以用快捷键前后倒)
    head+文件名(显示10行,可以加-参数,前几行的内容)
    tail+文件名
    7>.修改文件名:mv+要修改的文件名+修改文件名
    8>.移动文件:mv+移动文件名+移动的地址(在于第二个参数的不同)
    9>.创建文件快捷方式:ln -s+要创建快捷方式的文件+快捷方式的名(不加-s可以创建硬链接,相当于备份)

  6. 文件或目录属性: (理解内容, 非重点)
    1>. wc//获取文本文件的行数,字数,字节数还有文件名
    2>. od//查看二进制文本文件,加参数(-t,c,d,f,o,u,x,以不同的形式查看文本)
    3>. du//查看当前目录的大小(加参数-h,可以转换)
    4>. df//磁盘的使用情况,加参数-h,可以转换

  7. 文件权限, 用户, 用户组
    1>. 查看当前登录用户:whoami
    2>. 修改文件权限:
    1). 文字设定法: chmod [who] [+|-|=] [mode]
    who:
    文件所有者: u
    文件所属组: g
    其他人: o
    所有的人: a
    +: 添加权限:
    -: 减少权限
    =: 覆盖原来的权限
    mode:
    r: 读
    w: 写
    x: 执行
    2). 数字设定法:
    - : 没有权限
    r: 4
    w: 2
    x: 1
    765
    7 – rwx – 文件所有者
    6 – rw – 文件所属组
    5 – rx – 其他人
    3>. 改变文件或目录的所有者或所属组:chown+新的所有者:所属组+改变目录名,(需要管理员权限,sudo)
    4>. 改变文件或目录所属的组: chgrp+放入的组+文件所属组+改变文件目录名(需要sudo)
    目的修改文件的操作权限

  8. 查找和检索
    1>. 按文件属性查找:
    1). 文件名:find + 查找的目录 + -name + “文件的名字”
    2). 文件大小: find + 查找目录 + -size + +10k
    3). 文件类型: find + 查找目录 + -type + d目录/f普通文件/b块设备/c字符设备/s,socket文件/p管道/l
    2>. 按文件内容查找:
    grep -r “查找的内容” + 查找的路径

  9. 软件的安装和卸载
    1>. 在线安装:
    sudo apt-get install +安装工具名(安装工具)
    sudo apt-get remove+删除工具名(删除工具)
    sudo apt-get update --更新软件列表
    sudo apt-get clean (删除所有软件安装包)
    安装:sudo aptitude install +安装工具
    重新安装:sudo aptitude reinstall+安装工具
    更新:sudo aptitude update
    移除:sudo aptitude remove +工具名
    显示状态:sudo aptitude show+工具名
    2>. deb包安装:
    安装:sudo dpkg -i 安装包.deb
    删除:sudo dpkg -r 安装包
    3>. 源码安装:
    解压缩源代码包
    进入安装目录
    检测文件
    编译源码,生成库和可执行程序
    把库和可执行程序安装系统目录
    删除卸载软件
    案例: 安装 svn
    a. ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
    b. make
    c. sudo make install

  10. U盘的挂载和卸载
    1>.挂载:mount
    系统默认挂载名:/media
    手动挂载目录:/mnt
    fdisk -l或者fdisk -l /dev//查看挂载设备名
    mount命令格式
    mount[-参数][设备名][挂载点][其他参数]
    2>.卸载
    命令unmount +目录名//可以将u盘从指定的目录中卸载
    注意:卸载U盘,终端必须从当前的U盘挂载目录中退出
    第二天

  11. 压缩包管理

  12. 进程管理

  13. 网路管理

  14. ftp服务器搭建

  15. nfs服务器搭建

  16. ssh服务器

  17. scp命令

  18. 其他命令

  19. 关机重启

  20. 压缩包管理
    1>. 压缩包两种格式:
    1). gzip – .gz格式的压缩包
    2). bzip2 – .bz2格式的压缩包。保留源文件
    2>. 工具压缩:
    1). tar – 不使用z/j参数 , 该命令只能对文件或目录打包
    参数:
    c – 创建 – 压缩
    x – 释放 – 解压缩
    v – 显示提示信息 – 压缩解压缩 – 可以省略
    f – 指定压缩文件的名字
    z – 使用gzip的方式压缩文件 – .gz
    j – 使用bizp2的方式压缩文件 – .bz2
    压缩:
    tar zcvf 生成的压缩包的名字(xxx.tar.gz) 要压缩的文件或目录
    tar jcvf 生成的压缩包的名字(xxx.tar.bz2) 要压缩的文件或目录
    解压缩:
    tar jxvf 压缩包的名字(解压到当前目录)
    tar jxvf 压缩包名字 -C 压缩的目录
    2). rar – 必须手动安装该软件
    参数:
    压缩: a
    解压缩: x
    压缩:
    rar a 生成的压缩文件的名字(temp) 压缩的文件或目录
    解压缩:
    rar x 压缩文件名 (解压缩目录)
    3). zip –
    参数:
    压缩目录需要加参数 -r
    压缩:
    zip 压缩包的名字 压缩的文件或目录
    解压缩:
    unzip 压缩包的名字
    unzip 压缩包的名字 -d 解压目录
    总结: 相同之处:
    tar/rar/zip 参数 生成的压缩文件的名字 压缩的文件或目录 — 压缩的时候的语法
    tar/rar/unzip 参数 压缩包的名字 参数(rar没有参数) 解压缩目录 – 解压缩语法

  21. 进程管理:
    1>. 查看当前在线用户的情况:who
    2>. 查看整个系统内部运行的进程状况:ps +参数//5种进程状态,R:运行,S:中断,D:不可中断,Z:僵死,T:停止
    a:显示所有进程,包括其他用户的进程
    u:用户以及其他详细信息
    x:显示没有控制终端的进程
    3>. 终止进程:
    1). 查看信号编号:kill -l
    2). 杀死进程:kill +参数(进程id)
    kill[pid]:通过ps -ef命令找到对应进程pid
    killall[pname]:通过进程名称终止进程
    pkill[pname]:通过进程名称终止进程以及相关所有进程
    xkill:终止界面程序//本人还不知道有啥用
    4>. 查看当前进程的环境变量:
    Linxu下的环境变量的格式: key - value
    key=value:value:value:value
    5>. 任务管理器:top(ctrl+c结束进程任务管理器)

  22. 网络管理:
    1>. 获取网络接口的配置信息:ifconfig
    2>. 测试与目标主机是否联通:ping+ip地址
    3>. 查看服务器域名对应的IP地址: nslookup+域名
    4>.用户管理
    创建用户
    sudo adduser +用户名(luffy)
    sudo useradd +参数/目录文件名(可大写字母)
    su +用户名(切换用户)
    sudo su 超级用户 (root 用户)
    sudo +passwd +用户名(修改其他用户Unix密码)
    sudo+ passwd +root (修改root的unix密码)
    sudo+passwd //修改root的unix密码
    -s:指定新用户登录时的shell类型
    -g:指定所属组,该组必须存在
    -d:用户家目录
    -m:用户家目录不存在时,自动创建该目录
    5>.删除用户
    sudo deluser +用户名(luffy)
    sudo userdel -r +目录或文件名(-r的作用是把用户的主目录一起删除)

  23. ftp服务器搭建: – vsftpd
    作用: 文件的上传和下载
    1>. 服务器端:
    1). 修改配置文件 - 如何修改配置文件 – /etc/vsftpd.conf
    2). 重启服务 – 什么命令能够重启服务:sudo service +服务器名+restart
    2>. 客户端:
    1). 实名用户登录
    ftp + IP(server)
    输入用户名(server)
    输入密码
    文件的上传和下载
    文件的上传: put file(上传多个:mput )
    文件的下载: get file (下载多个:mget)
    mirror下载整个目录及其子目录
    mirror -R 上传整个目录及其子目录
    不允许操作目录, 如果想操作目录 – 打包 tar/rar/zip
    2). 匿名用户登录
    ftp + serverIP
    用户名: anonymous
    密码: 直接回车
    不允许匿名用户在任意目录直接切换
    只能在一个指定的目录范围内工作
    需要再ftp服务器上创建一个匿名用户的目录 – 匿名用户的根目录
    3). lftp客户端访问ftp服务器
    匿名
    lftg +服务器IP 直接回车
    login
    实名
    lftg username@ip地址,+回车
    输入服务器密码

  24. nfs服务器搭建:
    1>. 服务器端:安装软件:nfs-kernel-server
    1). 创建共享目录
    mkdir dir
    2). 修改配置文件
    /etc/exports
    /home/itcast/share *(ro, sync)
    3). 重启服务
    sudo service nfs-kernel-server restart
    2>. 客户端:
    1). 挂载服务器共享目录
    mount serverIP:sharedir /mnt
    2).客户端访问共享目录
    mount+IP:共享目录名 +挂载目录

  25. ssh服务器:
    1>. 服务器端:
    1). 安装ssh
    sudo atp-get install openssh-server
    2).查看ssh是否安装
    sudo aptitude show openssh-server
    2>. 客户端:
    1). 远程登录: ssh userName@serverIP
    2). 退出登录: logout

  26. scp命令 (super copy)
    1>.安装
    openssh-server
    2>.使用
    scp -r 目标用户名@目标主机IP地址:/目标文件的绝对路径/保存到本机的绝对(相对)路径(输入yes或者no)

  27. 其他命令:
    1>. 翻页:shift +PageUp
    2>. 清屏:clear或者Ctrl+l
    3>. 创建终端:Ctrl+Alt+T或者ctrl+shift+T(添加新的标签页)
    4>. 看手册:man man
    5> 设置查看别名: alias
    6>. echo+字符串//在显示器上显示内容,打印输出的内容,添加双引号
    7>.env //查看当前进程下的所有环境变量

  28. 关机重启
    1>. poweroff
    2>. shutdown+参数(-t/-k/-r/-h/-n/-f/-F/-c)
    3>. reboot
    第三天

  29. vim编辑器的使用

  30. gcc编译器

  31. 静态库的制作 – lib

  32. 动态库的制作 – dll

vi – vim
vim是从vi发展过来的一款文本编辑器
vi a.txt
前提: 安装了vim软件
工作模式:
1. 命令模式 – 打开文件之后, 默认进入命令模式
2. 编辑模式 – 需要输入一些命令, 切换到编辑模式(i,a,o,s,或者大写)
3. 末行模式 – 在末行模式下可以输入一些命令

  1. vim编辑器的使用
    命令模式下的操作:
    1>. 光标的移动
    H J K L
    前 下 上 后
    行首: 0
    行尾: $
    文件开始位置: gg
    文件末尾: G
    行跳转: 300G(数字加大写g)
    2>. 删除操作
    删除光标后边的字符: x
    删除光标前的字符: X
    删除整个单词: dw (光标移动到单词的开始位置, 否则只能删除一部分)
    删除光标到行首的字符串: d0
    删除光标到行尾的字符串: D(或者d$)
    删除光标当前行: dd
    删除多行: ndd (n dd+ 自然数)
    3>. 撤销操作
    撤销: u
    反撤销: ctrl + r
    4>. 复制粘贴
    复制: yy
    复制多行: nyy(从当前行开始数n行复制)
    粘贴: p (光标所在行的下一行)
    粘贴: P大写 (光标所在行)
    剪切 == 删除
    5>. 可视模式
    切换到可是模式: v(移动光标到当前行)
    选择内容: hjkl(移动光标的位置并选择内容)
    操作: 复制: y 删除: d(小写)
    6>. 查找操作
    1). /hello(/ +查找内容)从光标位置向下查找,达到最下面返回头部
    2). ?hello(?+查找内容)从光标位置向上查找,达到顶部返回尾部
    3). # – 把光标移动到查找的单词身上 , 按#(切换到查找的单词)
    遍历时候的快捷键: N/n(操作光标大写向上查找,小写向下查找)
    7>. r: 替换当前字符 (替换单个字符)
    缩进:
    向右缩进: >>
    向左缩进: <<
    8>. 查看man文档:shift+k(q退出)
    文本模式下的操作:
    a – 在光标所在位置的后边插入
    A – 在当前行的尾部插入
    i – 在光标所在位置的前边插入
    I – 在光标所在行的行首插入
    o – 在光标所在行的下边开辟一个新的行
    O – 在光标的所在行上边开辟一个新的行
    s – 删除光标后边的字符
    S – 删除光标所在的行
    末行模式下的操作:
    光标移动操作
    查找:/+查找的内容
    s/tom/jack//替换光标所在行的数据(遇标点符号断开)
    s/tom/jack/g//替换光标所在行的所有数据
    :%s/tom/jack/当前文件的所有数据(遇标点符号断开)
    :20,25s/tom/jack/g//替换某几行的数据
    保存退出操作:
    q: 退出
    q!: 退出不保存
    w: 保存
    wq: 保存退出
    x: == wq
    在命令模式下保存退出: ZZ
    分屏操作:ctrl+ww//切换分屏操作
    切换末行模式命令退出
    1>. 水平分屏:sp(分屏当前文件,显示不同内容加文件名参数)
    2>. 垂直分屏:vsp(显示不同内容加文件名参数)

  2. gcc编译器
    1>. gcc工作流程
    预编译:将程序中引用的头文件包含进源代码中,对一些宏进行替换
    编译和优化:生成目标文件,通常为汇编语言。
    汇编:将代码翻译成机器语言代码,在Linux系统上表现为ELF目标文件(OBJ文件)
    链接:将汇编生成的OBJ文件,系统库的OBJ文件,库文件链接起来,最终生成可以在特
    定平台上运行的程序。
    2>. gcc的一些参数使用:建立链接没有参数
    1). -I +头文件路径//指定头文件的参数
    2). -c 生成二进制文件
    3). -o生成文件名
    4). -D+指定宏//指定宏的名字,程序相当于有一个宏定义
    5). -g//程序添加调试信息
    6). -Wall//输出警告信息
    7). -O +参数//可以优化程序,(0,1,2,3等级依次提高)
    8).-E 生成预处理文件
    9).-S预处理文件生成汇编文件

  3. 静态库的制作
    1>. 命名规则
    1). lib + 库的名字 + .a
    2). 例如:libmytest.a
    2>. 制作步骤:
    L指定库的目录,l 指定库的名字
    1). 生成对应的.o文件 – .c --> .o -c
    2). 将生成的.o文件打包 ar rcs + 静态库的名字(libMytest.a) + 生成的所有的.o
    3>. 发布和使用静态库:
    1). 发布静态库
    2). 头文件
    4>. 优缺点:
    发布程序的时候,不需要提供对应的库,加载速度快
    库被打包进应用程序中,导致库的程序很大,库发生了改变,需要重新编译

  4. 共享库的制作:
    1>. 命名规则:
    1). lib + 名字 + .so
    2>. 制作步骤:
    1). 生成与位置无关的代码 -fpic(生成与位置无关的.o)
    2). 将.o打包成共享库(动态库)
    3>. 发布和使用共享库:
    4>. 解决程序执行时动态库无法被加载的问题:
    1). 放到系统的库目录 中 – 不允许使用
    2). 临时测试
    环境变量: LD_LIBRARY_PATH=将动态库的路径设置给该变量
    将设置的值, 导入到系统环境变量中: export LD_LIBRARY_PATH=当前目录下的动态库
    当终端关闭, 设置会失效
    3). 不常用的方法(永久设置):
    在家目录的 .bashrc文件 中添加一句话: export LD_LIBRARY_PATH=动态库目录的绝对路径
    .bashrc修改完成, 需要重启终端
    4).
    1. 需要找动态连接器的配置文件 – /etc/ld.so.conf
    2. 动态库的路径写到配置文件中 – 绝对路径
    3. 更新 – sudo ldconfig -v(查看信息)
    tar zxvf
    tar jcvf
    5>. 优缺点:
    优点:执行程序体积小,动态库更新了,不需要重新编译程序,函数接口不变
    缺点:发布程序的时候,需要将动态库提供给用户,动态库没有被打包到应用程序中,加载速度相对较慢

第四天

  1. gdb调试

  2. makefile的编写

  3. 系统IO函数

  4. gdb调试:用gcc生成可执行文件
    1. 启动gdb+应用程序名
    start – 只执行一步
    n – next(一步步单步调试)
    s – step(单步) – 可以进入到函数体内部
    c - continue – 继续执行直接停在断点的位置
    2. 查看程序代码:
    l – list(文件名)
    l 10(函数名)
    l filename:行号(函数名)(再加l可以查看接下来)
    3. 设置断点:
    设置当前文件断点:
    b – break
    b 10(函数名)+(判断条件)
    b fileName:行号(函数名)
    设置指定文件断点: b+fileName
    设置条件断点:
    b 10 if value==19
    删除断点:
    delete – del - d
    d 断点的编号
    获取编号: info – i
    info b
    4. 查看设置的断点
    i+b
    5. 开始 执行gdb调试
    执行一步操作: n
    继续执行:run
    执行多步, 直接停在断点处:c
    5. 单步调试
    进入函数体内部: s
    从函数体内部跳出: finish
    不进入函数体内部:
    n
    退出当前循环: u
    6. 查看变量的值: p+(设置的变量名)查看对应变量的值
    7. 查看变量的类型:ptype+(设置变量)查看的对应变量类型
    8. 设置变量的值: set var 变量名 = 赋值
    9. 设置追踪变量
    display+变量名(追踪变量值)
    获取编号: info display
    undisplay 编号(取消追踪变量)
    10. 退出gdb调试
    quit或者q

  5. makefile的编写:
    1. makefile的命名
    2. makefile的规则:
    规则中的三要素: 目标, 依赖, 命令
    目标:生成目标所依赖条件
    tab 缩进 命令
    make:生成终极目标
    子目标和终极目标的关系:
    更新目标的原则:
    3. makefile的两个函数
    wildcard:从指定或当前目录中查找所有的文件类型
    patsubst:+模式匹配(匹配替换,例如把文件中所有.c文件替换成.o文件)
    .PHONY:+加目标名(生成伪目标)
    4. makefile的三个自动变量:%.o:%.c(把所有的.o文件和.c文件匹配)
    $<:规则中的第一个依赖
    $@:规则中的目标
    $^:规则中的所有的依赖(只能在规则中的命令使用)

  6. 系统IO函数
    1>. 一些概念
    文件描述符(4G空间,数字0到1023)每打开一个新文件,则占用一个文件描述符,使用的是最小的空闲的文件描述符
    PCB进程控制块
    C库函的IO缓冲区
    刷新缓存区:fflush
    正常关闭文件:fclose,return ,exit
    2>. open
    打开方式:
    必选项:
    O_RDONLY:以只读的方式打开文件
    O_WRONLY:以只写的方式打开文件
    O_RDWR:打开并读写文件
    可选项:
    O_CREAT//创建一个新的文件
    文件权限: 本地有一个掩码:umask(查看掩码)
    文件的实际权限:
    给定的权限
    本地掩码(取反)
    &
    实际的文件权限
    777
    111111111
    111111101
    111111101
    775
    O_TRUNC:将文件截断为0,如文件已经存在,则删除文件的所有内容
    O_EXCL:判断文件是否存在,和O_CREAT同时使用
    O_APPEND:以追加的方式打开文件
    perror:void perror(const char *s)
    用来将上一个函数发生错误的原因输出到标准设备(stderr)
    参数s所指的字符串会事先打出,后面再加上错误原因字符串
    此错误原因依照全局变量error的值来决定要输出的字符串。
    3>. read
    返回值:
    1. -1 读文件失败
    2. 0 文件读完了
    3. >0 读取的字节数
    4>. write
    返回值:
    ssize_t write (int fd ,const void *buf,size_t count)
    1. -1 读文件失败
    2.*buf:表示写入到数据
    3.count:最多的写入字节数
    5>. lseek:系统调用可以改变文件偏移量
    获取文件大小
    移动文件指针
    文件的拓展
    类型:off_t lseek(int fd ,off_t offset ,int whence)
    SEEK_SEK :将文件偏移量设置在距文件开始处offset个字节
    SEEK_CUR:将文件偏移量设置在当前值加offset,offset可正可负
    SEEK_END:将文件偏移量设置为文件长度加offset,offset可正可负
    返回值:成功则返回新的文件偏移量,出错则返回-1
    6>. close
    返回值:1.返回0表示成功,返回-1表示出错
    cpu 为什么要使用虚拟地址空间与物理地址空间映射?解决了什么样的问题?
    1.方便编译器和操作系统安排程序的地址分布。
    程序可以使用一系列相邻的虚拟地址来访问物理内存中不相邻的大内存缓冲区。
    2.方便进程之间隔离
    不同进程使用的虚拟地址彼此隔离。一个进程中的代码无法更改正在由另一进程使用的物理内存。

3.方便OS使用内存。
程序可以使用一系列虚拟地址来访问大于可用物理内存的内存缓冲区。当物理内存的供应量变小时,
内存管理器会将物理内存页(通常大小为 4 KB)保存到磁盘文件。数据或代码页会根据需要在物理内存与磁盘之间移动

第五天

  1. Linux文件操作相关函数
    stat函数 :获取文件的存储信息(打开文件)
    穿透(追踪)函数 – 软链接
    fstat函数:获取文件的存储信息(不打开文件)
    lstat函数:
    不穿透(追踪)
    access函数:测试指定文件是否具有某种权限
    int access(const char *pathname ,int mode)
    参数:R_OK是否具有读的权限
    W_OK是否具有写的权限
    X_OK是否具有执行权限
    F_OK测试一个文件是否存在
    返回值:0–>所有查看的权限都通过了检查
    -1–>有权限被禁止
    chown函数:改变文件的所有者
    int chown (const char *path ,uid_t owner,gid_t group)
    返回值:0–>成功,-1–>失败
    chmod函数:改变文件权限
    int chmod (const char *filename ,int pmode)
    filename:文件名
    pmode:权限,必须是八进制的数
    返回值:0–>成功,-1–>失败
    truncate函数:
    int truncate (const char *path ,off_t length)
    将参数path指定的文件大小改为参数length指定的大小,
    如果原来的文件大小比参数length大,那超过的部分会被删除
    path–>文件路径
    length–>指定的文件大小
    链接函数
    link函数:创建一个硬链接
    symlink函数:创建一个软链接
    readlink函数:读软链接对应的文件名,不是读内容
    unlink函数:删除一个文件的目录项并减少它的链接数,0–>成功,-1–>失败,错误原因存于errno
    如果想通过调用这个函数来成功删除文件,必须有文件的写和执行权限
    unlink函数使用:1、如果是符号链接,删除符号链接
    2、如果是硬链接,硬链接数减1,当减为0时,释放数据块和inode
    rename函数:文件重命名,标明头文件<stdio.h>

  2. Linux目录操作相关函数:
    chdir:修改进程的路径
    getcwd:获取当前进程工作目录
    mkdir:创建目录
    rmdir:删除一个空目录
    opendir:打开一个目录,函数出错返回NULL
    readdir:读目录
    closedir:关闭目录

  3. fcntl 函数:
    复制现有的文件描述符
    获得/设置文件描述符标记
    获得/设置文件状态标记
    获得/设置异步I/O所有权
    获得/设置记录锁
    改变已经打开的文件的属性
    打开文件的时候: 只读
    修改文件的: 添加追加 O_APPEND

  4. dup, dup2函数
    复制现有的文件描述符
    dup :int dup(int oldfd)
    返回的文件描述表中没有被占用的最小文件描述符
    dup2:int dup2(int oldfd,int newfd)
    new如果是一个被打开的文件描述符,在拷贝之前先关掉new
    old和new是同一个文件描述符,不会关掉new,直接返回old

发布了6 篇原创文章 · 获赞 1 · 访问量 1551

猜你喜欢

转载自blog.csdn.net/m0_46198325/article/details/104066763
今日推荐