linux学习笔记2.0

命令
">" | >> file 标准输入重定向(覆盖);(追加)
2> | 2>> file 标准错误重定向(覆盖);(追加)
file < 标准输入重定向
&> file == >file 2>&1 全部标准输出重定向
tr 转换和删除字符
tee [-a] file1 将stdin存入file1并输出(追加)
cmd1 | cmd2 | cmd3 ... 管道(多次)
附加
mail -s “标题” 用户 发邮件
mail 收邮件
seq -s + 1 100 |bc 从1加到100
openssl rand -base64 10 随机生成10位字符串
chsh -s /bin/csh 用户 修改用户shell类型成csh
chfn 修改用户描述
chown 修改所有者
chgrp 修改所属组
scp 文件名 ip 路径 跨服务器复制
reset 重置字符
last 显示用户登录信息
netstat 网络连接查看
&> /dev/null 不显示输出,$?显示结果
namp -v -sP ip地址 扫描ip地址网段的地址up or down7

附加:
" ", ‘ ‘, 反引间区别

" ":能识别其中的变量
‘ ‘:不识别其中内容
反引:能识别其中任何内容(用于引用命令行)

标准输入和输出
程序:指令+数据
读入数据:Input
输出数据:Output
打开的文件都有一个fd: file descriptor (文件描述符)
Linux给程序提供三种I/O设备
标准输入(STDIN)-0 默认接受来自键盘的输入
标准输出(STDOUT)-1 默认输出到终端窗口
标准错误(STDERR)-2 默认输出到终端窗口
I/O重定向:改变默认位置

把输出和错误重新定向到文件
STDOUT和STDERR可以被重定向到文件
命令:操作符号+文件名
‘>‘ 把STDOUT重定向到文件
2> 把STDERR重定向到文件
&> |2>&1 把所有输出重定向到文件
‘>‘ 操作文件内容会被覆盖
‘>> ‘原有内容基础上,追加内容
( ;) 合并多个程序的STDOUT
从文件中导入STDIN
< 重定向标准输入
cat > filea < fileb
单行重定向:回车结束一次
多行重定向:<< 终止符

tr命令
转换和删除字符
tr [optino]...set1 [set2] set1转换成set2
-d 将字符串中的set删除
-c 取字符串的补集
-s 压缩连续的字符
-t 将第一个字符集对应字符转化为第二字符集对应的字符

管道:pipe
cmd1 | cmd2 | cmd3 | ...
cmd1的stdout作为cmd2的stdin,cmd2的stdout作为cmd3的stdin
stdout stderr |& cmd ==(等价于) stdout stderr 2>&1 | cmd
stdout和stderr共同作为stdout作为cmd标入使用
less:一页一页地查看输入
ls -l /etc | less
mail:通过电子邮件发送输入
echo "test email" | mail -s "test" [email protected]
lpr:把输入发送给打印机
echo "test print" | lpr -P printer_name
管道中-符号
将 /home 里面的文件打包,但打包的数据不是记录到文件,而是传送到 stdout,经过管道后,将 tar -cvf - /home 传送给后面的 tar -xvf - , 后面的这个 - 则是取前一个命令的 stdout, 因此,就不需要使用临时file了
tar -cvf - /home | tar -xvf -

tee命令
将命令执行结果存入文件并输出
cmd1 | tee [-a] 文件名 | cmd2 将cmd1的stdout存入文件并输出,作为cmd2的stdin使用(-a 追加不覆盖)
标准输入:
cat tr mail bc(高级运算命令 计算器) 等

用户、组和权限
安全3A
Authentication:认证
Authorization:授权
Accouting|Audition:审计

用户user
令牌token(uid,gid,groups),identity
file(授权uid,read读r write写w excute执行x)
访问资源时根据token中携带的信息给与相应的授权
linux用户:Username/UID
管理员:root/0
普通用户:1-65535
系统用户:1-499,1-999(centos7)
登录用户:500+,1000+(centos7)
交互式登录

组group
linux组:Groupname/GID
管理员组:root/0
系统组:1-499,1-999(centos7)
普通组:500+,1000+(centos7)
Linux组的类别
用户的主要组(primary group)
用户必须属于一个且只有一个主组
组名同用户名,且仅包含一个用户,私有组
用户的附加组(supplementary group)
一个用户可以属于零个或多个,辅助组

安全上下文
context(运行此程序的用户身份,用户组身份)
以进程(proces)发起者的身份运行:
root:/bin/cat
user:/bin/cat
进程所能够访问资源的权限取决于进程的运行者的身份

用户和组的配置文件
/etc/passwd:用户及其属性信息(NAME、UID、主组ID等)
七个字段:
用户名:密码:uid:gid:描述:家目录路径:shell类型
/etc/shadow:用户密码及其相关属性(密码一般用sha512加密)
用户:密码:口令修改时间:最短口令有效期:最长口令有效期:提前通知时间:宽限期:账户有效期:保留字段
/etc/group:组及其属性信息
组名:密码:gid:组员(以当前组为附加组的用户)
/etc/gshadow:组密码及其相关属性
组名:密码:组长:组员(以当前组为附加组的用户)
附:
1、/etc下大部分都是配置文件(文本文件),可修改但有严格格式
2、创建给服务用的账号shell类型用nologin
3、feild 域 列 字段 属性;record 行 记录
4、与创建用户和组相关的文件:
/etc/passwd
/etc/shadow
/etc/login.defs
/etc/default/useradd
/etc/skel/*
/etc/group
/etc/gshadow

文件操作
vipw == nano /etc/passwd (vi==nano)
vigr == nano /etc/group
pwck | grpck 检查用户|组文件格式

用户管理命令
用户创建:
useradd [options] name 创建用户(adduser -> useradd)
-u 创建用户指定UID
-o 配合-u选项,不检查UID唯一性
-g 创建用户到指定组
-c 创建用户并描述
-d 创建用户到指定家目录
-s 创建用户指定shell类型(可用列表:/etc/shells)
-r 创建系统用户(ID:1-499centos6;1-999centos7)
-G 创建用户到指定附加组...
-N 创建用户指定主组users
-m 创建家目录,用于系统用户
-M 不创建家目录,用于非系统用户
-D 显示默认设置
newusers 批量创建用户
chpasswd 批量修改用户口令
用户属性修改:
usermod [option] name 修改用户属性
-u 新UID
-g 新GID
-G 新附加组,覆盖原组,-a追加新组
-s 新的默认shell
-c 新的用户描述
-d 新家目录不自动创建,-m创建新家目录并移动原家目录数据
-l 新用户名
-L 加锁
-U 解锁
-e 设置账号过期日期
-f 设置非活动期限
删除用户:
userdel [option] name 删除用户(若某用户正在使用,该用户不能删)
-r 删除用户和家目录和邮箱
查看用户ID信息:
id [option] name 显示用户信息(判断用户是否存在)
-u 显示UID
-g 显示GID
-G 显示所属组ID
-n 显示用户名,配合u,g,G使用
getent passwd|group|shadow|gshadow
查看这几个文件,后跟u|g,只查看文件中的u|g
切换用户:
su(switch user) user 切换用户(不完全切换)
su - user 切换用户(完全切换)
root切换至其他用户无须密码;非root用户切换时需要密码
设置密码:
passwd [option] name 修改指定用户密码
-d 删除指定用户密码
-l 锁定指定用户
-u 解锁指定用户
-e 强制用户下次登录修改密码
-f 强制操作
-n 指定最短使用期限
-x 最长使用期限
-w 提前警告天数
-i 非活动期限
ehco ‘passwd’|passwd --stdin name 从标准输入接收用户密码
修改用户密码策略:
chage [option] name 交互式修改用户密码时间参数
-d 修改最后期限
-E 修改过期时间
-I 修改非活动期限
-m 修改最短期限
-M 修改最长期限
-W 修改提前警告天数
-l 显示密码策略
用户相关其他命令:
chfn 修改个人信息
chsh 修改shell
finger 查看用户信息

组管理命令
创建组:
groupadd [option] name 创建组
-g 指明GID
-r 创建系统组(GID:1-499centos6;1-999centos7)
修改组:
groupmod [option] name
-n 修改新名字
-g 修改新GID
删除组:
groupdel 删除组(若某组是某用户主组,该组不能删)
更改组密码:
gpasswd [option] name 交互式给组加口令(密码)
-a user 将user添加至指定组
-d user 从指定组中移除user
-A user1,user2,... 设置有管理权限的用户列表
newgrp 临时切换主组(若用户不在此组,需密码)
更改和查看组成员:
groupmems [option] [action] 显示指定组成员
options:
-g 更改为指定组
action:
-a 指定用户加入组
-d 从组中删除用户
-p 从组中清除所有成员
-l 显示组成员列表
groups [option].[username]... 查看用户所属组列表

文件权限
文件属性操作:
修改文件的所有者
chown
用法:
owner
owner:group
:group
“:”可用“.”替换
-R 递归
chown [option]... --reference=file1 file2 修改file2所有者与file1相同
修改文件的所属组
chgrp
用法:
chgrp [option]... group file... file属于group
chgrp [option]... --reference=file1 file2... file2与file同属一组
-R 递归

文件权限介绍
文件权限主要针对三类对象进行定义:
owner:所有者(u)
group:所属组(g)
other:其他(o)
每个文件针对每类访问者都定义了三种权限:
readable:读权限(r)
writable:写权限(w)
excutable:执行权限(x)
文件:
r:可使用文件查看类工具获取其内容
w:可修改其内容
x:可以把此文件提进内核启动为一个进程
目录:
r:可以使用ls查看此目录文件列表
w:可以在此目录中创建文件,也可以删除文件
x:可以使用ls -l查看此目录文件列表,可以cd进入此目录
X:只给目录x权限,不给文件x权限
规则:
1、普通用户不能改文件所有者,可以改所属组(文件所有者是自己,且自己在组里)
2、目录dir是一种特殊文件,其内容就是文件列表
删除文件需要的是对该文件所在的目录的w权限
3、对目录来讲,没有x,即使有r,也无法进入目录,无法查看目录属性,无法访问目录下文件
4、root对r w不受控制,对x受控制;r w x 对普通用户有控制
二进制r权限不是必须的
5、用户获取权限顺序:u-g-o,一旦匹配,不往下执行
6、文件属性由文件系统决定,不是由操作系统决定

修改文件权限
chmod(change mod)
-R 递归修改
修改一类用户所有权限:
u= g= o= a=
修改一类用户某个权限:
u+/- g+/- o+/- a+/-
chmod [option]...--reference=file1 file2... 修改file2权限与file1相同

方法1:mode法
chmod who opt per file
who:u g o a(all)
opt:+ - =
per:r w x X(只对目录加x,如果文件已有x,也对文件加x)
方法2:数字法(八进制授权)
rwx ... ---
111 ... 000
r:4
w:2
x:1
rwx ... ---
7 ... 0

修改默认权限法
默认权限(file:644;dir:755)
umask+default(默认)=file666/dir777(对位相加)
目录777-umask,文件666-umask
umask真正含义:掩码
功能:取消对应的权限
例:
666
125
110110110
001010101(逢1取消权限,1->0)
110100010
642
目录公式不变,文件偶数不变奇数加一

特殊权限
suid(4)(u+s)
继承程序所有者权限,只适合作用在二进制可执行程序
sgid(2)(g+s)
1)继承程序所属组权限
2)作用于目录,该目录下新建文件继承目录所属组
Sticky(1)(o+t)
粘滞位,作用在文件夹,此目录文件只能被所有者删除

设定文件特定属性
chattr +i 不能删除,改名,更改
chattr +a 只能追加内容(echo 内容 >>file,不能用nano)
lsattr 显示特定属性

访问控制列表
ACL:Access Control List
实现灵活的权限管理
除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
ACL生效顺序:所有者,自定义用户,自定义组,其他人
setfacl -m u/g:name:rwx file/diretory 针对用户/组设置文件/目录权限
-x 删除用户/组的文件/目录权限
setfacl -m mask::rwx file/diretory 设置文件/目录的mask权限
setfacl -b file/diretory 清空所有ACL权限
-Rm 递归设置 -M file.acl 批量设置(引用file.acl文件)
-X file.acl 批量删除
getfacl -R /tmp/dir1 > acl.txt 备份acl
setfacl -R --set-file=acl.txt /tmp/dir1
setfacl --restore acl.txt 恢复acl
mask权限
相当于限高杆的作用,是除所有者外的最高权限
ACL文件上的group权限是mask值(自定义用户、自定义组、拥有组的最大权限),而非传统的组权限

文本处理工具
文件查看
命令:
cat 查看文本文件
-E 显示行结束符$
-A 显示所有控制符
-n 对显示出的每一行进行编号
-b 非空行编号
-s 压缩连续空行成一行
tac 反写cat(下->上)
rev 反写(右->左)
分页查看文件内容
命令:
more 分页查看文件
-d 显示翻页及退出提示
less 一页一页查看文件或stdin输出
/文本 搜索文本
n 跳到下一个匹配
N 跳到上一个匹配
less命令是man命令使用的分页器
显示文本前或后行内容
命令
head 显示文件头(默认前10行)
-c # 指定获取前#字节
-n # 指定获取前#行
-# 指定行数
tail 显示文件尾(默认后10行)
-c# 指定获取后#字节
-n# 指定获取后#行
-# 指定行数
-f 显示文件新追加的内容,常用于日志监控
-F 跟踪文件名
tailf类似tail -f,但当文件不增长时并不访问文件

抽取和合并文本
命令:
cut 取出部分文件(列)
-d 指明分隔符,默认tab
-f# 第#个字段(#可多个,可连续)
-c 按字符切割
paste 合并两个文件同行号列到一行
-d 指定分隔符,默认用tab
-s 所有行合成一行显示

分析文本
收集文本统计数据:
wc 显示文件行、单词、字节、字符数
-l 只计数行数
-w 只计数单词总数
-c 只计数字节总数
-m 只计数字符总数
-L 显示文件中最长行的长度
文本排序:
sort 文本排序显示(取列排序)
-r 执行反方向(上至下)整理
-R 随机排序
-n 按数字大小整理
-f 忽略字符串中字符的大小写
-u 删除输出中的重复行
-t c 使用c做为字段的界定符
-k 3 按第3列排序
删除重复行:
uniq 删除重复行
-c 显示每行重复的次数
-d 仅显示重复过的行
-u 仅显示不曾重复的行
注:连续且完全相同的即为重复
比较文件
diff 比较文件不同,命令的输出被保存在一种叫“补丁”的文件中
-u 输出“统一的”diff格式文件,最适用于补丁文件
patch 复制在其它文件中进行的改变(慎用)
-b 自动备份改变了的文件

linux文本处理三剑客
grep:文本过滤工具(模式:pattern)
打印特定的行
三个变种:grep,egrep(支持扩展正则表达式),fgrep(不支持正则表达式搜索)
sed:stream editor,文本编辑工具
awk:linux上的实现gawk,文本报告生成器

grep
作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检
查;打印匹配到的行
模式:由正则表达式字符及文本字符所编写的过滤条件
grep 打印匹配到的行
--color=auto: 对匹配到的文本着色显示
-v 显示没被pattern匹配到的行
-i 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A # 多显示后#行(After)
-B # 多显示前#行(Before)
-C # 多显示前后各#行(context)
-e 实现多个选项间的逻辑or关系
-w 匹配整个单词(数字字母下划线都算是单词的一部分)
-f 引用文件内容匹配
-E 使用ERE,使用扩展模式
-F 相当于fgrep,不支持正则表达式

正则表达式
REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能
程序支持:
grep,sed,awk,vim,less,nginx,varnish等
分两类:
基本正则表达式:BRE
扩展正则表达式:ERE(grep -E,egrep)
正则表达式引擎:
采用不同算法,检查处理正则表达式的软件模块
PCRE(Perl Compatible Regular Expressions)
元字符分类:
字符匹配、匹配次数、位置锚定、分组
查看帮助:
man 7 regex

基本正则表达式元字符
正则表达式元字符匹配的是字符串(通配符匹配的是文件名)
/ 转义符
字符匹配:
. 匹配任意单个字符(.转义为 .;[.]也表示.)
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字
[:alpha:] 任意大小写字符,[A-Z,a-z]
[:lower:] 小写字母
[:upper:] 大写字母
[:blank:] 空白字符,空格和制表符
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字
[:xdigit:] 十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
匹配次数:
用在要指定次数的字符后面,用于指定前面的字符要出现的次数
* 匹配前面的字符任意次,包括0次(贪婪模式:尽可能长的匹配)
.* 任意长度的任意字符
\? 匹配其前面的字符0或1次
+ 匹配其前面的字符至少1次
{n} 匹配前面的字符n次
{m,n} 匹配前面的字符至少m次,至多n次
{,n} 匹配前面的字符至多n次
{n,} 匹配前面的字符至少n次
位置锚定:
定位出现的位置
^ 行首锚定,用户模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行:
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b 词首锚定,用于单词模式的左侧
\> 或 \b 词尾锚定,用于单词模式的右侧
\<PATTERN\> 匹配整个单词
分组:
() 将一个或多个字符捆绑在一起,当作一个整体进行处理,如:(root)+
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...
\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
示例:(string1+(string2))
\1 :string1+(string2)

\2 :string2
后向引用:引用前面的分组括号中的模式所匹配的字符结果,而非模式本身
或者:|
示例:a|b: a或b C|cat: C或cat (C|c)at:Cat或cat

egrep及扩展的正则表达式
egrep = grep -E
扩展正则表达式的元字符
字符匹配:
. 任意单个字符
[] 指定范围的字符
[^] 不在指定范围的字符
次数匹配:
* 匹配前面字符任意次
? 0或1次
+ 1次或多次
{n} 匹配n次
{n,m} 至少n,至多m次
位置锚定:
^ 行首
$ 行尾
\<, \b 语首
\>, \b 语尾
分组:
()
后向引用:
\1, \2, ...
或者:
a|b: a或b
C|cat: C或cat
(C|c)at:Cat或cat

vim简介
vi:Visual Interface(虚拟接口),文本编辑器
文本:ASCII,Unicode
文本编辑种类:
行编辑器:sed
全屏编辑器:nano,vi(vim -Vi Improved)
nano,vi 单个编辑
sed 批量编辑
其他编辑器:
gedit 一个简单的图形编辑器
gvim 一个Vim编辑器的图形版本
打开文件
vim [option]... file...
+# 打开文件后,让光标处于第#行的行首,+默认行尾
+/PATTERN 打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首
-b 二进制方式打开文件
-d 比较多个文件
-m 只读打开文件
ex file|vim -e 直接进入ex模式
如果文件存在,文件被打开并显示内容
如果文件不存在,当编辑后第一次存盘是创建文件
Vim模式
vim是一个模式编辑器
击键行为是依赖于vim的模式
三种模式:
命令(Normal)模式:默认模式,移动光标,剪切/粘贴文本
插入(Insert)或编辑模式:修改文本
扩展命令(extended command)模式:保存,退出等
Esc键 退出当前模式(总是返回到命令模式)

模式和转换
命令模式:
字符间光标跳转:
h左,l右,j下,k上
#command:跳转#个数的字符
单词间跳转:
w下一个单词首,e当前或下个单词尾,b当前或前个单词首
#command:跳转#个数的单词
当前页跳转:
H页首,M页中间行,L页底
行首、尾跳转
^跳转至行首的第一个非空字符
0跳转至行首
$跳转至行尾
行间移动:
#G、扩展模式:跳转至#行
G最后一行
1G,gg第一行
句间移动:
)下一句
(上一句
段落间移动:
}下一段
{上一段
翻屏操作:
Ctrl+f 向文件尾部翻一屏
Ctrl+b 向文件首部翻一屏
Ctrl+d 向文件尾部翻半屏
Ctrl+u 向文件首部翻半屏
操作:
字符编辑:
x删除光标处字符
#x删除光标处起始#个字符
xp交换光标所在处字符与其后面字符位置
~转换大小写
J删除当前行后的换行符
替换:
r(replace)替换光标所在处的字符
R切换成替换(REPLACE)模式
删除:
d删除命令,可结合光标跳转字符,实现范围删除
d$删除到行尾
d^删除到非空行首
d0删除到行首
dw删除到下个单词首
de删除到当前或下个单词尾
db删除到当前或上个单词首
#command指定#个
dd删除光标所在行
#dd多行删除
D从当前光标位置一直删除到行尾,留空行,等同于d$
复制:
y复制,行为相似于d命令
($,0,^,e,w,b,#command)
yy复制行
#yy复制多行
Y复制整行
粘贴
p(paste)缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处后面
P整行,粘贴当前光标所在行上方;否则,粘贴至当前光标所在处前面
撤销更改:
u撤销最近更改
#u撤销#次更改
U撤销光标落在这行后所有此行的更改
ctrl+r重做最后的“撤销”更改
.重复前一个操作
n.重复前一个操作n次
关闭文件:
ZZ 保存退出
ZQ 不保存退出

命令模式-->插入模式
改变模式:
c(change)修改后切换成插入模式
($,^,0,b,e,w,#command)
cc删除当前行并输入新内容
#cc删除#行并输入新内容
C删除当前光标到行尾,并切换成插入模式
i insert,在光标所在处输入
I 在当前光标所在行的行首输入
a append,在光标所在处后面输入
A 在当前光标所在行的行尾输入
o 在当前光标所在行的下方打开一个新行
O 在当前光标所在行的上方打开一个新行
插入模式-->命令模式
ESC

命令模式-->扩展命令模式
按“:”进入Ex模式
创建一个命令提示符,处于底部的屏幕左侧
w 写(存)磁盘文件
wq 写入并退出
x 写入并退出
q 退出
q! 不存盘退出
r filename 读文件内容到当前文件中
w filename 将当前文件内容写入另一个文件
!command 执行命令
r!command 读入命令的输出
地址定界:
#具体第#行
#,#从左侧#表示起始行,到右侧#表示结尾行
#,+#从左侧#表示起始行,加上右侧#的行数
.当前行
$最后一行
%全文,相当于1,$
/pat1/,/pat2/从匹配到pat1的行开始,到第一次匹配到pat2行结束
#,/pat/从#行开始到pat
/pat/,$从pat到最后一行
后跟一个编辑命令
d删除所选范围
y复制所选范围
w file将范围内的行另存为file
r file在范围内插入指定文件中的所有内容
查找
/PATTERN从当前光标所在处向文件尾部查找
?PATTERN从当前光标所在处向文件首部查找
n与命令同方向
N与命令反方向
查找并替换
s在扩展模式下完成查找替换操作
格式
s/查找内容/替换内容/修饰符
查找内容:可使用模式
替换内容:不能使用模式,但可以使用\1,\2...后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容
修饰符:
i忽略大小写
g全局替换;每行只替换第一次出现
gc全局替换,每次替换前询问
查找替换中的分隔符“/”可替换成其他字符
扩展命令模式-->命令模式
ESC,enter

vim的寄存器
26个命名寄存器(a,b,...z),1个无命名寄存器,长存放在不同的剪贴板内容,可以不同会话间共享
格式:
#+"寄存器+命令
如:3"tyy表示复制3行到t寄存器;"tp表示将t寄存器内容粘贴
未指定,将使用无命名寄存器
有10个数字寄存器,用0,1,...9表示,0存放最近复制内容,1存放最近删除内容。当新文本变更和删除时,1转存到2,2转存到3,以此类推。数字寄存器不能在不同会话间共享

编辑二进制文件
vim -b binaryfile 以二进制方式打开(二进制文件)
扩展模式下:
%!xxd 转换成十六进制
%!xxd -r 转换回二进制

可视化模式
允许选择的文本块
v面向字符
V面向行
ctrl-v面向块
可视化键可以用于与移动键结合使用:
w,),},箭头等
突出显示的文件可被删除,复制,变更,过滤,搜索,替换等

多文件模式
vim file1 file2 file3...
next下一个
prev前一个
first第一个
last最后一个
wall保存所有
qall退出所有
wqall保存退出所有

多窗口模式
多文件:
vim -o file1 file2 水平分屏file1和file2
vim -O file1 file2 垂直分屏file1和file2
窗口间切换:ctrl+w,Arrow
单文件:
ctrl+w,s(split)水平分屏
ctrl+w,v(vertical)垂直分屏
ctrl+w,q取消相邻窗口
ctrl+w,o取消全部窗口
wqall保存退出全部

定制vim的工作特性
配置文件:永久有效
全局:/etc/vimrc
个人:~/.vimrc
扩展模式:当前vim进程有效
(1)行号
显示:set number, 简写为set nu
取消显示:set nonumber, 简写为set nonu
(2)忽略字符的大小写
启用:set ic
不忽略:set noic
(3)自动缩进
启用:set ai
禁用:set noai
(4)智能缩进
启用:set smartindent 简写 set si
禁用:set nosi
(5)高亮搜索
启用:set hlsearch
禁用:set nohlsearch
(6)语法高亮
启用:syntax on
禁用:syntax off
(7)显示Tab和换行符 (^I 和$显示)
启用:set list
禁用:set nolist
(8)文件格式
启用windows格式:set fileformat=dos
启用unix格式:set fileformat=unix
简写:set ff=dos|unix
(9)设置文本宽度
启用: set textwidth=65 (vim only)
禁用: set wrapmargin=15
(10)设置光标所在行的标识线
启用:set cursorline,简写cul
禁用:set no cursorline
(11)复制保留格式
启用: set paste
禁用: set nopaste

原文地址:http://blog.51cto.com/13672914/2095669

时间: 2024-10-07 18:44:06

linux学习笔记2.0的相关文章

嵌入式Linux学习笔记(0)基础命令。——Arvin

学习记录: 到今天为止ARM裸机开发学习进程:1.2.1-1.2.14 预科班知识Linux介绍学习进程:0.2.1-0.2.6 学习内容笔记: 学习了Linux的开发方式的优劣介绍 学习了常用文件夹命令 ls(list) ls -a 显示所有文件(包括隐藏文件) ls -l 显示所有详细信息 ls -a -l也可以 man(查询命令) man 1 ls(1表示查询命令,ls表示查询的内容) cd(change directory) cd ..代表上一层 cd ../../代表上上层 cd .是

【Linux学习笔记第0天:学前计划与其他】

             前言     因为学习ARM的原因,最近开始接触到Linux操作系统,原本并没 有写博客或是学习笔记的习惯,但听了马哥的建议之后,觉得如果 将学习中的知识点和感悟记录下来,一方面,是一份可以长久保存的 笔记,任何时候都可以重新翻阅:另一方面可以培养自己的文档撰写 能力,有利于自己今后的工作.同时,如果记录的东西,对某些迷茫的 同学可以有帮助的话,那也算做了件好事. 之所以要开始学习Linux,主要是因为学习ARM的过程中,需要在ARM上 跑系统,而就市面上的学习资料而言

linux学习笔记3.0

命令service network restart 重启网络systemctl network restartsystemctl restart sshname="value" 变量赋值$(1.../@/*/#/0/?/$) 位置变量test EXPRESSION 测试命令export 设置全局变量readonly name 设置只读变量env.printenv.export.declare -x 查看全局变量shift 左移参数let 算数运算read 接收输入locate 查询系统

《鸟哥的Linux私房菜》学习笔记(0)

听说Linux已经有很长一段时间了,但是从未系统的学习过Linux.这次把在博客园的处女秀给了Linux,希望能够给自己学习Linux一种坚持的动力,坚持就是胜利,fighting! 在我看来,成为技术大牛之前,写博客主要是对自己所学的东西作以总结,涉及的东西也稍显浅薄,但是却能够为更深一步的学习打下基础,于是我选择了写博客!以前从未写过博客,博客给人第一印象——高大上,现在要写了,顿感压力山大,还好本人的初衷是为了知识的整理,暂时这样安慰一下我自己吧.初期的博客,我想肯定会是非常糟糕的,但是我

Linux学习笔记四:Linux的文件搜索命令

1.文件搜索命令  which 语法:which [命令名称] 范例:$which ls  列出ls命令所在目录 [[email protected] ~]$ which ls alias ls='ls --color=auto' /bin/ls 另外一个命令:whereis [名称名称],也可以列出命令所在目录. [[email protected] ~]$ whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/ma

Linux学习笔记——例说makefile 增加系统共享库

0.前言 从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己动手写一个makefile总觉得非常吃力.所以特意借助博客总结makefile的相关知识,通过例子说明makefile的具体用法. 例说makefile大致分为4个部分 1.只有单个C文件 2.含有多个C文件 3.需要包括头文件路径 4.增加宏定义 5.增加系统共享库 6.增加自定义共享库 7.一个实际的例子 [代码仓库]--makefile-example

Linux学习笔记——如何使用echo指令向文件写入内容

0.前言 本文总结如何使用echo命令向文件中写入内容,例如使用echo指令覆盖文件内容,使用echo指令向文件追加内容,使用echo指令往文件中追加制表符. echo向文件中输出内容的基本方法是使用IO重定向指令--">",默认情况下echo输出到标准输出中,使用>指令可重定向输出到文件中. 1.echo指令基本用法 [1]Linux官方用户手册--echo指令 [2]输入指令获得帮助 sudo echo --help 返回内容如下 用法:echo [短选项]... [字

linux学习笔记--vim程序编辑器

1,在linux系统中使用文本编辑器来编辑自己的linux参数配置文件是一件很重要的事情,因此系统管理员至少应该要熟悉一种文本编辑器. 2,不同的linux distribution各有不同的附加软件,linux命令行界面下的文本编辑器有Emacs,pico,nano,joe与vim 3,学习vim的重要性 (1)所有的UNIX Like系统都内置vi文本编辑器,其他的文本编辑器不一定存在 (2)很多软件的编辑接口都会主动调用vi (3)vim具有程序编辑的能力,可以主动以字体颜色辨别语法的正确

Linux学习笔记三:Linux的权限处理命令

1.改变文件或目录权限  chmod 语法:chmod [{ugo} {+-=} {rwx}] [文件或目录] 或 [mode] [文件或目录] 第一种语法中: 这里的u是所有者,g是指所属组,o是指其他人 +是指增加权限,-是指减少权限,=是指赋予权限 r是指读权限,w是指写权限.x只是执行权限 第二种语法中: 在这里,r的值是4,w的值是2,x的值是1. 这里写的mode,是指一组数字.如:421.这里的421,是指所有者所拥有权限的数字总和是4,所属组所拥有权限的总和是2,其他人所拥有权限