Linux鸟哥私房菜基础学习篇

7 Linux文件与目录管理

7.5 命令与文件查询

7.5.1 脚本文件名的查询

查找可执行文件的位置, 在PATH变量制定的路径中,查找

which [-a] command

参数:

-a: 将所有PATH目录中可以找到的命令均列出, 而不只是第一个被找到的命令名称

which node
/Users/maizhikun/.nvm/versions/node/v6.10.0/bin/node

7.5.2 文件名的查找

locate

locate使用简单, 直接在后面输入"文件的部分名称"

locate会在自己创建数据库中查找内容, 而不是硬盘

所以新增了一个文件, 可能没有办法立即使用locate找出, 因为还没更新到数据库(一般每天一次)

使用'updatedb', 会读取updatedb.conf配置, 然后取查找硬盘, 最后更新数据库文件

locate [-ir] keyword

参数:

-i: 忽略大小写差异
-r: 后面可以正则表达式方式
work@iZ94fnej0x9Z:~$ locate -r "input_definition_[0-9]\?.md"
/var/www/html/404mzk/vendor/symfony/console/Tests/Fixtures/input_definition_1.md
/var/www/html/404mzk/vendor/symfony/console/Tests/Fixtures/input_definition_2.md
/var/www/html/404mzk/vendor/symfony/console/Tests/Fixtures/input_definition_3.md
/var/www/html/404mzk/vendor/symfony/console/Tests/Fixtures/input_definition_4.md
`

find

find [PATH] [option] [action]

参数

与时间有关的参数

-atime(读取文件或者执行文件时更改的)

-mtime(是在写入文件时随文件内容的更改而更改的)

-ctime(在写入文件、更改所有者、权限或链接设置时随 Inode 的内容更改而更改的)

-mtime n : 在n天之前24小时内被修改的文件

-time +n: 列出n天之前被修改的文件 (不含n)

-time -n: n天内被修改的文件(含n)

-newer file: 比file文件还要新的文件名

find ./ -mtime 0 //查找24小时内修改的文件

find /etc -newer /etc/passwd 查找在/etc下比/etc/passwd新的文件

与用户相关的参数

-uid n: 查找属于uid文件

-gid n: 查找属于gid的文件

-user name: 查找属于user的文件

-group name: 查找属于group的文件

-nouser: 查找文件所有者不在/etc/passwd的人

-nogroup: 找所有用户组不存在/etc/group的文件

与文件权限和名称有关的参数

-name filename: 查找文件名为filename的文件

-size [+-]SIZE: 查找比SIZE还要大/小的文件,单文有 c(bytr), k, M, G

-type TYPE: 筛选类型, f(正规文件) b/c(设备文件) d(目录) l(连接文件) s(socket) p(FIFO)

-perm -mode: 查找至少文件权限, 例如(-perm -0744) 也会把(0755)权限的文件筛选出来

-perm +mode: 查找文件权限"包含任意mode权限"的文件, 例如查找(-perm +0755), 那么(0744)也会被筛选出来

其他参数

-exec command: command为其他命令

-print: 将结果打印到屏幕上(默认)

 find ./Learning/apache_sites/K-Logging  -type d -exec ls -l {} \;

10 Vim程序编辑器

比较常用的命令

  1. 连续上/下移30行: 30j/30k
  2. 上一页/下一页: <C-b>/<C-f>
  3. 移上半页/移下半页: <C-u>/<C-d>
  4. +: 移到下行行首
  5. 10<space>: 光标往右移10个字符
  6. H: 屏幕最上方第一行的第一个字符
  7. M: 光标移到中央那行的第一个字符
  8. L: 屏幕最下方最后一行的第一个字符
  9. G: 移动到这个文件的最后一行
  10. 10G: 移动到文件的第10行
  11. gg|1G: 移动到屏幕首行

10.3 vim的功能

10.3.2 多文件编辑

多窗口下基本命令

  1. vim 文件1 文件2: 空格分隔同时打开多个文件
  2. :n/:N: 编辑下/上一个文件
  3. :files: 列出目前这个vim的打开的所有文件
  4. sp [filename]: 若不加filename则再打开多一个本文件,加了则新打开文件
  5. ctrl+w+j/下箭头: 先按ctrl+w,然后放开按键,然后按j/下箭头,到下一个文件
  6. ctrl+w+k/上箭头: 同上,不过到上一个文件
  7. ctrl+w+q: 也是先按ctrl+w,然后放开其他键按q,关闭下一个文件

12 正则表达式与文本格式化处理

需要注意版本的字符格式是啥,不同的字符格式可能会不一样

拓展正则表达式egrep 可以直接通过|匹配不用的正则

12.1 grep

grep分析的是一行,当一行中有我们想要的东西,就把该行抽取出来

grep [-A] [-B] [-acinv] [--color=auto]

-a: 将binary文件以text文件的方式查找数据
-c: 计算找到`查找字符串`的次数
-i: 忽略大小写
-n: 输出行号
-v: 反向选择,即显示没有`查找字符串`的那一行
--color=auto: 可以将`查找字符串`加上颜色
-A: 后面直接跟数字,表示显示匹配行的后多少行
-B: 后面直接跟数字,表示显示匹配行的前多少行

--color=auto是一个很爽的东西,但是每次都要输入吗?.在Mac上改一下~/.bash_profile

  1. vim ~/.bash_profile: 添加alias grep='grep --color=auto'
  2. 编译: source ~/.bash_profile,OK

正则注意点

  1. ^[]外表示匹配行首,在[]内部表示反义
  2. {}匹配时,因为{与}shell有语义所以必须\{\}转义

12.2 sed工具

sed [-nefri] [动作]

-n: 使用安静(silent)模式,在一般sed的用法中,所有STDIN的数据一般都会显示在屏幕上,加上`-n`后只有sed特殊处理的那一行(或者操作)才会被列出来
-e: 直接在命令行模式上进行sed的动作编辑,sed后超过两个动作,需要每个动作前都加`-e`
-f: 直接将sed的动作写在一个文件内,-f filename 则可以执行filename内的sed操作
-r: sed的动作支持的是扩张型正则表达式的语法(默认是基础正则表达式语法)
-i: 直接修改读取的文件内容,而不是屏幕输出

动作说明: [n1[,n2]]function
n1,n2: 一般代表选择进行动作的行数,举例来说,如果我的动作是需要在10~20行之间进行的,则"10,20[动作行为]"

function有下面这些参数

a: 新增,a后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)
c: 替换,c后面可以接字符串,这些字符串可以替换n1,n2之间的行
d: 删除
i: 插入,i后面可以接字符串,而这些字符串会在新的一行出现(当前行的上一行)
p: 打印,也就是将某个选择的数据打印出来,通常p会跟参数sedn -n一起运行
s: 替换,可以直接进行替换工作,通常这个s可以搭配正则表达式

注意点

  1. sed增加两行

     nl /etc/passwd | sed '2a Drink tea...\
     > drik beer'
    
  2. 替换: sed 's/要被替换的字符串/新的字符串/g'

16.3 printf

printf '打印格式' 实际内容

格式方面的特殊样式

  1. \a 警告声音输出
  2. \b 退格键
  3. \f 清除屏幕
  4. \n 输出新一行
  5. \r 即Enter按键
  6. \t 水平tab按键
  7. \v 垂直的tab按键
  8. \XNN NN代表两位数的数字,可以转换数字成为字符

常见的变量格式

  1. %ns n是数字,s是string,即多少个字符
  2. %ni 那个n是数字,i代表integer,多少整数字数
  3. %N.nf 代表N个整数,n个小数的浮点数

16.4 awk

awk '条件类型1{动作1} 条件类型2{动作2} ...' filename

默认变量

  1. $0: 代表整行
  2. $1~$n: 代表第n个字段
  3. NF: 表示每一行拥有的字段数
  4. NR: 代表正在处理的第几行
  5. FS: 目前的分割字符,默认是空格键

注意事项

  1. 所有awk动作,即在{}内的动作,如果有需要多个命令辅助时,可以用;间隔,或者直接以[Enter]按键来隔开每个命令,
  2. awk的变量无需$,直接使用即可
  3. awk支付if
  4. 可用BEGIN和END去掉首尾行

16.5文件比较工具

diff [-bBi] from-file to-file,以行为单位

from-file to-file都可用-代替,代表Standar input

  1. -b: 忽略一行当中仅有多少个空白的区别
  2. -B: 忽略空白行的区别
  3. -i: 忽略大小写

cmp [-s] file1 file2,以字节为单位

  1. -s: 把所有的不同点的字节处都列出来,如果不加-s仅输出一个不同点

patch [-R] [-pn] 根据补丁,更新/还原

  1. -R: 还原
  2. -p: 后面的N表示取消几层目录的意思 制作补丁diff -Naur 旧文件 新文件 > 补丁.patch

16.6 pr文件打印准备

16.例行性工作

16.1 任务分类

  1. 仅执行一次的命令: at设置只执行一次的命令(需要atd服务的支持)
  2. 常规性命令: crontab循环性指令(需要crond服务)

16.2 仅执行一次的工作调度

linux检查有无atd服务: /etc/init.d/atd status

linux开机自启动atd: chkconfig atd on

这里发现at在ubuntu和书籍中很多不符,暂不研究

16.3 循环执行的例行性工作调度

16.3.1 用户的设置

限制用户

  1. 设置允许的用户: /etc/cron.allow
  2. 设置不允许的用户: /etc/cron.deny

优先性: cron.allow>cron.deny

命令说明

crontab [-u username] [-l|-e|-r]

-u: 只有root才能执行/帮其他用户新建/删除crontab
-e: 编辑crontab,指定编辑器`EDITOR=vim crontab -e`
-l: 列出所有crontab
-r: 删除所有crontab

命令设置

分钟 小时 日期 月份 周 命令

特别的符号代表

  1. *: 此字段不做限制
  2. ,: 在符合的数字字段都可执行||
  3. -: 时间范围设置
  4. /n: 每隔n执行
© 404mzk all right reserved,powered by Gitbookhttp://read.404mzk.com 该文件修订时间: 2018-03-04 11:11:34

results matching ""

    No results matching ""