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
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