Linux基础知识(三)

写在前面:

    博客书写牢记5W1H法则:What,Why,When,Where,Who,How。

本节主要内容:

◆ bash特征之:命令补全和路径补全

◆ 目录管理命令:

    mkdir、rmdir

◆ bash特征之:命令行展开

    tree

◆ bash特征之:命令执行状态结果

◆ 文件查看类命令:

    more、less、head、tail、stat、touch

◆ 文件管理类命令:

    cp、mv、rm

◆ bash特征之:glob(通配符)

◆ bash特征之:变量

    set、unset、declare、export、env、printenv、readonly

◆ bash特征之:I/O重定向和管道

    tr

回顾:

    广义的shell:GUI和CLI


bash特征之:命令补全和路径补全

命令补全:

shell程序在接收到用户执行命令的请求且分析完成之后,最左侧的字符串讲当做命令去查找,分别查找内部命令和外部命令。

由于外部命令文件存储在不同的系统目录中,那么查找外部命令之前就必须让系统知道命令文件路径,而linux中的$PATH变量就是用来存储这个路径的。

$PATH的查找方式为从左到右,当给定的头部字符串能够唯一标识某程序文件名时,则直接补全,不能唯一标识时,再次按tab给出列表。

命令错误时按tab没有响应。

路径补全:

与命令补全类似,当给出的路径名前几个字符串能够唯一标识路径或文件名时,按tab会自动补全

不能唯一标识时,按2下tab会给出列表。

路径错误按tab没有响应。

目录管理命令:

mkdir与rmdir

mkdir

mkdir [OPTION]... DIRECTORY...

-m|--mode=MODE:设置目录权限;

-p|--parents:当父目录不存在时,直接创建,而不是报错

-v|--verbose:显示详细信息

rmdir

rmdir [OPTION]... DIRECTORY...

-p|--parents:删除子目录后,如果其父目录为空,也一并删除

-v|--verbose:显示详细信息


bash特征之:命令行展开

把命令行给定的特殊符号直接自动替换为相应字符串的机制。

~:自动替换为登录用户家目录;

~USERNAME:自动替换为USERNAME的家目录;

{}:路径或文件展开符,可展开用“,”隔开的多个路径;

如:/tmp/{x/y,m/{m,n}}则表示/tmp/x/y,/tmp/m/m,/tmp/m/n三个路径或文件

tree:

list contents of directories in a tree-like format.

-d:只显示目录

-P PATTERN:只显示匹配PATTERN的文件或目录

-I PATTERN:不显示匹配PATTERN的文件或目录

-L LEVEL:显示的最深目录层级

bash特征之:命令执行状态结果

命令的执行状态结果是命令执行完成后返回的一个状态数值,与命令的输出结果不是同一个概念。

通过命令引用,得到的是命令的执行完成输出结果。

・COMMAND・

命令的执行状态结果:

成功:0

失败:1-255

bash将命令执行状态结果保存在特殊变量$?中,注意其只保留了最后一次执行的命令状态结果。

文件查看类命令:

分屏查看命令:more、less

more:

more [options] file [...]

less:

less  file [...]

head:

output the first part of files

head [OPTION]... [FILE]...

-n,--lines=[-]N:打印前N行,如果为-N,则打印除最后N行的其他行。

tail:

output the last part of files

tail [OPTION]... [FILE]...

-f,--follow:查看文件尾部并且不退出,当追加新内容时,继续显示;Ctrl+c结束显示;

-n,--lines=[+]N:打印后N行,如果为+N,则打印第N行至最后一行的内容;

stat:

display file or file system status

stat [OPTION]... FILE...

-f,--file-system:display file system status instead of file status

例如:不加任何参数stat的输出如下:

File: `/etc/fstab'

Size: 860             Blocks: 8          IO Block: 4096   regular file

Device: fd00h/64768d    Inode: 131079      Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2016-03-05 18:15:15.642655122 +0800

Modify: 2016-03-05 18:02:57.132999974 +0800

Change: 2016-03-05 18:13:53.404999799 +0800

回顾:文件的数据组成分为元数据(metadata,记录了文件大小,访问权限,属组属主等信息)和数据(data block,数据本身)

这里指出了3个时间戳(timestamps):

Atime:文件最近一次被访问的时间;

Mtime:文件最近一次被修改的时间(数据);

Ctime:文件最近一次被修改的时间(元数据);

touch:

change file timestamps

touch [OPTION]... FILE...

不加任何参数,则修改atime和mtime为当前时间

-a:只修改atime;

-m:只修改mtime;

-t STAMP:使用[[CC]YY]MMDDhhmm[.ss]格式手动设置时间,而不是当前时间;


文件管理工具:

cp:

copy files and directories

cp [OPTION]... [-T] SOURCE DEST

cp [OPTION]... SOURCE... DIRECTORY

cp [OPTION]... -t DIRECTORY SOURCE...

默认情况下,cp复制遇到软链接文件时,会直接复制链接指向的文件。

-a,--archive:归档复制,保留权限信息、递归、保留链接文件本身;

--bakcup:保留所有属性信息,甚至atime都不会修改;

-i,--interactive:交互式提醒,有重复文件时提醒;

-f,--force:强制覆盖;

-R,-r,--recursive:递归复制目录及其子目录下内容;

-P,--no-dereference:复制链接本身,而非链接指向的文件;

--parents:在目的目录,保留目录路径信息;如cp --parents /etc/fstab .会在当前目录新建etc目录,然后在etc目录里创建fstab文件

--preserve[ATTR LIST]:指定保留的属性列表

默认:mode,ownership,timestamps;

额外:context(上下文),links, xattr, all

-v, --verbose;显示详细信息;

mv:

move (rename) files

mv [OPTION]... [-T] SOURCE DEST

mv [OPTION]... SOURCE... DIRECTORY

mv [OPTION]... -t DIRECTORY SOURCE...

-i, --interactive:交互式提醒;

-f, --force:强制操作;

-v, --verbose;显示详细信息;

rm:

remove files or directories

rm [OPTION]... FILE...

-f,--force:强制复制,直接操作取消提醒;

-i:交互提醒;

-r, -R, --recursive:递归

-v, --verbose;显示详细信息

bash特征之:glob(通配符)

glob:文件名统配,用以快速引用多个文件。

元字符:通配符中具有特殊意义的专用字符,可编写匹配模式(pattern)。

*:匹配任意长度的任意字符;

如p*匹配:p、p88、prdsfsdflkj、p%%%%%等

?:匹配单个任意字符;

如p?匹配:p1、pr、pp等

[]:匹配指定字符集中的其中一个字符;

[a-z]匹配大小写a-z之间的任意一个字符;

[0-9]匹配0到9之间任何一个字符;

用[]标示各种字符的特定格式如下:

man tr可以看到[:alnum:]等!!!

[[:upper:]]:所有大写字母;

[[:lower:]]:所有小写字母;

[[:digit:]]:所有的数字;

[[:alpha:]]:所有字母;

[[:alnum:]]:所有字母和数字;

[[:space:]]:空白字符;

[[:punct:]]:标点符号;

[^ ]:匹配指定字符以外的任意字符;

如[^0-9]匹配非数字的任意字符


bash特征之:变量

变量:存储于内存空间中的一段有名称可改变值的数据;

变量命名规则:

1.名称中只能使用字母、数字和下划线;

2.不能以数字开头;

3.区分大小写;

4.尽量做到见名知义;

5.不能与系统内置变量及关键字相同;

变量赋值:

VAR_NAME=VAR_VALUE

变量类型:

bash是弱类型编程语言,变量无需事先声明,不区分变量中存储的数据类型,统一认为是字符串类型。

变量引用:

${VAR_NAME};

变量作用域:

变量的生效范围,即可被引用的范围。

变量种类及设置:

本地变量:作用域为当前shell进程,其他进程或当前shell的子进程无法引用,当前shell进程终止,变量会被自动撤销;

定义本地变量:

set VAR_NAME=[VAR_VALUE]

撤销变量:

unset VAR_NAME

环境变量:作用域为当前shell进程及其子进程;

定义环境变量:

declare -x VAR_NAME[=VAR_VALUE]

export VAR_NAME[=VAR_VALUE]

查看环境变量:

export

declare -x

env

printenv

更改为本地变量:

declare +x VAR_NAME

撤销变量:

unset VAR_NAME

局部变量:函数中定义的变量,只在函数中可被引用;

位置参数变量:shell编程中经常用到的,运行脚本时后面跟的参数,在脚本内用$#调用;

特殊变量:如$?等具有特殊含义的变量;

只读变量:

只读变量不支持重新赋值和撤销操作。

declare -r VAR_NAME

readonly VAR_NAME=VAR_VALUE

取消只读:

declare +r VAR_NAME

bash特征之:I/O重定向和管道

重定向允许讲默认打印到屏幕的数据重新定位到文件,或者默认从键盘读取的数据更改为从文件读取。

程序的默认数据流走向:

输入数据流: <--,标准输入(stdin),键盘;

输出数据流:-->,标准输出(stdout), 显示器;

错误数据流:-->,错误输出(stderr),显示器;

文件描述符(File Descriptor,FD):

stdin(标准输入):0

stdout(标准输出):1

stderr(错误输出):2

I/O重定向:

标准输出重定向:

COMMAND > /PATH/TO/FILE

将标准输出写入文件,如文件已存在数据则覆盖;文件不存在自动新建;

COMMAND >> /PATH/TO/FILE

将标准输出追加到文件;文件不存在自动创建;

shell中重定向功能开关设置:

set -C

禁止覆盖输出重定向至已存在文件;仍然可以使用>|来覆盖

set +C

关闭此功能开关

标准错误输出重定向:

COMMAND 2> /PATH/TO/FILE

错误输出写入文件,覆盖原文件数据,文件不存在自动创建

COMMAND 2>> /PATH/TO/FILE

错误输出追加到文件,文件不存在自动创建

合并标准输出和标准错误输出:

1、使用&>或&>>符号

如:COMMAND &> /PATH/TO/FILE

2、使用>和2>&1 或 >>和2>&1

如:COMMAND > /PATH/TO/FILE 2>&1

COMMAND >> /PATH/TO/FILE 2>&1

特殊输入输出文件:

/dev/zero:

会源源不断的提供二进制数据流

/dev/null:位桶

任何重定向到此文件的数据都会被丢弃

标准输入重定向:

COMMAND < /PATH/FROM/FILE

tr:

translate or delete characters

tr [OPTION]... SET1 [SET2]

实现所有字符转换为另一个:

tr [ABC] [abc] < FILE1

FILE1文件中所有A字符替换为a,所有B替换为b,所有C替换为c。并不真的改动文件内容,输出到屏幕内容改变。

实现删除某一字符:

tr -d [ABC] < FILE1

FILE1文件所有A/B/C字符被删除,输出到屏幕,不修改原文件

补充:

man tr可以看到[:alnum:]等!!!

管道:

COMMAND1 | COMMMAND2 | COMMAND3 | ...

用以将前一个命令的标准输出作为后一个命令的标准输入

如:head -n5 /dev/fstab | tail -n1 打印fstab文件的第5行

tee命令:

read from standard input and write to standard output and files

tee [OPTION]... [FILE]...

-a,--append:追加内容到文件

COMMAND | tee FILE 前面COMMAND命令的执行结果输出到屏幕并保存到FILE文件


你可能感兴趣的:(变量,重定向,管道,通配符glob)