GPL general public license 

gun gun is not unix


w:

查看在线用户 登陆方式 版本信息


pkill 

踢出用户及进程

pkill -kill -t 登陆方式TTY


ls

-l:长格式

文件类型

- 普通文件

d 目录文件

b 块设备文件

c 字符设备文件

l 符号链接文件

p 命令管道文件

s 套接字文件

文件权限:9位, 每3位一组 ,每一组 rwx (读,写,执行)

文件硬链接的次数

文件的属主

文件的属组

文件大小:单位字节

时间戳:每个文件有3个,最近一次被修改的时间

访问

修改 文件内容发生改变

改变 元数据 属性(名称)

-h:单位换算

-a:显示以.开头的隐藏文件

. 当前目录

.. 父目录

-A 不显示 . ..

-d 显示目录自身属性

-i  index node, inode

-r 逆序显示

-R 递归(recursive)显示



cd:change directory

  家目录 主目录 home directory

  CD ~username 进入指定用户的目录

  CD - 当前目录返回前一次目录切换

  

  

命令类型:

内置命令:shell内置

外置命令:在文件系统的某个路径下 有个与命令名称相应的可执行文件

环境变量: 命名的内存空间

变量赋值

name=jerry

path: 使用冒号分开的     cash is king 缓存为王

0(1) 在1个里找 和在10000个里找的速度差不多,速度快 hash


hash:显示缓存

type:显示指定属于哪种命令

date:时间管理

date -s 时间     修改系统时间


linux:rtc - real time clock

ntp - network time protocol

linux 有2个时钟 

硬件时钟

系统时间

获得命令的使用帮助:

内部命令:

help command

外部命令:

command --help

命令手册 manual

man command 查看命令帮助手册

whatis command 查看命令章节




分章节:

1,用户命令 (/bin,/user/bin,/usr/local/bin)

2,系统调用

3,库调用

4,特殊文件(设备文件)

5,文件格式 (配置文件的语法)

6,游戏

7,杂项:miscellaneous

8,管理命令:(/sbin,/user/sbin,/usr/local/sbin)


【可以省略】    

<必须选择>  

| 多选一  

... 可以出现多次

{}分组 无意义


man:


name:命令名称及简要说明

synopsis:用法说明,可用选项

description:详尽描述,包括选项意义

options:说明每个选项的意义

files:此命令相关的配置文件

bugs:

example:使用实例

see also:另外参照


翻屏:

向后翻一屏 space

向前翻一屏 b

向后一行 enter

向前一行 k


查找:

/KEYWORD  向后

n:下一个

N: 前一个

?KEYWORD  向前

q:退出

hwclock

-w:系统写到硬件

-s:硬件写到系统

在线文档:

info command



文档:    /USR/SHARE/DOC 

google


cal calendar


echo

printf



file 

window pe

linux elf

文件系统:

rootfs:根文件系统

fhs:linux 


/boot:系统启动相关的文件,如内核:initrd,以及grub(bootloader)

/dev:设备文件:

 块设备:随机访问,数据块 

 字符设备:线性访问,按字符为单位

 设备号:主设备号和次设备号

/etc:配置文件

/home:用户的家目录:默认为与用户同名的

/root:管理员的家目录

/lib:库文件

/lib/modules:内核模块文件

静态库 .a 

动态库 .DLL .SO

/meida:挂载点目录,移动设备

/mnt:挂载点目录,额外的临时文件

/opt:可选目录,第三方软件安装处

/proc:伪文件系统,内核映射文件,

/sys:为文件系统,跟硬件相关的属性映射文件

/tmp:临时文件

/var:可变化的文件

/bin:可执行文件,用户命令

/sbin:管理命令


/usr: shared ,read-only 全局共享只读文件

/user/bim

/user/sbin

/usr/lib

/usr/local:

/usr/local/bin

/usr/local/sbin

/usr/local/lib

命名规则:

1,长度不超过255字符

2,不能使用/当文件名

3,严格区分大小写



相对路径:

绝对路径:

文件管理


目录管理

ls

pwd

cd

mkdir:创建空目录 

-p:先创建父目录

-V:详细信息

命令行展开:{}  

rmdir:删除目录

删除空目录


文件的创建和删除

touch

-a

-m

-t

-c

stat 


创建文件:可以用文件编辑器

nano

删除文件:

rm

 管理员 有默认 -i 选项,提示删除

  -f 强行删除

  -r 递归 删除目录

  

复制和移动文件:

cp:copy 

cp src dest

一个文件一个文件

多个文件一个目录

-r 递归

-f 强行

-i 交互

-p 保留属性复制

-a 归档副指挥  及连接  备份常用

mv:move




-t 目标  源 位置交换

install: 复制文件或文件夹

-d 创建目录

-m 指定权限

tree:查看目录结构




目录管理:

ls cd pwd mkdir rmdir tree


文件管理:

touch stat file cp mv install rm nano 


日期时间:

date clock cal hwclock


查看文本:

cat tac more less head tail 


cat:连接并显示

—n

-E

tac:反向连接并显示


分屏显示:

more:支持向后翻,不能到尾部可以向前

less:


head:前N行

tail:后N行

默认是10

-n 


tail -f 不退出实时查看文件尾部



文本处理:

cut join sed awk 


database 数据库 

关系型数据库:

表:二维表


cut:

   -d: 指定字段分隔符,默认是空格

   -f: 指定要显示的字段

-f 1 显示第一个字段      1,3   显示第一和第三字段


文本排序:

sort

-n:按数值排序

-r:降序排序

-t:以哪个为字段分隔符

-k:以哪个字段为关键字

-u:排序后相同行只显示一次

-f:排序时忽略字符大小写

uniq:

-e:显示文件中重复的次数

-d:显示重复的行

文本统计:

wc word count


字符处理命令:

tr 转换或删除字符

-d:删除出现字符集中的所有字符

“a-z”   “A-Z” :替换

 

 

bash 及其特性

 shell:外壳 用户对接计算机的程序

 gui:gnome kde xfcs

 cli:sh csh ksh bash tcsh zsh

 

进程:在每个进程看来 当前主机上只存在内核和当前进程

进程是程序的副本,也是程序运行的实例


用户的工作环境:

bash:



shell:子shell


bash:

1.命令历史

2.管道、重定向

3.命令别名

4.命令行编辑

5.命令行展开

6.文件名通配

7.变量

8.编程



特性

命令行编辑:

ctrl + a :跳到行首

ctrl + e :跳到行尾

ctrl + u :删除光标至行首

ctrl + k :删除光标至行尾

ctrl + 箭头: 跳转单词

ctrl + l :清屏


命令历史:

查看命令历史:history

-c:清空历史命令

-d offset [n]:删除指定位置的命令

-w:保存命令历史至历史文件中

环境变量: echo $变量名

PATH 命令搜索路径

HISTSIZE 命令历史缓冲区大小


命令历史的使用技巧

!n:执行第N条命令

!-n:执行倒数第N条命令

!!:执行上一条

!字符:执行命令历史中最近一个以字符开头的命令

!$:   引用前一个命令的最后一个参数

esc松开.   引用前一个命令的最后一个参数

alt+.   引用前一个命令的最后一个参数

命令补全:tab 双下 tab

路径补全

命令别名 

alias 命令别名=命令 可带选项 参数

在shell 定义的别名,只在当前shell的生命周期中有效,别名有效范围为当前shell进程

unalias 命令别名  撤销

\命令 使用纯命令不带参数

命令替换 $(command)    反引号 ESC下面的那个  `command`

把命令中某个子命令替换为其执行结果的过程



bash支持的引号:

``  :(反引号)  命令替换

”“  : 弱引用 ,可以实现变量替换

‘’  : 强引用,不完成变量替换


文件名通配:globbing

*:任意长度的任意字符

?:任意单个字符

[]:匹配指定范围内的任意单个字符  [a-z] [0-9] [a-zA-Z]

[[:space:]]  空白字符

[[:punct:]]  标点符号

[[]:lower:]  小写

[[:upper:]]  大写

[[:alpha:]]  大小写字母

[[:digit:]]  数字

[[:ainum:]]  数字和大小写字母


man 7 glob 查看


用户:标示符

用户组:

权限:

r w x


文件:

r:可读,可以使用类似cat 查看

w:可写,可以编辑或删除文件

x:可执行 ,executable ,可以在命令提示符下当做命令提交给内核运行


目录:

r:可以对此目录使用LS以列出内部的所有文件

w:可以在此目录中创建文件

x:可以使用CD切换进此目录 ,也可以使用ls -l 查看内部文件的详细信息。



默认文件不应带X权限,方式加入恶意程序造成威胁

目录最好带上X权限,


0 000 ---

1 001 --x 

2 010 -w- 

3 011 -wx

4 100 r--

5 101 r-x 

6 110 rw-

7 111 rwx



用户:UID  /etc/passwd 

组:GID  /etc/group


影子口令:

用户: /etc/shadow

组:/etc/gshoadow



用户类别:

管理员 :ID  0

普通用户:ID 1-65535

系统用户:ID 1-499

一般用户: ID 500-60000

用户组:

管理员组:

普通组:

系统组:

一般组:

  

  用户类别:

私有组:创建用户是,如果没有为其指定用户组,系统会自动会创建一个与用户同名的组

基本组:用户的默认组

附加组:额外组,默认以外的其他组

/etc/passwd

account

password

UID

GID

gecos 用户注释

home dir:家目录

shell:


/etc/shadow

account

encrypted password





加密方法:

 对称加密:加密和解密使用同一个密码

 公要加密:每个密码都是成对出现,一个为私钥,一个为公钥  公钥加密私钥解密,反之亦然

 单项加密:散列加密,提取数据特征码

1,雪崩效应  

2,定长输出

  MD5:message digest 5 128位定长输出

  SHA1:secure hash algorithm     160位定长输出


useradd 用户名 

groupadd 组名





用户管理:

useradd,userdel,usermod,passwd,chsh,chfn,finger,id,chage

useradd [option] username

-u uid

-g gid(基本组)

-G gid (附加组,)可以有多个用,隔开

-c 注释信息 “comment”

-d /路径

-s 指定shell 最好是出现在/etc/shells

-m  -k  自定义home目录建立

-M 不给用户创建home目录

-r 添加一个系统用户(ID 1-499)

/etc/login.defs




userdel [option] username 默认不删除用户的home

-r 同时删除用户的家目录

id:查看的用户的ID属性 id 用户名

-u

-g

-G

-n

finger:查看用户账号信息 finger 用户名


修改用户账号属性:

usermod 

-u

-g 

-G -a 追加附加组,不适用-a ,会覆盖此前的附加组。

-c 

-d -m  改变家目录,连同原有的文件一起

-s 

-l 改变登录名

-L 锁定账户

-U 解锁账户

chsh:修改用户的默认shell

chfn:修改用户的finger信息



密码管理:


passwd: passwd 用户名 

--stdin 

-l 锁定账户

-u 解锁账户

-d 删除密码

pwck:检查用户账号完整性



组管理:

创建组:groupadd

-g 指定gid

-r 添加一个系统组


groupmod

-g gid

-n 组名

groupdel

gpasswd 组名 :为组设定密码


newgrp 组名:登陆一个新的不是自身本地组和所属组,可以用exit退出


chage 

-d 最近一次的修改时间

-E 过期时间

-i 非活动时间

-m 最短使用期限

-M 最长使用期限

-w 警告时长

权限管理:



/etc/shells:指定了当前系统可用的安全shells


环境变量:

PATH,HISTSIZE,SHELL(系统当前shell)

组管理:

groupadd,groupdel,groupmod,gpasswd


权限管理:

chown,chgrp,chmod,umask,



chown:改变文件属主 只有root可以

-R  修改目录及其内部文件的属主

--reference =/path/to/somefile file 

    chown 属主:属组

chown 属主.属组

chgrp:改变文件的数组 只有root可以

参数同上

chmod:修改文件的权限


修改三类用户的权限:

chmod mode files

-R

--reference

修改某类用户或某些类用户权限:

u,g,o,a

chmod 用户类别=mode


修改某位用户的某位或某些位权限:

u,g,o,a 

chmod + — 处理


umask:反向掩码 遮罩码

文件 666-umask

目录 777-umask


文件默认不能具有执行权限,如果算得的结果中有执行权限,则将其权限+1


umask 023

文件:666-023=643 ---最终644 

目录:777-023=754

用户登陆:

shell的类型:

登陆式shell

正常通过某终端登录

su - 用户名

su -l 用户名

非登录式shell

su 用户名

图形终端打开命令窗口

自动执行的shell脚本

bash的配置文件:

全局配置

/etc/profile,/ect/profile.d/*.sh,/etc/bashrc


个人配置

~/.bash_profile,~/.bashrc


profile类的文件

设定环境变量

运行命令或脚本

bashrc类的文件

设定本地变量

定义命令别名


登录式SHELL如何读取配置文件?

/etc/profile -->/etc/profile.d/*.sh -->~/.bash_profile -->~/.bashrc -->/etc/bashrc


非登录式shell如何配置文件?

~/.bashrc -->/etc/bashrc -->/etc/profile.d/*.sh 


bash 脚本解释器


管道和重定向


运算器、控制器:CPU

存储器:RAM

输入输出设备

程序:指令和数据


系统设定

默认输出设备:标准输出 STDOUT, 1

默认输入设备:标准输入 stdin,  2

标准错误输入:STDERR, 3

标准输入:键盘

标准输出和错误输出:显示器


I/O重定向:


linux

> :覆盖输出

>>:追加输出

set -c 禁止对已存在的文件使用覆盖重定向

强制覆盖输出,则使用>|  实现

+c 关闭上述功能

2>:重定向错误输出

2>>:追加方式


&>:重定向标准输出或错误输出值同一个文件


<:输入重定向

<<: here doucument


管道: 前一个命令的输出,作为后一个命令的输入

 

命令1| 命令2|命令3|......


tee:显示并保存


文本查找的需要:


grep,egrep,fgrep,


grep: global research  根据模式,搜索文本,并将符合模式的文本行显示出来.


pattern:文本字符和正则表达式的元字符组合而成的匹配条件


-i:忽略大小写

--color:颜色显示

-v:反向查找

-o:只显示被模式匹配到的字符串




*:任意长度的任意字符

?:任意单个字符

[]:

[^]:



正则表达式:regular expression ,regexp

元字符:

.:表示匹配任意单个字符

[]:匹配指定范围内的任意单个字符

[^]:匹配指定范围外的任意单个字符




匹配次数:(贪婪模式,尽可能长的去匹配)

*:匹配其前面的字符任意次

  a,b,aab,acb,adb,amnb,

  a*b   

  

.*:任意长度的任意字符

\?:匹配其前面的字符1次或0次

\{m,n\}:匹配其前的字符至少m次,之多n次

\{1,\} 最少1次,最多无限次

\{0,3\}最少0次,最多3次

位置锚定:

^:锚定行首:此字符后面的任意内容必须出现在行首

$:锚定行尾:此字符后面的任意内容必须出现在行尾

^&:空白行


\<或者前置\b:锚定词首:其后面的任意字符必须作为单词首出现

\>或者后置\b:锚定词首:其前面的任意字符必须作为单词的尾部出现


\<root\>


分组:

\(\)

grep '\([[:digit:]]\).*\1$' /etc/inittab


正则表达式:

基本

扩展

基本正则表达式:

字符

.

[]

[^]

次数

*

\?

\{m,n\}


.*


锚定

^

$

\<

\>


分组

\(\)

\1,\2,\3\,....


grep:使用基本正则表达式定义的模式来过滤文本的命令

-i

-v 

-o

--color

-E 扩展正则表达式

-A:前

-B:后

-C:前后

扩展正则表达式:


字符:

.

[]

[^]


次数:

*

?:最多一次匹配    0或者1次

+:匹配其前的字符至少1次  1次或者更多

{m,n}:


锚定:

^

$

\<

\>


分组:

()

\1,\2,\3,...


或者:

|:or 或者


grep -E= egrep

fgrep:fast grep 不支持正则表达式


shell编程:


编程语言:机器语言,汇编语言,高级语言


静态语言:编译型语言

强类型(变量)

关键字:

事前转换成可执行格式

c,c++,java,c#

优点,性能好

缺点,每次改动都要重新变编译

 开发周期长,维护成本大

动态语言:解释型语言

弱类型()

边解释边执行

asp,.net,php,shell,python,perl,

优点:便于维护,众多共享模块,开发周期短

缺点:性能差

面向过程:shell,c,

面向对象:java,python,c++,


变量:内存空间,命名的内存空间


内存:编制的存储单元


进程:


变量类型:事先定义数据的存储格式和长度

字符

数值

整形

浮点型

真假

逻辑运算:与,或,非 ,异或,


shell:弱类型编程语言

强类型:变量在使用前,必须事先声明,甚至还需要初始化,

弱类型:变量用时声明,甚至不区分类型


变量赋值: =


bash:变量类型:

环境变量

本地变量(局部变量)

位置变量

特殊变量

本地变量:

varname=value: 作用域为整个bash进程

局部变量:

local varname=value 作用域为当前代码段

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

export varname=value 

varname=value

export varname

导出

位置变量:

$1,$2,$3,...

shift n 剃去之前使用过的n个变量 默认1

程序执行:可能有两类范围值

程序执行结果

程序状态返回代码(0-255)

0:正确执行

1-255:错误执行, 1,2,127,系统预留

输出重定向:

>

>>

2>

2>>

&>


撤销变量

unset varname


查看当前SHELL中的变量


set 即可


查看环境变量:

printenv

env

export


脚本:命令的堆砌,按照实际需要,结合命令流程控制机制实现的源程序


shebang:魔数

#!/bin/bash 

#注释行,不执行






/dev/null:软件设备,bit bucket 数据黑洞


引用变量:$ {变量名},括号可以省略







编程能力:

脚本编程


bash中如何实现条件判断?

条件测试类型:

整数测试

字符串测试

文件测试

条件测试的表达式:

[ 表达式 ]

[[ 表达式 ]]

test 表达式

整数比较:()

-eq:测试两个整数是否相等,比如$A -eq $B 

-ne:测试两个整数不等,

-gt:测试一个数是否大于一个数

-lt:测试一个数是否小于一个数

-ge:大于等于

-le:小于登陆

命令间的逻辑关系:

逻辑与: &&

第一个条件为假时,第二个条件不再判断,最终结果已经有:

第一个条件为真是,第二个条件必须判断,

逻辑或: || 

命令判定

[`命令`] 结果为真 && 执行

变量名称:1,只能包含字母,数字,下划线,不能以数字开头,

2,不应该和系统已有的环境变量重名

3,最好做到见名知意,


条件判断:控制结构:

单分支if语句

if 判断条件;then

语句1

语句2

...

fi


双分支if语句

if 判断条件;then

语句1

语句2

...

else

语句3

语句4

...

fi



多分支if语句

if 判断条件1;then

语句1

...

elif 判断条件2;then

语句2

...

elif 判断条件3;then

语句3

...

else

...

fi



测试脚本是否有语法错误

bash -n 脚本

bash -x 脚本 单步执行






shell 中如何进行算数运算:

A=3 B=6


1,let 算数表达式

LET C=$A+$B

2,$[算数表达式]

C=$[$A+$B]

3,$((算数表达式))

C=$(($A+$B))

4,EXPR 算数表达式,表达式中各操作数及运算符要有空格,而且要使用命令引用

C=`expr $A + $B`

exit:退出脚本

exit 自定义 数值也可 0-255 

如果脚本没有明确定义退出码,最后执行的一条命的退出码即为脚本的退出码.




文件测试:

-e 文件:是否存在

-f 文件:是否为普通文件

-d 文件:测试指定路径是否为目录

-r 文件:测试当前用户指定文件是否有读权限

-w 文件:测试当前用户指定文件是否有写权限

-x 文件:测试当前用户指定文件是否有运行权限


圆整:丢弃小数点后的内容


[ -e /etc/fstab ] 比较存在


环境变量:

ls /etc/bashrc /etc/gshoadow /etc/fstab

$1=/etc/bashrc

$2=/etc/gshoadow

$3=/etc/fstab


特殊变量:

$?:程序状态返回代码

$#:参数的个数

$*:参数列表

$@:参数列表

sed:流编辑器

awk:

sed基本用法

stream editor

行编辑器(全屏编辑器:vi)


sed:模式空间

默认不编辑源文件,仅对模式空间的数据进行处理,而后,将模式空间予以打印到屏幕

sed  [options] 'addresscommand' file ...

-n:静默模式 不显示模式空间中的内容

-i:直接修改源文件

-e脚本 :同时执行多个脚本

-f 文件:从文件内容导入

-r:表示使用扩展正则表达式

address:

1,起始行,结束行

1,100 1到100行

$:最后一行

$-1:倒数第二行

2, /正则表达式/

/^root/

3,/模式1/,/模式2/  

第一次被模式1匹配到的行开始到第一次被模式2匹配到的行结束中间的所有行

4,行号

指定行

5,指定起始行 +N

从指定行开始,向后的N行

command:

d:删除符合条件的行

p:显示符合条件的行

a \字符串:在指定的行后面追加新行,内容为字符串

\n:可以换行

i \字符串:在指定的行前面追加新行,内容为字符串

r 文件:将指定的文件的内容添加至行处

w 文件:将指定范围内的行的内容另存至文件中

s/内容/替换内容/修饰符 查找并替换 ,默认只替换每行中被模式匹配到的字符串

加修饰符

g:全局替换

i:忽略大小写

s///;s###;s@@@;都可以,分隔符相同即可

&:引用模式匹配到的整个串

支持后向引用


字符串测试

==:相等 为真 

!=:不等 为真

>

<

-n 字符串 : 测试指定字符串是否为空,空为真

-s 字符串 : 测试指定字符串是否为不空,不空为真


bc <<< "bc的参数,用; 分开命令"

echo "bc的参数,用;分开命令" | bc 


循环:

进入条件,退出条件

for

while

until


for 变量 in 列表 ; do

循环体

done


遍历完成之后:退出


如何生存列表:

{1..100} 1-100


seq 起始数 步进数 结束数  引用需用`` 


declare -i 变量   声明变量为整形

-x 变量   声明变量为环境变量


vim 编辑器

文本编辑器,字处理器

ASCII

vi :visual interface

wim:vi inproved


全屏编辑器,模式化编辑器,

Vim 文件名

模式:

编辑模式,命令模式

输入模式

末行模式

默认是编辑模式,

模式转换:

编辑--输入:

i:在当前光标所在字符前面,转为输入模式.

a:在当前光标所在字符后面,转为输入模式.

o:在当前光标所在行的下方,新建一行,转为输入模式

I:行首

A:行尾

O:行下方

输入--编辑:

esc 

编辑--末行模式:

:

末行模式--编辑

esc ,esc

打开文件

vim + 行号:跳转到行号

vim + :直接到最后一行

vim + /pattern:打开文件,定位至第一次被pattern匹配的行首

关闭文件:

末行模式关闭:

保存退出:wq = x

退出:q 

不保存退出:q!

强行保存:w!

编辑模式关闭:

ZZ:2个大写Z 保存退出

移动光标

1.逐字符移动

h:←

l:右

j:上

k:下

    数字+移动光标 

2.逐单词移动

w:移动到下个单词词首

e:移动到下个单词词尾

b:跳至前一个单词词首

3.行内跳转

0:绝对行首

^:行首第一个非空白字符

$:行尾

4.行间跳转

#G:直接跳转第几行

翻屏:

ctrl+f:向后翻屏

ctrl+b:向前翻屏

crtl+u:向前半屏

ctrl+d:向后半屏

删除单个字符:

x:删除光标所在处的单个字符

#x:删除光标后的#个字符

删除命令:d

d命令和跳转命令组合使用 dw d$ 

#d跳转符

dd:删除光标所在行

#dd:删除光标所在行内的第#行

末行模式,

起始行,结束行 d

.:表示当前行

$:最后一行

+#:向下几行

$-#:倒数第几行

粘贴命令 p

p小写:如果为行,粘贴至光标下方;如果非正行,粘贴纸光标后方

P大写:如果为行,粘贴至光标上方;如果非正行,粘贴纸光标前方

复制命令 y

用法同 d

修改:先删除内容,在转换为输入模式 c

用法同 d 


替换: r

R:替换模式

撤销编辑 : u 

撤销前一次操作

最多50次,内存空间

撤销撤销的操作 : ctrl + r 

重复前一次的编辑操作 : .

可视化模式: 

v:字符选取

V:矩形选取

查找:

/ pattern 向后查找

? pattern 向前查找

n 后一个 

N 前一个

查找并替换:

在末行模式使用S命令

%:全文查找  %s###;s///;s/内容/替换内容/修饰符;

如何使用vim编辑多个文件

vim 文件1 文件2 文件3

:next 下个文件

:prev 上个文件

:last 最后一个

:first 第一个文件 

:qall 全部退出

分屏显示一个文件

ctrl+w,再 s 水平拆分窗口

ctrl+w,在 V 垂直拆分窗口

ctrl+w ,方向键 切换窗口

分窗口显示多个文件

大写O: vim -O 垂直分割显示

小写o: vim -o 水平分割显示

将当前文件中的部分内容为另一个文件

末行模式 W

:w /路径/文件名

:行号 w /路径/文件名

将另外一个文件的内容填充在当前文件中

末行模式 r

:r /路径/文件名

    与shell交互

:! 命令 

高级话题

1.显示行号number : set nu  取消 :set nonu

2.显示忽略或区分字符大小写ignorecase: set ic 

3.自动缩进 autoindent:set ai 取消 :set noai 

4.查找到的文本高亮显示或取消:set hlsearch 取消 :set nohlsearch

5.语法高亮,: syntax on 取消 :syntax off 

配置文件,

/etc/vimrc 全局

~/.vimrc 用户

$# 参数 

组合测试条件

-a:与关系

-o:或关系

!:非关系

if [ $# - gt 1 -a $# - le 3 ]

sum=sum+1   可以写成 sum+=1 (只有每次+1才可以写成sum++) 

sum-=1      sum--


+=,-=,*=,/=,%=,

文件查找:


locate:

非实时,模糊匹配,查找是根据全系统文件数据库进行的

updatebd ,手动生存数据库

速度快

find:

实时,精确,支持众多查找标准,速度慢

find 查找路径 查找标准 查找到以后的处理动作

查找路径:默认为当前目录

查找标准:默认为路径下的所有文件

查找动作:默认为显示

匹配标准:

-name 文件名作精确匹配

 文件名通配:* ? []

-iname 文件名不区分大小写

-regex 模式   基于正则表达式

-user 用户名 基于属主

-group 组名 基于属组

-uid UID 基于UID

-gid GID 基于GID

-nouser 查找没有属主的文件

-nogroup 查找没有属组的文件

-type 

f:普通文件

d:目录

c:

b:

l:

p:

s:

-size 

[+|-]k, 符合为大于或小于

m,

g,

组合条件:默认是或,o

-a

-o

-not


-mtime:创建时间

-ctime:修改时间

-atime:访问时间

[+|-]

-mmin

-cmin

-amin

-perm mode 权限

 mode 完全匹配  如 644对644

 /mode 有则匹配  如 644对 600 也可

 -mode 包含匹配  如 644对 755 才可,740 不可


动作:

-print 默认

-ls    显示详细信息

-ok 命令 {} \; 结尾    每次操作需要用户确认

-exec 命令 {} \;   括号调用查找到的内容    不需要用户确认

如 find -perm 755 -ok chmod 740 {} \; 


 

pst/#:伪终端


who:谁登陆

w:谁登陆在干嘛

last:谁登陆,登陆多久,重启历史  显示/var/log/wtmp,

-n # 显示最近#次的记录

lastb: /var/log/btmp,用户错误登陆

-n # 同上

lastlog:显示每个用户的最近一次的登陆信息

-u username :指定用户

basename: 取得文件的基名

$0 命令本身

mail :查看邮件

对应文件 ~/mbox

hostname:显示当前主机名

RANDOM:随机生成0-32768的一个数


随机数生成器: 

/dev/random

/dev/urandom


面向过程

控制结构

顺序结构

选择结构

循环结构


选择结构:

if:单分支,双分支,多分支

if condition;then 

statement

fi

if condition;then

statement

else

statement

fi

if condition;then

statement

elif condition 2;then

statement

else

fi


语句:选择结构

case $变量 in 

value1)

statement

;;

value2)

statement

;;

*)

statement

esac

磁盘管理:

机械式硬盘:

U盘,光盘,硬盘,磁带,

 

ln: ln 源文件 连接文件

-s :创建符号链接

-v :显示过程


硬连接:

1.只能对文件创建 ,不能应用于目录

2.不能夸文件系统

3.创建硬链接会增加文件被链接的次数


符号链接:

1.可以应用于目录

2.可以跨文件系统

3.不会增加文件被链接的次数

4.其大小为指定的路径所包含的字符个数

du: 显示目录与文件大小 -s -h换算 

df:显示磁盘空间 -h换算 -i显示inode  -P



设备文件:

块 b :以块为单位,随机访问

字符 c :以字符为单位,线性访问

b:硬盘

c:键盘

/dev

主设备号 major number

标示设备类型

测设备号 minor number

标示同一种类型中不同设备

创建设备文件

mknod

-m mode 指定权限

mknod -m 640 名称 c/b 主设备号 次设备号


硬盘设备的设备文件名:

IDE,ATA : hd

SATA: sd

SCSI: sd

USB: sd

a,b,c 区别同一种类型下的不同设备

ide:

第一个IDE口:主,从 hda,hdb

第二个IDE口:主,从 hdc,hdd

hda:hda1-4 主分区 hda5开始的为扩展分区


查看当前系统识别的硬盘

fdisk -l  

管理磁盘分区


lunux 支持的文件系统

vfs:virtral file system


mkfs 格式化命令 mkfs -t ext3

管理分区

fdisk /dev/sda

p:显示当前分区信息,包括没有保存的

n:新建分区

e:扩展 p:主分区

d:删除分区

w:保存退出

q:不保存退出

t:改变分区类型

-L 同下

l:显示支持的所有类型


cat /proc/partitons

partprobe:内核重读分区表

hedhat6 用 partx

bitmap :



EXT2系统格式:

分区中包含:

1.boot bolck

2.若干的bolck group


block group中包含:

1.supper block :包含多少个块组信息

 块组里有多少个块

 块的大小

 空闲已用块和inode

 可以有多个备份


2.GDT 块组描述符表: 块组名

 起始磁盘块 边界

 块编号


3.block bitmap

4.inode bitmap

5.inode table

6.data blocks



找一个文件:

先找根(自应用)

根的inode

根的块中文件信息

再查需要文件inode

再找块

循环直至找到



ext2 非日志文件系统


ext3 日志文件系统 journal file system 


文件系统管理:

重新创建文件系统会损坏源文件


mkfs: make file system

ext2

ext3

mkfs -t filetype 分区

mkfs -t ext2 = mkfs.ext2 


cat /proc/filesystems 查看当前内核支持的fs

专门管理ext系列文件系统


mke2fs:

-j:ext3

-b:指定block size 默认为,4096.可选1024.2046

-L:指定卷标 

-m:手动指定超级用户的预留百分比

-i:用于指定为多少字节的空间创建一个inode 默认为,8192

-N:指定inode个数

-F:强制创建文件系统

-E:用于指定额外的文件系统属性

blkid:查看磁盘设备分区属性

UUID

TYPE


e2label:查看定义卷标

e2label 设备 卷标名

tune2fs:调整文件系统属性

-j:无损升级,ext2到ext3

-L:设定修改卷标

-m:调整预留百分比

-t:指定预留块数

-o:设定默认挂在选项

acl

-c:指定挂在次数 ,到达次数后自检,0或者-1为关闭

-i:指定时间,到达天数后自检,0或者-1关闭

-l:显示超级快自身的信息

dumpe2fs:查看文件系统信息

-h:只显示超级块信息

fsck:检查并修复linux文件系统

-t fstype:

-a 自动修复

e2fsck:专用修复ext文件系统

-f 强制检查

-a / -p 自动修复


将新的文件系统关联至当前文件系统:挂载

将某文件系统与当前关联系统的关系移除:卸载


mount: 挂载

mount:设备 挂载点

设备:

设备文件

卷标 LABEL=""

UUID UUID=""

挂载点:目录

要求:

1.目录未被其他进程使用

2.目录存在

3.目录中原有的文件将会暂时隐藏

mount 单独使用 显示当前挂载点信息


mount:

-a:挂载/etc/fsta 文件中定义的所有文件系统

-n:默认情况下,mount命令每挂载一个设备,都会把挂载的信息保存至/etc/mtab

使用-n 选项意味着挂载时不把信息写入此文件

-t fstype :指定挂载的文件系统类型,默认不使用时,mount会自动调用blkid获取对应的类型

-r:只读挂载

-w:读写挂载

-o 指定额外的文件系统挂载选项,

remount:重新挂载当前文件系统

ro:挂载为只读

rw:可读写


mount -o loop 挂载本地回环设备 ,如iso镜像文件

挂载完成后,要通过挂载点访问文件系统上的文件


umount:卸载

umount 设备

umount 挂载点

卸载注意点:

1.设备未被使用


swap: 

free 查看

先用fdisk设置分区类型为82


再用 mkswap 设备 格式化swap分区


swapon 启动交换分区

-a 启用所有定在/etc/fstab下的交换设备

swapoff 关闭


回环设备

loopback,使用软件来模拟硬件


创建一个镜像文件,


dd:

if;input file

of:ouput file

bs=:block size 

count=:

seek=:跳过多少

dd if= 源文件 of= 目标文件


dd 直接复制1/0这样的原始数据

cp 通过VFS 对文件进行复制


dd if=/dev/zero of=/var/swapfile bs=1M count=1024


文件系统配置文件:

/etc/fstab 

os在初始化时会自动挂载次文件中的文件系统

字段1,要挂在的设备

字段2,挂载点

字段3,文件系统类型

字段4,挂载选项默认为default

字段5,转储频率 每多少天做一次完全备份.1为每天,0为不备份

字段6,文件系统自检测序.只有根为1


/dev/cdrom /media iso9660 default,ro,acl (用逗号分隔)  0  0

fuser 验证进程正在使用的文件或者套接字

-v 查看某文件上正在运行的进程

-k 杀死正在访问的进程

-m 挂载点结束需要用

fuser -km /media