Linux 开发环境及应用第一、二章笔记

笔记

课程网站

开始使用 Linux

useradd # 添加用户,用户信息存放在 /etc/passwd
man # 查看手册,章节编号 1命令 2系统调用 3库函数 5配置文件
man [name]
man [section name]
man -k [regexp] # 列出关键字与正则表达式匹配的手册目录
date # 可定制输出格式
ntpdate [ntp webiste link] # 通过 ntp 协议校对系统时间
cal  # 日历 
cal [year]
cal [month] [year]
bc   # 计算器
passwd  # 修改用户名称 
passwd [user name]  # 系统以 hash 值的方式存储口令信息
who  # 确定谁在系统中
tty  # 打印出当前终端的设备文件名
who am i 
whoami
uptime  # 了解系统启动时间和忙碌程度
# 后面三个值分别是 1,5,15 分钟内的 CPU 负载
top  # 列出资源占用排名靠前的进程
ps -e # 列出所有进程
ps -f # 以 full 的格式列出
ps -l # 以 long 的格式列出
free # 了解内存使用情况
###
# 注意:free 后结果中的 available = free + buffer + cache (应用程序认为可用的内存空间)free 则是尚未被使用的内存空间
###
vmstat  # 了解系统负载情况

文本文件的处理

Linux 中的文本信息

  • 文本文件

  • 程序输出

  • 系统配置信息

    • /etc 下的配置文件 (功能类似 windows 的注册表)
  • 文本型网络协议

    • 因特网大部分传输层以上的协议是文本协议
    • 会话层协议:HTTP,POP3,SMTP,IMAP
    • 表示层协议:HTML,XML,MIME
  • 文本文件处理的命令 (脚本)

进程的标准输入输出

  • 进程的基本概念
  • 进程的输入输出
  • 重定向机智
    • 输出 ls -l > filelist.txt
    • 输入 sort < filelist.txt
  • 管道机制
    • ls -l | sort
  • 重定向机智和管道机制的重要性
  • 特点
    • 不指定处理对象文件名时,从标准输入获得数据
    • 指定处理对象文件名时,从文件中获取数据
    • 多数命令可以指定多个文件
    • 处理结果在标准输出显示
  • 考虑的因素
    • 标准输入 / 标准输出
    • shell 的文件通配符
    • 输入输出重定向
    • 管道
  • 灵活性:工具命令的组合
    • Linux 倾向于提供独立的多个精巧的工具命令,数据格式为文本信息
    • 鼓励使用重定向或管道机制将多个工具命令组合到一起,提供灵活的功能
    • 应用系统设计时,也应该考虑到这些特点
      • 例如:数据库内容的展示,直接输出多列文本,考虑到各种工具软件的使用

读取文件内容

more / less # 逐屏显示文件
more [文件名]
more *.[ch]  # 指定多个文件
ls -l | more # 指定 0 个文件
cat / od # 列出文件内容
od   # octal dump 逐字节打印
head / tail # 显示文件头部或者尾部
head -n [行数]
tail -f [文件名] # 实时打印文件尾部被追加的内容 (-f: forever)
tee # 三通
./myap | tee myap.log  # 将从标准输入 stdin 得到的数据抄送到标准输出 stdout 显示,同时存入磁盘文件中
wc  # 字计数 列出多少行,多少单词,多少字符 # 可以指定多个文件 -l 只列出行计数
sort # 对文件内容排序 sort -n 
sort telno > telno1
ls -s | sort | tail -10
ls -s | sort -n | tail -10
tr   # 翻译字符
tr string1 string2 # 把标准输入拷贝的标准输出,把所有 string1 替换成 string2
cat report | tr '[a-z]' '[A-Z]'
uniq  # 筛选文件中的重复行

正则表达式

  • 正则表达式的功能

    • 描述一个字符串模式
  • 注意

    • 正则表达式规则与文件名通配符规则不同
      • 正则表达式规则用于文本处理的场合
      • 文件名通配符规则用于文件处理的场合
    • 不同软件对正则表达式的定义会有差异
  • 6 个元字符

    • . * [ \ ^ $
  • 其他字符与其自身匹配

  • 转义

    • 用反斜线可以取消特殊字符的特殊含义
    • 如:正则表达式 end\. 只与字符串 end. 匹配
  • 长的正则表达式是由单字符正则表达式构成的

  • 非特殊字符与其自身匹配

    • 如:正则表达式 a 与字符串 a 匹配,b 与 b,/ 与 /
  • 转义字符 (\)

    • \. \* \$ \^ \[ \\

      正则表达式 \* 与字符串 * 匹配,与字符串 \* 不匹配

      转义字符后除以上六种字符之外的不该出现其他字符,例如:不该出现 \u ,这样的组合被视为 undefined (未定义的),后出的软件有可能会有特殊的解释

  • 圆点 ( . )

    • 匹配任意字符
  • 基本用法

    • 在一堆方括号之间的字符为集合的内容
      • 如:单字符正则表达式 [abcd] 与 a 或 b,c,d 匹配
    • 圆点,星号,反斜线在方括号内时,代表他们自己
      • 如:[\*.] 可匹配 3 个单字符
  • 用减号 - 定义一个区间

    • 如 [a-d] [A-Z] [a-zA-Z0-9]
    • [ ][ ] 集合含左右中括号两个字符
    • 减号在最后,则失去表示区间的意义
      • [ad-] 只与 3 个字符匹配
  • 用 ^ 表示补集

    • ^ 在开头,则表示与集合内字符之外的任意字符匹配
      • 如:[^a-z ] 匹配任一非小写字母
      • [^][ ] 匹配任一非中括号字符
    • ^ 不在开头,则失去其表示补集的意义
      • 如:[a-z^] 能匹配 27 个单字符

组合和锚点

  • 串结

    • 如 abc, [A-Z].[0-9]. 匹配 4 个字符,注意 . 可以匹配任意字符
  • 星号 (*)

    • 单字符正则表达式后跟 * ,匹配此单字符表达式的 0 次或 任意多次出现

      • 如: 12*4 可以匹配 122222224, 14, 1224

      • 如:[A-Z][0-9]* 可以匹配 :

        [A-Z], [A-Z][0-9], [A-Z][0-9][0-9], [A-Z]及若干个[0-9]

  • $ 在尾部时有特殊意义,否则与其自身匹配

    • 如: 123$ 匹配文件中尾行的 123,不在尾行的 123 字符不匹配
    • 如:$123 匹配 $123
    • 如:.$ 匹配尾行的任意字符
  • ^ 在首部时有特殊意义,否则与其自身匹配

    • ^printf 匹配行首的 printf 字符串,不在行首的 printf 串不匹配

    • Hel^lo 匹配 Hel^lo

    • 在 vi 中使用:10, 50s/^ //g

      删除 10-50 行的每行行首的 4 个空格

ERE: 扩展的正则表达式(ERE)

PCRE:Perl-compatible regular expression

对基本的正则表达式(BRE)进行了改进

这里不赘述

行筛选 grep

grep / egrep / fgrep: 在文件中查找字符串(筛选)

  • 语法

    grep 模式 文件名列表

  • 举例

    • grep O_RDWR *.h
    • ps -ef | grep liang
    • ls -l / | grep ‘^d’ | wc -l
    • grep ‘[0-9]*’ shudu.c
    • grep ‘[0-9][0-9]*’ shudu.c
  • egrep 使用扩展正则表达式 ERE 描述模式

    • 在指定模式方面比 grep 更灵活
  • fgrep 快速搜索指定字符串

    • 按字符串搜索而不是按模式搜索
  • grep 选项

    • -F, --fixed-strings
    • -G, --basic-regexp
    • -E, --extended-regexp
    • -P, --perl-regexp

    查 PCRE 语法:man pcresyntax

  • 选项

    • -n 显示时每行前面显示行号
    • -v 显示所有不包含模式的行
    • -i 字母比较时忽略字母的大小写
  • 例: grep -n main *.c

    • 查找含有表达式 main 的行,并打印行号
    • 当文件数超过一个时,除了输出行号,还输出文件名
  • 例:grep -v ‘[Dd]isable’ dev.stat > dev.active

    • 取消文件中所含有指定模式的行,生成新文件
  • 例:grep -i richard telnos

    • 在文件中检索字符串 richard,忽略字母的大小写

sed:流编辑(加工)

  • 用法
    • sed ‘命令’ 文件名列表
    • sed -e ‘命令1’ -e ‘命令2’ -e ‘命令3’ 文件名列表
    • sed -f 命令文件 文件名列表

暂时记到这里了,sed 和 awk 命令都比较复杂下次再看。


awk:逐行扫描进行文本处理的一门语言(筛选与加工)


OK. Let’s continue. 9.08 update.


awk:逐行扫描进行文本处理的一门语言(筛选与加工)

  • 用法

    • awk ‘程序’ 文件名列表

    • awk -f 程序文件名 文件名列表

      程序 条件 {动作}

      awk 自动对每行文本执行条件判断,满足条件执行动作 (内置循环)

      允许多段程序:多段程序间用空格或分号隔开

  • 处理方式

    • 输入文件的每行作为一个“记录”,变量 NR 就是行号

    • 每行用空格分隔开的部分,叫做记录的“域”

      内置变量 $1 是第一域的内容,依次,$2 是第二域内容,…

      特别的,$0 指的是整个这一行的内容

    • awk 的处理为:符合条件的行,执行相应的动作

  • 使用与 C 语言类似的关系运算符

    < 小于 <= 小于或等于 == 等于

    != 不等于 > 大于 >= 大于或等于

  • 使用 C 语言类似的逻辑运算符

    || 或 && 与 !非

  • 正则表达式的模式匹配 /regexpr/

    • 包含该模式的行,执行动作
  • 特殊的条件

    • 不指定任何条件,对所有文本行执行动作
    • BEGIN 开始处理所有文本行之前执行动作
    • END 处理完所有文本行之后执行动作
  • 描述“动作”时,简单的用法有:

    • 自定义变量

    • 加减乘除等算术逻辑运算

    • 正则表达式匹配运算符(用作条件判断)~ !~

      例如:$2 ~ “[1-9][0-9]*”

    • 流程控制(与 C 语言类似)

      • 条件判断 if
      • 循环控制 for
    • print 变量1, 变量2, …

      printf(“格式串”,变量1,变量2,…)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值