程序员 wordpress Firefox Python 编程 php 云计算 centos java Android shell 开源 Windows linux google nginx mysql apache Ubuntu 微软

Linux基礎知識總結(二)

bash Shell 快捷鍵 提供命令編輯功能

Ctrl+a 將光標快速移到命令行首部

Ctrl+e 將光標快速移到命令行行尾

Ctrl+ —&gt; (<—)一次移動一個單詞

Ctrl+k 刪除當前光標至命令行尾部的內容

Ctrl+u 刪除當前光標至命令行首部的內容

Ctrl+l 或者clear都是用來清屏的

emacs風格) set –o vi 轉換為vi風格

文件名通配

* 匹配零到任意個、任意長度的字符

clip_image002

?匹配任意单个字符 eg:ab?d.mp3 匹配abcd.mp3

[]指定一个取值范围的单个字符,匹配只能从中括号中的字符选取

[0-9] [a-z] [:alpha:] 大小写字母 本身就是一个集 要想使用的话再加上一个中括号eg [[:alpha:]]b.mp3

[:lower:]小写字母 [:upper:]大写字母 [;digit;]数字 [:punct:]标点符号

[;alnum;]字母和数字 [:space:]空白字符 文件名通配

rm –f *.doc

file 查看文件

命令行展开 ~,{},

ls ~redhat

touch {a b}_{c d}

clip_image004

shell 应用程序,提供用户作为系统接口

命令

编程功能

软件编程:编译类:源代码——》目标代码(编译) C C++ JAVA

脚本类:源代码 (解释器 bash) 一般来说 面向应用层

脚本语言:perl(redhat 5.8)面向过程

python面向对象 更适合于构建大型应用

ruby (on rail)日本

shell

shell, bsh(sh) 标准shell 开发者bourn 1979年 贝尔实验室

Bill joy 伯克利大学 csh——>tcsh(改进版) FreeBSD 默认cshell

korn,ksh,GNU ksh(跟原来的ksh不是一回事)

bourn again shell bash shell 遵循GPL Linux目前使用最广泛的

zsh 功能强大 体积庞大 最年轻的

clip_image006

cat –n 显示行号

-A --show-all 显示非打印字符

-T 显示制表符

不带参数 默认从键盘读取内容

clip_image008

cat /etc/shells

显示可用的shell的种类

clip_image010

切换shell 输入名字即可 eg:ksh

其他shell返回bash shell 的时候一般先exit

不然会在当前进程下再创建一个子进程,会浪费资源

变量:(容器) 命名的内存空间

变量就是以一组文字或者符号等,来取代一些设定或者是一串保留的数据。

在脚本语言里,任何一种类型都会被识别为字符型

bash:本地变量 只对当前程序有效(类似于局部变量)

环境变量 shell中其他进程可以使用 共享型变量

export CLASS=3 导出变量值 可以被一个进程和子进程共用

clip_image012

unset NAME 撤销变量值

只有在引用(取变量的值)的时候加$

位置参数变量

特殊变量 $?

本地变量的声明:NAME=linna

或者 set CLASS=3

unset 取消变量值

引用:取变量值 “ ”,’ ’, ``

“ ” 弱引用 会做变量替换

‘ ’ 强引用 不会做变量替换

``(反引号) 命令引用 反引号内的命令会先执行,执行完的信息在传回到外部命令来处理。

通配符与特殊符号:

clip_image014

clip_image016

printf 不会自动在后面加”\n” 不会自动换行

{} 告诉变量名的范围 echo ${NAME}s 在name变量后边再加上s输出

命令引用:

FILE=`ls /root`

clip_image018

FILE=$(ls /var)

把命令的执行结果当做变量的值赋给FILE

clip_image020

clip_image022

声明的变量不想被人撤销或者改变 使用readonly命令声明

eg :readonly NAME

几点规则:——《鸟哥的linux私房菜》

1.变量与变量内容以等号来连接;

2.等号两边不能直接接空格符;

3.变量名称只能是英文字母和数字,但是数字不能是开头字符;

4.若有空格符可以用双引号或者单引号将变量内容结合起来,但要注意,双引号内的特殊字符可以保有变量特性,但是单引号内的特殊字符仅为一般字符;

5.必要时需要以转义字符“\”将特殊符号变为一般符号;

6.在一串命令中,还需要用到其他命令提供的信息,可以使用 `command` 注意是反引号

clip_image024

clip_image026

clip_image028

env 显示本地环境变量 通常用来保证运行一个命令的时候只在定制的路径下的命令

eg:env PATH=/bin/ls

不带任何参数也可以显示环境变量。

几个常用变量

PS1 export PS1=‘[\u@\h \w]$’

clip_image030

clip_image032

PS2

PS3

PS4

LANG 定义语言

locale 查看定义的语言区

logname

OLDPWD 记录上一个工作目录

SHELL

RANDOM 随机数,使用echo RANDOM时会产生一个随机数,介于0——32767之间。

如果想输出一个0——9之间的随机数,可以这样:

clip_image034

echo $? 返回上一个命令的执行状态值 eg 0 2 127

declare 声明变量类型

-a 将变量声明为数组(array)

-i 将变量声明为整数数字(integer)

-x =export 将变量声明为环境变量

-r 将变量声明为只读(readonly)

alias 定义命令别名

alias cdnet=’cd etc/sysconfig/network-scripts’

不想使用别名,在别名前加”\” .

unalias 撤销 仅对当前shell生效

登录信息显示数据 /etc/issue

clip_image036

/etc/motd 用户登录后显示信息

永久使用 编辑环境配置文件

#!/bin/bash

脚本中调试功能 set –x

set +x

之间的命令

bash –x 脚本名称 调试整个脚本

系统级别:全局/etc/profile , /etc/profile.d/* , /etc/bashrc

用户定义:~/.bash_profile , ~/.bashrc , ~/.bash_history , ~/.bash_logout

交互式 profile 通常用于放置环境变量的设置定义等

/etc/profile---à /etc/profile.d/*---à~/.bash_profile---à~/,bashrc---à/etc/bashrc

后面的会覆盖前边的

非交互式 bashrc别名等的定义

~/.bashrc---à/etc/bashrc----à/etc/profile..d/*

退出之前需要做些清理工作 ~/.bash_logout

使设置的别名生效 source 或者. 别名

lecture 7 标准I/O及管道

程序 <代码 数据>

总线 BUS ,PCI, ISA,EISA,AGP,USB

文件句柄 handle ,文件描述符

标准输入 keyboard 0

标准输出 monitor 1

标准错误输出 monitor 2 跟正常输出不是同一个数据流

I/O重定向:

&gt;输出重定向 set –C (?----&gt;set +C)拒绝别人信息的覆盖

clip_image038

如果一定要覆盖:&gt; | 强行覆盖

clip_image040

<输入重定向

clip_image042

>&gt;追加重定向 不会覆盖原有文件

<&lt; here document 可以在脚本中生成文件

clip_image044

2>&1 === &&gt; 标准错误输出重定向

clip_image046

管道

管道的最后一个命令是在一个子shell 中运行的

例子: echo ‘abcd’ | tr ‘a-z’ ‘A-Z’

clip_image048

tee

echo ‘abcd’ | tee /tmp/tee.out |tr ‘a-z’ ‘A-Z’

clip_image050

自定义文件描述符 exec 3&gt; /tmp/custom.out

取消文件描述符 exec 3&gt;&-

多次往一个文件中写入内容,可以提高脚本输出地效率,因为只需打开一次,关闭一次

clip_image052

lecture 8

less

more

tail -f 一直查看,命令不会退出

less

grep 全面搜索正则表达式 并打印出来

pattern 模式,从文件中匹配整个模式 而后显示包含了匹配到的内容的行

正则表达式 基本表达 扩展正则表达

* 次数匹配 匹配前边字符0次或任意次

.匹配任意单个字符

.*匹配任意字符0次或者任意次(任意长度任意字符)

?零次或一次

+ 一到任意次

默认处于贪婪模式,越长越好

r.\{2\} 只能出现两次

r.\{0,2\}出现0到2次

r.\{2,\ } 至少两次

[a-z] [A-Z] 匹配任一个字符

[^a-z]除了a到z

锚定符:

^root 以root开始

root$ 以root结尾

\<锚定单词词首

\>锚定单词词尾

\b 匹配词首词尾 \broot\b

\<root\> 只寻找含有root的字符

[abc] 匹配中括号中单个字符,

\(..\) love your lover \(love).*\1r

^[[:alpha:]]*[^.][0-9]*

寻找精度为2的小数

\<\[0-9]\{1,\}.[0-9]\{2\}\>

总结:

* 0<=

? 0 ,1

+ 1&lt;=

| 或者

clip_image054

clip_image056

clip_image058

clip_image060

grep 全面搜索正则表达式 并打印出来

–v 反向显示 匹配到的不显示 而不匹配到的显示

-i 忽略大小写

-n 在匹配到的结果里只挑取有限范围行

-An 每一个匹配的行下边再显示N行

-Cn 每一个匹配的行上下边再显示N行

-E 使用扩展正则表达式

--color=auto 自动添加默认颜色

export GREP_COLOR=’01;32’ 改变显示颜色

grep –v “^$” ($以空白开头 以空白结束)把空白行去掉

clip_image062

egrep 使用扩展正则表达式

fgrep 快速搜索正则表达式 = grep –f 不做任何正则表达式的匹配,不把任何字符当做元字符

clip_image064

clip_image066

如何从一个文档中找出正确的ip地址

1[0-9]\{0,2\}|2[0-5]\{2\}\.[0-1]\{1\}[0-9]\{0,2\}|2[0-5]\{0,2\}\.[0-1]\{1\}[0-9]\{0,2\}|2[0-5] \{0,2\}\.[0-1]\{1\}[0-9]\{0,2\}|2[0-5] \{0,2\}

sort –o 指定保存在什么文件里边

-r 逆序

-n 以数值来排序

-u 把相同的行给去了

-t 指定以列排序

-k 指定第几段

-f 忽略大小写的差异

-b 忽略最前面的空格符部分

clip_image068

uniq 去除重复的行 假设两行一摸一样且连续

-c 显示每一行重复的次数

-u 只显示不重复的行

-d 只显示重复的

-i 忽略大小写

clip_image070 示重复的行er

cut –d: 后面接分隔符。与-f 一起使用

-f 依据-d 的分隔字符将一段信息分割成数段,用-f 取出第几段

-c 以字符(character)的单位取出固定字符区间

clip_image072

ifconfig | grep “inet addr” | cut –d: –f2

wc word count 计算字符

-l 仅列出行

-w 仅列出多少字(英文单字)

-m 多少字符

who | grep“^root”|wc –l

写一个脚本显示某用户登录了多少次 以及登录时间

/dev/null 垃圾桶 把命令丢弃

条件测试 test express

0真 1假

&& 前面条件为真,后面一定会执行

前面条件为假,后面一定不执行

|| 前面条件为假,后面一定会执行

前面条件为真,后面一定不执行

grep “^root” /etc/passwd || (who | grep “^root” |wc -l)

grep “^roooot” /etc/passwd &&(who | grep “^root” |wc -l)

grep “^roooot” /etc/passwd &> /dev/null && (who | grep “^root” |wc -l)

grep “^roooot” /etc/passwd &&gt; /dev/null || echo “Hello,world”

条件判断三种表达方式:

test expression #test 1 –gt 2

[expression] #[ 1 –gt 2]

`expression` #[[ 1 –gt 2]]

-a 与

-o 或

! 非

短路操作符

&&

[]&&[]只要前面为假,后边就不再运行

[]||[]

[2 –gt 3] || echo “3 is max”

cut -d: -f1 /etc/passwd | grep “^student$” && echo “Student exists” || echo “student is exists”

比较两个数大小

#!/bin/bash

[ $1 –gt $2 ]&& echo $1 || echo $2

条件测试分为三种:

整数测试

-gt -lt -ge -le -eq -ne

(($A&gt;$B))

&gt; &gt;=

字符串测试

= != &gt; < -z -n

文件测试

-e FILE

-f FILE

-d FILE

-r FILE

-w FILE

-x FILE

-L/-h FILE 测试一个文件是否为符号链接文件(软链接)

-O FILE 测试此文件属主是否是你自己

-G FILE

测试文件存在否 不存在就创建

clip_image074

clip_image076

clip_image078

diff/patch 比较两个文件的不同不同之处

diff vimrc virmc2 > vimrc.patch 生成一个补丁

patch vimrc <virmrc.patch 打补丁

diff virmc virmc2 比较

-u 用统一格式输出两个文件的不同

diff dir1 dir2 目录下同名的文件逐一比较

-p2

aspell 词法检查

tr ‘a-z’ ‘A-Z’ 字符转换

sed stream editor 行编辑器 一次只处理一行

非交互编辑器

没有破坏性 不修改源文件 除非使用shell的重定向

sed (stream editor) 流编辑器

sed是一个行编辑器,它逐行处理要被处理对象文件的内容,并会把结果输送至屏幕

clip_image080

sed [options] ‘patitern/operation’ File

‘/root(模式)/p(操作结果)’/etc/passswd

-n 不显示模式空间的内容,只显示匹配并处理的内容

sed s/(模式)/ROOT(模式/

默认只替换每行中第一个 全部替换使用选项-g

i 忽略大小写

分隔符可以使用任意你想要的符号 :s@@@

指定地址范围 add1,add2s/// /root/,/student/ s/root/ROOT/第一个出现root的行,第一个出现student的行

10,$(最后一行)s/root/ROOT/g

-i对原文件进行直接替换 默认不会改变原文件

-e 同时实现多项修改

clip_image082

-f 可以从文件中读取条件的选项

sed.txt的内容

clip_image084

clip_image086

-s 查找并替换

-a 在某行的后面进行追加

clip_image088

clip_image090

后面的“g”表示全局替换 global

clip_image092

1,5表示指定地址范围

operation p 显示

d 打印

vi 模式化编辑器

命令模式(编辑模式)

输入模式

末行模式

命令——>输入 i,a

输入——&gt;命令 ESC

命令——&gt;末行 输入冒号

末行——&gt;命令 Esc (敲两下)

vi vi improved, vim

退出:

:wq 保存退出

:q 退出

:q!修改后不保存直接退出

:w!强制写入

shift+z 连输两次,保存退出

打开后光标处于第N行上 vim +n file

直接匹配到有redhat的哪一行 vim +/redhat file

光标移动:h 左 j下 k上 l右

行内移动:^第一个非空白字符的行首 0绝对行首 $绝对行尾

以单词为单位:w 一次移动一个单词(word)到下一个单词的词首 b (backward)上一个单词的词首,或当前单词的词首 e (end )跳到当前或下一个单词词尾

行间移动:nG 1G 跳到第一行

G 跳到最后一行

末行模式下实现行间跳转 :n

句间跳转: )(

段落间跳转: }{

命令模式——&gt;输入模式:i:insert在当前光标所在处插入

I:在当前光标的行首

a:append 追加 在当前光标的后边插入 A在当前光标的行尾

o:在当前光标所在行上方插入新行

O:在当前光标所在行下方插入新行

cw 先删除一些东西,在转换到插入状态

c$

C

r (replace)字符替换

R (替换模式)所有操作都会替换原来的内容

删除 x 删除当前光标所在处(往后)的字符

X 删除光标往前的内容

d 连敲两次,用于删除 光标当前所在行

nd 用于删除光标下n行

复制操作

yy 复制一行 p粘贴

Y=yy

3yy 复制三行

p当前光标所在行的下方粘贴

P当前光标所在行的上方粘贴

移动内容

:,. +100

可视模式

v

V

查询:

/pattern

?pattern

clip_image093

\$[A-Z]\{1,\}

查找并替换:

:addr1,addr2s///gi

%全文搜索

:%s/red/RED/gi

:%s/^#//g

%s/^[[:space:]]\{0,\}#[[:space:]]*//g

%s/^[[:space:]]\{0,\}#[[:space:]]*.*$//g

clip_image095

ctrl + r 撤销上一次操作

redo 重做 不能重做撤销 ,一般是撤销之前的命令

一次打开多个文件

vim a b c d

:next 下一个

:prev 前一个

:first 第一个

last 最后一个

-o 水平分割当前窗口

-O 用于垂直分割窗口

末行模式下 vsplit

set 定制vi编辑器

number:行号

autoindent 自动缩进

ignorecase忽略大小写

vimtutor vim练习器

shell算术运算:

$((expression))

$[expression]

let

面向对象:顺序 选择 循环

延伸阅读

评论