总结现学的所有命令(RH033),以及相关概念。(一)


 注:所有的命令都用"【COMMAND】"的形式捕捉,查找相关命令的时候请用【?】的形式查找。方便准确。
=============================================================
【Linux】的【哲学思想】:
1.一切皆文件
2.Linux主要由短小,且目的单一的程序组成(所以一个命令一般只干一件事)
3.将多个短小的程序串联起来可以完成复杂的任务
4.尽量避免捕获用户接口(尽量避免跟用户进行接触,从发起-->回车,全自动,不需要用户再操作)
5.通过文件保存软件的配置信息(只需要一个简单的文本编辑器就可以操作整个系统)
=============================================================
【locale】命令:查看所支持的语言编码
locale -a 可以查看Linuxs所支持的所有语言的编码方式
-------------------------------------------------------
用【who】命令可以查看都有谁在。
用【tty】命令,可以看当前登录的是什么终端。
用“startx”+“& 这个命令会在F7对应的位置上启动一个图形化的工作按钮
用 startx -- :1 :1表示第一个图形化屏幕
startx -- :2 这样的命令可以启动多个其他的图形界面
-------------------------------------------------------
按着shift+pg up 或者pg down可以实现上下翻屏,查看其他的内容
按Ctrl+Shift+C进行复制,
粘贴时是Ctrl+Shift+V
-------------------------------------------------------
在etc下的【inittab】文件,右键,使用文本编辑器
更改为id:3就会在启动时变成字符界面
-------------------------------------------------------
【全局有效】的配置文件:
/etc/profile ,
/etc/profile.d/* ,
/etc/bashrc

【局部有效】的配置文件们:
~/.bash_profile
~/.bashre,
~/.bash_.logout

这些文件分两类,
1是profile类
通常是用来设置环境变量的。
用来运行一些命令的(用户登录时要执行的命令)
2是bashrc类
一般来讲是用来设置别名的
用于设置本地变量

shell对用户来讲,分为两大类。
1 交互式登录式shell ,以一个用户的身份登陆进去,你可以在这里面输入命令的这种登录
【读取次序】:(越靠后优先级越高)
/etc/profile --> /etc/profile.d/* --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
2.非登录式shell :当一个脚本系统能开机自动运行的shell
【运行次序】:
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*
-------------------------------------------------------
【如何使修改后的登录设置立即有效】?
使用【source】 命令,重读一下配置文件
source /etc/profile
使用“【.】” 命令,重读一下配置文件
其实 . = source
比如 . /etc/profile
不建议使用source ,会影响到其他变量的使用。
-------------------------------------------------------
如何实现【用户管理】
1.什么是用户 【User】 :
是一个使用者获取系统资源的凭证,是权限的结合,为了识别界定每一个用户所能访问的资源及其服务的。只是一种凭证。会有一个表示数字,计算机会首先跟这个数字相匹配。ID号。一般来讲用户名是公开的。
还要有个一个验证机制,来验证用户就是那个它所声称的那个人。(密码其实是最不可靠的方法)
2.什么是组 【Group】 :
一个组,可以识别是一个权限的集合,而且任何加入这个组的人都自动拥有这个组的权限。计算机靠GID(组ID)来识别.
一个用户组也是有密码的。一般的用户不能随便加入某个组中,需要用管理员协助。密码的作用是让一个没有管理权限的用户临时的加入某组

组分成两种组:(linux下任何一个用户必然会属于某一个组,即便没有分组,系统也会给你分一个跟你同名的组)
1.私有组:这个里面只有一个用户,而且这个用户名跟组名同名。也叫用户的基本组
2.公共组 : 也叫共有组。也叫用户的额外组,或者附加组。
一个用户可以同时拥有多个组。

UID,GID:其实是保存为无符号十进制数,用十六位二进制表示,0~65535
UID, GID和UID的编号相同
管理员的ID号,永远为 0 (root)
id 命令+ 用户 ,可以查看用户的id以及组。

1-499 :属于系统用户,让某个程序运行的时候能以某个用户的身份运行。
500-65534:普通用户
65535:Nobody特殊用户(也有可能是65536则,溢出,则为-1,相当于Guest,来宾账号)


3.什么是【权限】 【Permission】
安全上下文:Secure Context
一个进程发起的时候,这个进程所具有的权限,而一个进程所具有的权限跟用户所具有的权限是相关联的。

-rw--r-w--
r w x - t : - 为没有权限, r是读,w是写,x是执行。 t\
每三个是一组
第一组,属主 rwx
第二组,属组 rwx
第三组,其他人的权限 rwx

文件中包含,
读 r : cat ,more,查看
写 w : 编辑文件
执行 x :能让文件运行起来的权限,默认普通文件都不具有执行权限
目录中
读 : ls,查看
写 :能够删除文件,新建文件.
执行 : 能够 cd进去 ls -l 来查看的权限

--- : 000 0
--x : 001 1
-w- : 010 2
-wx : 011 3
r-- : 100 4
r-x : 101 5
rw- : 110 6
rwx : 111 7
-------------------------------------------------------
Linux的文件类型:

1.普通文件
开头用 “-”表示的
2.目录文件
开头用“d”表示的
3.符号链接文件(软连接文件)
开头用“l”表示
4.设备文件
块设备,用 d 表示。按照随机存取。通常一次存取一个块。(硬盘)
字符设备,用 c 表示,通常按照线性(有顺序)的方式进行存储,一次存取的一个单位是字节。比如键盘,鼠标显示器等。字符存储是串行的。
5.套接字文件
开头用 "s" 表示
6.命令管道文件
开头用“p” 表示
-------------------------------------------------------
【passwd信息】
-rw-r—r-- 1 root root 0 07-18 22:39 1.txt
第一段:文件属性+后面9个字符,表示权限信息,每3位为一组。
第二段:数字,表示为当前文件被 硬链接 的次数,一般目录是2次,普通文件是1次
第三段:属主
第四段:属组
第五段:文件大小
dev文件下没有文件大小,是主设备号,和次设备号
第六段:是时间,文件最后一次被修改的时间。
第七段:文件的名称
-------------------------------------------------------
Linux常见的1级目录,作用以及功能。
/bin: binary 二进制目录,放的都是命令文件,二进制文件
/sbin : 管理命令 super bin 只有root权限才拥有的命令。
/boot : 引导目录,里面放的是系统引导文件,一般放 内核,grub,驱动映射关系表,initrd(ramdesk)。这里面任何一个文件的损坏都可能导致不能启动
/dev : device,设备文件目录,也叫特殊文件目录(因为这些文件都没有大小, 都为空,但却是访问设备的必备文件)
/etc : 配置文件目录,Linux把所有的配置信息都用文本文件保存,这个目录就是用来保存这些文件的。
/home :普通用户的家目录。任何用户都在,用户登录进来之后默认就储存的目录
/home/USERNAME
/lib : library 库文件目录,库文件是没有程序入口的,只能被其他程序调用的二进制文件。
/media, /mnt : 这是额外文件系统的挂载目录 (目录和当前目录关联的过程,就叫挂载的过程)
/misc :杂项,被动目录
/opt : 可选的,可选目录,一般作为第三方软件安装位置的目录。
/proc : 伪目录,假的,这是内核映像的映射,我们可以通过这个目录,跟内核中正在运行的参数打交道。调优的时候要跟这个目录打交道。
/selinux : 安全加强linux的目录
/srv : 跟特定的服务器软件相关,服务器软件运行时所产生的数据文件,运行时临时产生的文件。
/sys : system 内核中硬件信息的映射,其实也是伪目录,比如磁盘的参数信息,键盘参数信息。调优的时候要跟这个目录打交道。
/tmp : 临时文件目录,这个目录的文件通常每隔30天
/usr : 第三方软件,用户安装的软件,所生成的文件,都在这个目录下, 帮助文档信息等等。
/var : 经常发生变化的文件所在的目录,如:用户的邮件队列,临时的缓冲地址,日志文件,打印队列,锁文件等等。
-------------------------------------------------------
【用户信息】 "gentoo:x:503:503::/home/gentoo:/bin/bash"
用冒号分出了7段
第一段:用户名
第二段:x (密码),告诉你加密放在了另一段
第三段:UID号
第四段:GID(是用户所属的基本组的ID号,私有组)
第五段:用户的全名(注释信息,COMMENT信息)可以为空
第六段:用户的家目录
第七段:用户默认使用的Shell,默认使用Bash。在/bin下

/etc/shells目录下可以显示出所有可以允许用户使用的的shell

【用户密码】,Linux 下默认必须有密码,保存在、/etc/shadow
当加入用户之后会有一行:
student:$1$8kkXoZno$naC13rWnhoKfcMyiZr5qy9/:15172:0:99999:7: : :
第一段:登录名
第二段:加密后的密码(经过MD5散列加密的密码)
加密的方式:对称加密
公钥加密
单项加密 (主要目的在于提取数据的特征值,拿到一段数据可以提取这个数据的特征码。)
特点有:1.单项
2.雪崩效应(不管密码有多长,只要初始条件有一点点改动,结果将有巨大的变化)
3.定长输出(无论你输入有多长,而加密有的结果都是一样的。)
经常用的单项加密是
MD5(128bit定长输出) , sha1(160bit定长输出)
用户密码为“!!”指没有密码
“ $1$8kkXoZno$naC13rWnhoKfcMyiZr5qy9/ ”
$1(代表是MD5算法)$杂质(盐)$内容
第三段:最近一次修改密码的时间(天数,从1970年1月1日起,到上一次修改时间的天数。)
第四段:密码最短使用期限(天数,相对于上一次密码修改后的天数)
第五段:密码最长使用期限,密码过期时间(天数)
第六段:提前多少天提示用户密码快要过期了(天数)
第七段:密码过期几天之后账号将被禁用(天数),如果已经即将过期,系统会强制让用户修改密码,否则不能登录
第八段:用户账号使用期限(天数,绝对时间,能让你使用到从1970年1月1日之后多少天。默认是99999)
第八段:保留。
-------------------------------------------------------
如何使用【BASH】:
已经遇到的功能:history
!$ ,Alt+. , Esc+.

融合了 ksh,csh的优势遵循GPL的shell
1. 命令行编辑功能:
Ctrl+a : 直接跳到命令行的行首
Ctrl+e:直接跳到命令行的行尾
Ctrl+u:可以删除从光标开始一直到行首的内容
Ctrl+k:可以删除光标开始处到行尾的内容
Ctrl+箭头:可以左右一次跳一个单词
2. 文件名通配:
让你可以一次性的快速引用多个文件,通配符
* : 任意长度的任意字符
比如 ls *.log 就是显示所有.log的文件
? :任意单个字符,只能匹配一位字符
[ ] : 匹配指定范围内的任意单个字符。
比如 [a-z] 则匹配任意一个小写字符
[abc]匹配任意其中的单个。
在括号里加
“^”表示取反
其他用法:[0-9] [a-zA-Z0-9]
[:keyword:] : 表示特定字符
比如 [:lower:] 全是小写字符
[:alpha:] 所有字母
[:digit:]所有的数字 0-9
[:alpnum:]
[:space:]
[:punct:]
[:upper:]

用man grep 可以查看详细用法
用法:[[:keyword:]]

- + : 单目操作符,用来表示正负, 也有别的用法。也可以用来表示加减法运算
* / % :
! ~ : 按位取反,取负的
<< >> : 表示二进制移位的。
比如:二进制字符串 10100 让往右移一位
10100 >>
<=
>=
<
>: 表示比较测试符
((1)) <= ((10))
== ; != : 表示等于或者不等于
& : 按位进行与运算(转换成二进制,然后一个个进行与运算)
^ : 按位取异或运算
| :位或
&& :逻辑或
|| :逻辑与
** :次方运算
比如 A=$[2**3] 表示取 2的 3此方
id++ :先引用它的值再自加
++id : 先自加,后引用它的值。
表达式 ? 表达式1 : 表达式2 简单判断表达式。判断表达式,可以则走表达式1,不可以则表达式2
表达式1,表达式2: 连接两个表达式

3. 命令行补全和路径补全
命令补全:(当你进行命令行补全的时候,他会到某些个特定路径下找一个最佳的跟你的user相匹配的命令并显示出来)
但是到哪些目录下去找命令呢?
echo $PATH
可以看到都有哪些路径
TAB键:敲击可以补齐
敲击两次TAB :当有多个时,可以查看都有哪些以这个开头的,相当于CCNA里的 con ?
路径补全 :(它不会去PATH下去找,而去目录下找。他会到父目录下去找跟你有关的快速补全)
比如 cd /etc/a ?
4.括号展开:
~ :展开为对应用户的家目录。比如 cd ~redhat
{ } : 他能在命令行展开的时候展开为多个路径。
创建 x/y x/z x/z/1 x/z/2
则用:mkdir -pv x/{y,z/{1,2}}

创建 x/1 x/2 y/1 y/2
则用 mkdir -pv {x,y}_{1,2} “_”多项式展开 (小学数学?)
5.命令展开(命令扩展)
$( ) :把一个命令的执行结果当做参数传递给另一个命令
` ` :(ESC下的那个键) 跟上面意思是一样的,都表示命令引用
比如:创建一个月日年小时分钟秒的文件名
mkdir -pv $(date "+%Y-%m-%d-%H-%M-%S")
比如:ls -l `which passwd`
则引用了which passwd命令显示之后的内容。然后将其内容进行 ls
-------------------------------------------------------
【回顾系统变量】:
变量有4种类型:
1.【本地变量】。对子shell是无效的
2.【环境变量】。不但对当前shell有效,还对子shell有效的。
声明的时候一定要用 export 来声明,表示导出一个变量
export A=3 (直接导出)
或者
A=3
export A
Bash为用户准备了许多变量,以支持用户来调用
系统中到底有哪些环境变量呢?

【export】 不带任何选项的此命令,就能看出现在正在被使用的环境变量。
DISPLAY="" 用于定义你当前桌面在哪个位置显示,哪个屏幕显示
HISTSIZE=""命令历史当中可以保存过去多少条命令的 (需要记住的)
HOME= 用于表示当前用户的家目录的
HOSTNAME= 用于表示主机名
LANG= 主机语言
LOGNAME= 登录到当前用户的用户是
PATH= 外部命令查找的可执行文件的访问路径
PWD= 显示当前目录
OLDPWD= 其实就是 cd - 在上一个目录之间前换
SHELL= 当前shell
USER= 当前用户
PS1= 显示头部文件
当前环境变量的某些值来替换 \u 用户名 \h主机名 \W 基名 \$ 管理员用# 其他用户用$
\! 命令在历史行里是第多少条命令
\t 显示时间
恢复成原本
export PS1='[\u@\h \W]\$' (这是原有方式
特殊标识方法
'[\033[31m\u\033[0m@\h \W]\]$' 加颜色
\033其实是一种ASII码,控制颜色的

【printenv】 显示部分环境变量
【env】 表示你可以在一个指定的环境下运行某个命令
3.特殊变量。
也是Bash内置的变量,
最著名的变量:$?
用于表示上一个命令的执行结果,用于看上一个命令是否执行成功了。
在linux编程中,0 永远表示 上一个命令成功了,如果失败了,会用1-255表示。
一般来讲,只要是大于0,都是没有执行成功的。但每个错误会有不同的错误返回值。
4.位置变量。用这个变量本身的位置调用的
比如$1 $2 $3... . 可以直接向脚本调用参数并应用的
脚本中
echo "the first param: $1"
echo "the 2 param $2"
echo "the 3 param $3"
在命令行下 1sh.sh a b c 则直接将a b c 变为 $1 $2 $3
--------------------------
扩展:算术运算
A=2
A=3
echo "$[$A+$B]" 则显示结果
echo "$(($A+$B))" 用$加双括号,也可以显示
--------------------------
练习:想命令行传递两个任意整数并算出两个整数的和:
#!/bin/bash
echo "The sum is : $[$1+$2]"
保存,命令行
./sum.sh 4 5 : 则内部将4直接赋值给$1 ,5赋值给$2 并显示运算结果
==========================================
【passwd】 回车就可以改密码了,不需要输入老密码,可以直接改新密码
作为普通用户来讲,需要输入老密码,然后才能改新密码。

passwd student 可以改另一个用户的密码。
-------------------------------------------------------
【su】 命令 : Switch User
格式:
su [option] [arguments]
不加命令是默认进管理员
su student 半切换到student目录下
su -l student 完全进入student用户,或者:
su - student
-------------------------------------------------------
【history】 可以看到你之前所使用过的命令:命令历史。最多保存1000条
想快速执行之前的可以用↑箭头往上翻。也可以用
“!n”就可以快速使用那个数字n所代表的命令。
“!字符串”代表使用命令历史中离你刚输入最近的那条,以这个字符串开头的那个命令
“!!”用以表示使用上一条命令,就是刚用过的那条命令,重复一遍
“!-n”用于执行倒数第n条命令。
history -c :清除历史中的命令。
【HISTCONTROL】参数:
ignorespace:忽略以空格开头的命令
ignoredups:忽略重复的命令
ignoreboth:空格开头和重复的都忽略
使用方法:
export HISTCONTROL=参数
撤销HISTCONTROL的控制:
unset HISTCONTROL
-------------------------------------------------------
【clear】,清屏
!$:表示引用上一条命令的最后一个参数
按住alt+".",也可以直接实现
按一下ESC,再点“.”号也可以实现引用上一条命令的最后一个参数
-------------------------------------------------------
【nano】 命令
nano /etc/inittab 可以直接打开inittab文件
进入之后,进入nano编辑器,下方有提示
O:保存退出
R :读取文件
Y:下一个页面
V:后一个页面
K:剪切
U:粘贴
-------------------------------------------------------
【ls】命令 ----> list
用于显示某一个文件的属性,或者某一个目录旗下子目录的属性。
ls : 显示目录,文件
ls /etc/inittab 直接显示这个文件
ls /: 直接显示根下的文件和子目录
ls /etc 显示文件夹含有的目录
显示要遵循 FHS 文件结构
对于任何一个Linux发行版,要遵循Linux 的文件发行规范。
ls 常用的选项
-l :显示目录/文件内详细信息。比如 ls-l /etc 则显示etc目录的详细信息
-h : 将文件信息中的大小变成人类易读的
-a : 显示所有文件,包括隐藏文件
-A : 不显示“.”和“..”这两个特殊目录
-d : 显示的是目录自身的属性,而不是目录中文件或者子目录的属性
-r : 显示目录,将以逆序的方式进行排序。从Z-A
-R : 递归现实,显示目录下的每一个文件和子目录,如果目录还有子目录,则继续显示子目录下的文件和子目录,直到显示完全。
-i : 选项可以提供inode
-------------------------------------------------------
【cd】:切换目录,Change Directory
cd : 不带任何参数表示切换回当前用户的家目录
cd /path/to/dir :切换到指定目录
cd - :表示在上一个目录和这个目录来回切换,类似于电视遥控器上的返回之前
cd ~ :切换回当前的家目录。
cd ~student :表示切换到别人的家目录
cd .. : 可以切换到当前目录的父目录
cd ../.. :可以切换到当前目录父目录的父目录

【pwd】 : Printing Working Directory 显示当前目录,/显示工作目录
-------------------------------------------------------
【mkdir】:创建目录
格式: mkdir /path/to/abc
-p : 如果创建的目录的父目录不存在的话,则先创建父目录。 mkdir -p /tmp/x/y/z
-v : 显示创建的过程
【tree】 : 显示结构的目录树。
tree /tmp
-------------------------------------------------------
【rmdir 】, 删除目录:
只能删除空目录。
rmdir /tmp/x/y/z
但是不能删除含有内容的父目录。
-------------------------------------------------------
【mv】:剪贴目录(移动目录):
mv SOURCE DEST mv+源目录+目标目录 。
移动的时候可以是非空的
比如将tmp下的x1 挪到 var 的x1
mv /tmp/x1 var/tmp
如果在移动的时候,源路径和目标路径相同,则是重命名
比如 mv x1 xx 则是将x1目录更名为 xx

mv /tmp/x var/tmp/y
如果y不存在 则是 移动x并重命名为y
如果y存在
看y是否是文件,若是则,报错
若不是,则将x移动至y目录下
-------------------------------------------------------
【 touch】 用于修改时间戳的,但是可以用于创建空文件
touch a.txt 如果文件并不存在,则会创建一个空的文件。
如果存在,则会试图去修改它的时间。所有的时间都会变为当前时间
-a 修改它的访问时间
-m 修改它的修改时间
并且可以改变到特定时间。
touch -m -t 可以修改文件时间戳
-------------------------------------------------------
【mktemp】 命令 : 【创建临时文件】
mktemp /tmp/eth.XXXXXX 创建/tep/eth.XXXXX , 这个自动会将XXXXX随即赋值,防止重复
-p 选项,指定位置。
mktemp -d /tmp eth.XX
-d 选项:创建临时目录
mktemp -d /tmp/test.XX 则创建test.XX的目录。

一般将他创建的文件/目录 引用起来,赋予某个变量
比如:
TMPFILE=`mktemp /tmp/eth.XXXXXX`
-------------------------------------------------------
【rm】命令
rm a.txt 删除a.txt
在管理员权限下,会出现提示信息(redhat自带的)
-i : 删除时提示是否删除。
-r : 后面可以跟目录,则直接删除非空目录下的文件 *********可以删除非空目录***********
-f : 不提示,直接删除
-------------------------------------------------------
【cp】命令
cp SOURCE DEST
cp /etc/inittab /root/a.txt
复制inittab 到 xxx
cp a b c d :copy a b c 到 d,d必须为目录
cp /etc/inittab ./a.txt
复制inittab到当前目录下的a.txt
复制是不复制目录的,如果想复制目录,则加
-r : 复制目录以及目录中的所有文件
-i : 如果目标目录有同名,则提示是否覆盖。
-p : 保留保存,主要用于保留属主属组
-a = -rp
备份小技巧:
cp /etc/sysconfig/network-scripts/{ifcfg-eth0,.bak}
直接备份
-------------------------------------------------------
【mv】SOURCE DEST
-------------------------------------------------------
【stat】 xx 用于显示文件的元数据信息,可以看出有3个时间
Access 时间,表示最近一次被访问的时间
Modify 时间,最近一次被修改的时间(指文件内容改变了)
Change 时间,最近一次被改变的时间(指文件属性改变了)
==========================================
【file】 :命令
file FILE_NAME file后面跟文件名
通过这个命令,可以区别文件的不同类型,也可以判断是否是目录。
-------------------------------------------------------
【hwclock】 命令,用于设定时间
-w : 表示我的系统时间是准确的,能够实现把硬件时间设定为与系统时间一致。
-s : 表示硬件时间是准确的,把系统时间设定为与硬件时间一致

【date】 读取系统时间
【clock】 读取其硬件时间 、(查看硬时间)
-------------------------------------------------------
【date】 命令,用以显示系统的当前时间。(查看软时间)
date 命令,还可以设定时间 格式为:
date mmddHHMMyy.SS
date 月日时分年.秒
比如:
date 1212121212.12
则:时间为,2012年,12月,12日,12时,12分,12秒
date命令还可以指定时间显示格式:
date +FORMAT
比如:
date "+%H" 只显示小时
+%H 显示小时
+%M 显示分钟
+%S 显示秒
date "+%H:%M:%S"显示时分秒
+%y 显示年
+%Y 显示年的全称 2012
+%m 显示月
+%d 显示天
+%D 显示日期
+%F 直接显示年月日
+%T 直接显示时分秒
date "+Today is %Y-%m-%d"
date命令中分号内是可以加任何字符的。%X是宏命令。
date命令在备份的时候尤其有用。

特殊时间戳:
date "+%s" :表示自1970年1月1号0点0分0秒 到今天,一共过了多少秒
-------------------------------------------------------
【cal】 命令 : 用于显示日历 直接显示当前月
cal 2011 : 则显示全年
cal 1 2011 :则显示2011年1月 [cal 月 年]

最特殊年月
cal 9 1752 : 少了3-13号,这是程序员的失误。
-------------------------------------------------------
【which】 命令:用于查看一个命令所对应的二进制文件在什么位置
which cd
which ls

【type】 命令: 直接查看是什么命令:
type cd
tpye ls
-------------------------------------------------------
【man】 COMMAND :详解
man 为命令提供的使用手册都是分章节的,
man N COMMAND : man+章节+命令 直接看该命令在该章节的帮助信息

一般章节:
第一章节:存放大部分普通用户的命令
第二章节:显示系统调用
第三章节:库调用 (关于库信息的说明)
第四章节:特殊文件(块设备,字符设备)
第五章节:文件格式 (配置文件的说明,对命令的配置文件的语法进行的说明)
第六章节:游戏说明
第七章节:杂项
第八章节:管理类命令(跟系统相关的只有权限人才有权利执行的命令。比如useradd(添加用户)命令)

whatis COMMAND 查看COMMAND命令在哪一章节。
手册为了防止庞大,都用压缩的形式进行存放:
存放位置:usr/share/man
*.gz文件:gzip文件,压缩文件

man命令 先到 地方找到命令的手册页,然后将其解压缩。然后才看到了命令的man手册

man命令查看后其实是遵循一些语法规范的:
NAME : 用以表示简单的说明
SYNOPSIS : 命令的简要语法格式
EXAMPLES : 给你命令的使用样例。
OPTIONS:选项
FILES : 跟哪个配置文件相关联。
DESCRIPTION : 描述信息,用于详细描述命令的功能以及详细的选项,以及选项所对应的意义
AUTHOR : 命令作者
REPORTING BUGS : 如果发现BUG了,怎么办
COPYRIGHT : 版权
SEE ALSO : 另外说明

用man命令打开手册页后,如何实现上下翻页?
空格键:可以直接往下翻一屏
B 键:往前翻一屏
回车键:往下一次翻一行
K 键:往文件头一次翻一行

如果不知道man命令怎么用:
man man
man有个选项,可以显示类似于whatis命令的显示结果
man -f COMMAND ,跟使用whatis的效果是一样的。
问题:man的-k选项,和-K选项有什么用呢?
-k指的是keyword,关键词,
man -k COMMAND :可以提供哪些命令里面包含COMMAND (他是从whatis数据库中找的)
-K是从man数据库找到所有的关键词信息,数据量非常庞大。一般不用,查找速度将巨慢无比。

当使用完man后,想退出的话,使用Q键就可以退出
而且man支持关键词搜索:
输入一个斜线“/”然后加关键词,所有关键词会用反黑显示(/是表示从文件首部向文件尾部查找)
也可以使用问号“?”跟上关键词,同理 (?是从尾部向首部查找)
搜索完关键词后,光标会指到第一个关键词上,
用 n 和 N 在 下一个 和 上一个 之间进行切换。
-------------------------------------------------------
【cat】 命令: cat + 文件
concatinate, dump
功能1,连接,cat可以将多个文件连接到一起。显示出来。
功能2,dump.倾倒式的查看,瞬间翻至最后一页。

但在某些场景下是很有用的,比如将某些文件显示出来并将它重定向到某地
比如某文件:cat /etc/sysconfig/network这个文件很小。
cat会直接查看,查看完后直接退出查看器。

-n : cat可以在显示的时候显示行号,行号不是文件本身的内容
-E : 用于显示行结束符,会加入 $ 符,是Linux中的行结束符。Windows的行结束符比Linux多1

tac是反着倒……

cat的特殊用法
cat >>haha<<EOF (eof标示)
> 123
> 456
> 789
> EOF
从EOF开头,到EOF结尾的东西,追加到haha中。


-------------------------------------------------------
【more】命令 :more + 文件
more,可以分屏显示内容,并且给出显示的百分比
more的向前翻腾是有问题的,用B键可以使用向前翻页,所以很多教材只介绍more可以向后翻页,不能向前翻
more 翻到最后之后会自动退出。所以这也是为什么他不能向前翻的最重要原因
-------------------------------------------------------
【less】命令 : less + 文件
less可以向前翻,而且翻完之后不会自动退出,会显示
[END]
实际上,man命令其实调用了less命令的查看方式,所以man支持的,less都支持。
less命令也是将来用的最多的命令之一。
-------------------------------------------------------
【tail】,【head】命令 :
head 命令用于查看文件前 N行 (默认为10行)
tail 命令用于查看文件的后 N行 (默认为10行)
head -n 20
head -20 都代表看前20行
tail -n 22 /var/log/messages
tail -22
tail -f 命令,查看文件而不退出,并且实时显示信息。
不想看了,用ctrl+C,则退出。

*当你写了一个命令不想执行的话,用CTRL+C直接返回。
*/var/log/messages 是系统日志,我们经常用tail命令查看其内容
-------------------------------------------------------
【wc】 命令 : 用于统计一个文件有多少行,多少单词,多少字节
wc /etc/rc.d/rc.sysinit
显示
980 3946 27239 对应,行/单词/字节
-l : 只显示有多少行
-w : 只显示有多少单词
-c :显示多少字节(字节包含空格)
-m : 显示多少字符
-L : 显示文件中最长的行有多长
-------------------------------------------------------
【sort】命令
对文件进行排序。
不会影响文件本身的内容,只是将排完序之后文件的内容输出出来。
-u:可以移除排序完成之后,重复的行 uniq
-n : 按数字排序 numeric
-r:降序排序 revers
-t : 以指定段分隔符
-k:以第几个字段进行排序
sort -t : -k 3 ,以 :为分隔符,对第三段进行排序
-------------------------------------------------------
【uniq】 : 移除重复的行=sort -u
-u:只输出只显示那些没有重复的行。
-d:只显示重复了的行(跟上面刚好相反)
-c:显示行以后,能告诉你这个行最多出现过几次(用于做计数)
-------------------------------------------------------
【chown】 修改属主
格式:chown [options] USERNAME [files]
比如:chown gentoo a.txt 则是将a.txt的属主更改为gentoo
一个命令可以同时修改属主属组
chown USERNAME:GRPNAME files
或者
chown USERNAME.GRPNAME files
或者
chown :GRPNAME files 只修改组,不修改主
当你用其改变一个目录的属主的时候,里面的文件的属主不受影响

如果想一起修改目录里的文件则
-R : 递归修改。
比如 chown -R slackware test :修改test文件夹的属主为slackware并递归

--reference=FILE 将某个文件/目录的属主和属组改为和某人一样
比如: chown --reference=a.txt b.txt 将b.txt的属主和属组修改为和a.txt一样
-------------------------------------------------------
【chgrp】 修改属组
格式同chown
比如:chgrp mygrp a.txt
-------------------------------------------------------
【chmod】 修改权限
格式:chmod [options] mode files... (mode指权限)
修改方式
1.使用数字的方式:chmod 777 a.txt 则是将a.txt的权限更改为 -rwdrwdrwd
2.使用等于号的方式进行赋值:chmod u=rw-,go=r-- a.txt (用逗号隔开可以设置多个) 则是将a.txt的权限中属主部分更改为rw-,属组和其他部分改为r--。
3.用+/-修改某一类权限的特定位置 chmod u+x,go-x a.txt 则是将a.txt的权限中属主的部分增加执行权限(x),将属组和其他的部分去掉执行权限(x)
u = 属主
g = 属组
o = 其他
a = 全体

修改目录的话只会修改其目录的属性,目录内部是不会修改的,如果想
-R : 请加大写R 递归修改

只有管理员才有权利改文件的属主和属组,其他用户可以修改权限。
-------------------------------------------------------
【useradd】 账号名 :建立账号:
useradd gentoo:后,则在 /etc/passwd 下增加了一行

-u UID : 更改ID号(ID号不能使用别人用过的,更改之后新用户从这个号往后计数)
-g GID : 更改用户的基本组
-G GROUP1,GROUP2 : 可以指定用户的附加组,可以有多个组,多个组用逗号隔开
-c “COMMENT”: 可以指定用户的注释信息
-d /path/to/home :指定家目录
-s /bin/kshell : 指定一个非默认shell
比如:
useradd -G mygrp slackware :则创建用户slackware并将用户slackware加入到附加组mygrp中
比如:
useradd -u 1000 oracle :则创建用户oracle并将其UID改为1000
比如:
useradd -g mygrp mysql :则创建mysql并将其加入基本组mygrp中
比如:
useradd -s /bin/tcsh centos: 则创建centos的shell指定为tcsh
比如:
useradd -d /tmp/hello suse :则创建suse并将其家目录设为/tmp/hello

可以组合使用一次指定多个条件。当指定特定组时,这个组必须事先存在
在用户的家目录中查看隐藏文件,则发现里面有文件,这些都是环境变量文件。


-------------------------------------------------------
【groupadd】 详解:
-g GID :指定GID

useradd和groupadd都有一个共同的指令
-r 把一个用户添加为系统用户或者把一个组添加为系统组。
-------------------------------------------------------
【userdel】 + 用户名
-r :连同用户及其家目录一起删除。
【groupdel】 + 组名
-------------------------------------------------------
【usermod】 命令,用于修改用户的账户信息。
-u :修改 UID
-g :修改 用户的组
-G : 修改附加组。(用户原属的附加组将会被删除,所以一般不单独用)
-aG :修改附加组一般用这样。
-s : 修改shell
-c : 修改注释信息
-d :修改家目录。如果你想将家目录的所有东西都移动到新地方的话,要加-M
-l : 修改登录名称。

还支持其他的几个选项
-e : 可以指定用户的过期时间。
-U : 表示解锁用户账号
-L : 表示锁定用户账号

【groupmod】 命令,用于修改组的信息
-g : 修改GID
-n : 修改组名
-------------------------------------------------------
【passwd】 命令: 给用户加密
-l : 用于锁定用户账号
-u : 解锁用户账号
--stdin : (把标准输入改为别的输入)为用户添加密码的时候用非标准输入进行创建密码
-x : 设定密码最长使用期限
-n : 设定密码最短使用期限
-------------------------------------------------------
【finger】 命令,用于显示用户的信息
【id】 命令,用于查看用户的id相关信息
【who】 命令,查看当前系统上登录的所有用户的
-------------------------------------------------------
echo : 显示 一行文本
-n :表示不显示换行符
-e : 能解释转义字符,比如显示颜色 (用于表示做控制符用的的叫转义字符)
echo -e "How are you?\n" 则\n会被编译成换行
-------------------------------------------------------
【alias】命令:我们可以给命令取上别名。
alias cls=clear 则可以将clear加一个别名为cls
alias cdnet='cd /etc/sysconfig/network-scripts' 则将CD这条命令简写成一个词

不想用alias的话
unalias 命令
比如
unalias cdnet.
-------------------------------------------------------
【输入输出重定向功能】,管道:
默认情况下,当你执行完一个命令,这个命令必然会输出一些信息,但是这个信息输出到了什么位置呢?
输入设备和输出设备有很多种,大多时候,进行命令时,可能都没有明确说明应该输出到什么地方去,或者从什么输入
当你不指定的时候,linux会输入输出到默认设备上去。
-------------------
标准输入:0, 一般指键盘 keyboard
/dev/stdin (标准输入设备,显示为浅绿色),
其实是一种链接文件。用ll可以看出它有指向。
大多数情况下,我们用0 来表示:文件描述符
重定向一般用 < 表示
比如
cat < /etc/fstab 则将fstab的内容输入到了cat下,并用cat命令显示
--------------------
标准输出: 1,默认是显示器 monitor
/dev/stdout
重定向一般用 1> 表示
比如
ls > /tmp/ls.out 则将ls的内容,输出到了 /tmp/ls.out
--------------------
错误输出: 2,默认是显示器 monitor
/dev/stderr
重定向一般用 2> 表示
比如:
lss 2> /tmp/ls2.out
但是当你这个信息是正确时候,它不会输出到指定,而是直接显示
---------------------
合并标准输出和错误输出的输出流:
" &> " 使用它可以合并。
---------------------
输出重定向会覆盖文件的原有内容,所以,
" > "号叫覆盖输出重定向
" >> "号叫追加输出重定向,可以追加内容,而不覆盖

很多时候,我们可以使用echo命令,往一个文件的最后一行追加一行文字
echo "-------------------" >> /tmp/ls.out

---------------------

当使用“2>>” 时可以追加错误重定向
但 "&>>"是不支持双大于号来追加所有内容的。
---------------------
有时会出现手误少打一个>导致,直接覆盖了原有内容而导致不得恢复
set -C 命令,打开了禁止使用覆盖重定向 ,想开启的话
set +C 命令。关闭禁止使用覆盖重定向
有时我们就是想覆盖文件的话。
">| "符号后面加一个竖线,则表示我清楚我在做什么,我非要覆盖。
---------------------
如何实现将正确的输出流保存在1.txt ,如果错误,则保存错误到2.txt呢?
ls /var >> /tmp/1.txt 2>> /tmp/2.txt
意思是将 ls /var的输出结果 正确的话追加到1.txt ,错误的话追加到 2.txt 只不过这两个符号要分开使用,中间加空格。
-------------------------------------------------------
【管道】:" | "
COMMAND1 | COMMAND2 | COMMAND3....

管道的作用:把前一个命令的输入输出执行结果,当做第二个命令的输入命令来处理。
比如:ls -l /etc | less
则是将 ls -l /etc 的输出结果,在less中输入,则可以使用less 查看
比如:echo "123456" | passwd redhat
将123456的结果通过管道输送给 用户redhat的passwd中。

可以连接多个命令,不光是两个命令的链接。比如:
ls -l /etc | sort -t | less
反向排序之后送给less查看

【tee】:会把数据流分成两部分,一部分保存,一部分送给后面的命令
则,将数据先保存一份到ls.out,再用less命令查看
既想送给less命令分页查看,又想保存一份到文件里去
ls -l /etc | tee /tmp/ls.out | less

有多个命令的输出,都需要保存在同一文件。为了实现:
command >> a.out
command2 >> a.out
则可以使用一个变量,用脚本实现。但是麻烦,所以
自定义输出重定向:可以用(3-9)的数字
【exec】 :
exec 3> /tmp/myout.out (也可以用追加">>" 或者读入"<" )
则将3定向为了 myout.out 其实是覆盖为了这个文件
之后
ls /var >&3 (必须用 >& 符号)
则会将显示结果覆盖至 自定义的一个输出重定向 3中
在多次重定向的场景里,避免多次的反复重定向的那个文件而导致的频繁打开和关闭。
撤销:
exec 3>&-
这样就关闭了此文件

/dev/null:数据黑洞,设备文件的空文件。会把所有送来的数据吞噬掉。
我们可以实现把那些输出出来没用的数据,送到这里
这样不会占用任何空间。(属于虚拟设备)
-------------------------------------------------------
【for】:循环执行
想在系统上加入10个用户,user1,user2.....user10。
在脚本编程中,使用
格式:
for I in LIST; do
statement1
statement2
done

LIST的表述形式:
简单列表:1 2 3 4
复杂列表: This is Tom\'s cat (此时里面的小分号不被LIST识别,需要转义符)
变量 `seq 1 $LINES`
命令 `ls /var`
通配符 for I in /var/*

第一次,它将I的值取为1,LIST1 之后执行一遍
之后将I的值取为 LIST2....

for I in 1 2 3 4 5 6 7 8 9 10; do
useradd user$I
echo user$I | passwd --stdin user$I
done
则,会自动添加user1-10并将其密码设置为自己的用户名。
--------为了方便--------
1. 【seq】 1 10 : 表示,以1开始以10结束的数字展开为一个序列,但是使用的时候要用命令替换
比如
for I in `seq 1 10`; do
2. {1..10} :也表示取整数序列,从哪开始,从哪结束。

为了一次能从/etc/passwd下取一行,简单的可以使用:
for LINE in `cat /etc/passwd`; do
^

对于for来说,它识别的是列表,它识别列表的时候,是通过空格来进行分割的 IFS=$'\n'
但是空格,TAB,换行符都被LIST识别为拆分

为了避免空格被拆分成一个独立的值去计算,需要在拆分前告诉LIST,
只需要修改$IFS的值为只识别换行值:
IFS=$'\n'
-------------------------------------------------------
【cut】 : 将文本内容一行一行的按照某种格式给他剪裂开来
-d :用于指定分隔符。“d:”以“:”分割
-f : 用于指定取第几段 -f1 则为第一段
比如
tail -1 /etc/passwd | cut -d: -f6,7
则以:为分割,取第6段和第7段

LINES=`wc -l /etc/passwd | cut -d" " f1`
echo $LINES
行数统计,统计完成之后,对每一行进行切割,再向用户进行问好
-------------------------------------------------------
【grep】 命令: 全面搜索正则表达式并显示出来,它是一个家族,家族中分别有
1.grep
2.egrep
3.fgrep
正则表达式(re):其实就是元字符,用一堆的元字符组成,按照一定的规则组成起来,能够实现过滤匹配不同的文本内容。
1.基本正则表达式
2.扩展正则表达式,比基本略多


-----------
格式
grep [options] "PATTERN" file 能够根据你所指的模式(PATTERN),从文件中将他找到并显示出来
比如:
grep 'root' /etc/passwd
搜索/etc/passwd中的含有root的信息

常用选项
-i : 不在乎字符的大小写
-v:跟默认的动作正好相反(取反),只显示那些没有匹配的
-n:能够显示所匹配的行在文中所处得行号(行号显示)
-An:显示结果,并显示结果之后的n行
-Bn:显示结果,并显示结果之前的n行
-Cn:显示结果,并显示结果的前 和 后 n 行
-e : 支持 egrip

--color:会把匹配这个模式的字符串高亮显示

【正则表达式】
常用模式 :正则表达式种类
^ 定义行首,行首匹配锚定符
$ 定义行尾,行尾匹配锚定符
. 匹配任意单个字符,相当于"?"
* 次数匹配,表示匹配符前面的这个字符所出现的0次或者任意次。
? 次数匹配,表示匹配符前面的这个字符所出现的0次或者1次。
[ ] 匹配一组字符中的任意一个字符
[x-y] 匹配指定范围内的一个字符
[^ ] 表示否定
\< 词首定位符,必须是单词,而不能是字符 或者 \b 也可以
\> 词尾定位符 \b 也可以。
\<..\> 精确匹配
\(..\) 匹配稍后将要使用的字符的标签
x\{m\} 表示x精确出现m次
x\{m,\} 表示x至少出现m次
x\{m,n\} 表示x至少出现m次,且不超过n次

grep --color "root$" grep.txt 表示root必须出现在行尾
grep --color "\<root\>" grep.txt 表示要精确匹配root这个单词
grep --color "root\{1,\}" grep.txt 至少匹配1次
grep --color "root\{1\}" grep.txt 表示精确匹配1次
grep --color "root\{0,1\}" grep.txt 表示至多出现 1次
grep --color "\(root\).*\1able" grep.txt
包含了root中间跟了任意字符,后又跟了\1又出现了引用最前面的字符的以及 able字符的字符
-------------------------------------------------------
【egrep】,【grep -E】
与grep基本相同,但是没有了 \()之类的字符
{n} : 精确匹配前面的 n次
+ :匹配一个或多个+号前的字符,相当于 \{1,\}
? : 相当于\{0,1\},匹配此前的字符,1次或0次
a|b : 匹配a或b
( ) : 字符组,把括号里的当做一个单位
-------------------------------------------------------
【$?】 : 表示上一个命令的执行结果 ,表示执行成功了还是失败了。
结果显示:
0 : 成功了
1-255 : 都表示失败了
-------------------------------------------------------
【&&】【与操作】
command && command: 这表示 只有前面的命令成功了,才执行后面的命令
1 && ? = ? 意思是前面的命令即使执行成功了,也需要执行后面的命令,才能判断结果是否成功
即: 短路操作、
只要前面为0,结果肯定为0

【||】 【或操作】
command || command : 如果前面不成功,后面的才执行
短路操作:
1 || ? = 1 :前面已经成功的时候,后面就不执行了,直接判定成功
只要前面为1,后面肯定为1
0 || ? = ?
若前面不成功,则必须执行后面的命令才行

grep "root" /etc/passwd || useradd root
判断是否需要执行这个用户,如果前面否定,则执行后面,意思是,若没有用户,则创建。
-------------------------------------------------------
【sed】 :
stream editor : 非交互式的,行编辑器。
SHELL脚本编辑器的利器之一。
《Sed adn awk》这本书就是专门来讲这两个命令的。
没有破坏性,不修改原文件(只是把文件的内容读取到内存里),除非使用shell的重定向
sed本身还支持sed脚本
将查不到的内容直接显示出来
模式空间:
sed用他的模式去处理文本的时候,在内存中的那段空间。
读取行--->放入内存,进行处理----->输出这一行
在某些高级模式中,还可以实现处理一次很多行
Sed是将源文件处理在了内存里,对文件没有任何影响

Sed的使用格式:
1.sed [options] /PATTERN/COMMAND files...
(指定模式)模式需要用两个斜杠括起来。当你使用正则表达式时,需要使用引号
比如
sed /cache/p /proc/cpuinfo
将cpuinfo里包含cache的那一行,再显示一遍。
2.sed [options] ADDR1,ADDR2/COMMOND files...
sed [options] ADDR1,+N/COMMOND files... 【从第几行开始往后的N行】
sed [options] /regexp/,/regexp/COMMOND files... 【从哪个单词到哪个单词】
(根据行来指定命令,ADDR1,ADDR2意思是从第几行到第几行,支持模式)
比如
sed 1,3p /proc/cpuinfo
将cpuinfo 里 1-3 行的内容输出

比如
sed /cache/,/wp/p /proc/cpuinfo
另外一种地址表达方式:
查找从第一个/cache/表达开始的行开始,到最后一个一个表达/wp/的行结束,以p模式显示

模式:
p:用于打印行
比如
sed /cache/p /proc/cpuinfo
将cpuinfo里包含cache的那一行,再显示一遍。
sed -n /^[^Cc]/p /proc/cpuinfo
以非C开头的行,第一个用于表示以xxx开头,第二个表示取反
d:用于删除模式空间中被匹配到得行
sed /^[Cc]/d /proc/cpuinfo
以非C开头的行
a\后跟内容: 在当前行后添加一行或者多行
sed "/^processor/a\#This is my cpu." /proc/cpuinfo
以processor 开头的行后添加一行后添加一行:This is my cpu.
sed "/^model/a\#This is my cpu" /proc/cpuinfo
i\后跟内容:表示在当前行的前一行追加一行或者多行。
sed "/^model/i\#This is my cpu" /proc/cpuinfo
则在model前加了一行
sed "/^model/i\#This is my cpu. \n#haha" /proc/cpuinfo
在mode后加一行后,用\n的形式换行,然后再添加一行

用\n 的换行符形式,可以在内容后换行,再继续添加

s:表示查找,替换。 (用法格式非常奇怪)
sed "ADDR1,ADDR2s/要找的串/要换成的串/ig" /proc/cpuinfo
搜索的串可以使用正则表达式,而替换的串不能使用正则表达式
(s///)中的///其实是可以替换的,比如替换成s@要找的串@要换成的串@,或者替换成其他的比如AAA

ADDR1和ADDR2表示从哪一行开始,到哪一行结束、
i表示不区分大小写
g表示在行内进行全局替换

sed '1,$s/yes/YES/g' /proc/cpuinfo
在指定范围匹配的时候 $表示一个文件的最后一行
这句的意思是: 将文件中所有的yes替换为YES,全局替换,从第一行搜索到最后一行。

s支持正则表达式
sed '1,$s/\bc/C/g' /proc/cpuinfo (记住\b是匹配单词的首部)
替换文件下所有以c开头的单词,并替换成C

&:保存查找串以便在替换串中引用
能够匹配整个串
sed '1,$s/\b[Cc]pu\b/&s/g' /proc/cpuinfo
将所有以Cpu替换成后面加一个s

sed '1,$s/\b[Cc][[:alpha:]]*\b/&s/g' /proc/cpuinfo
将所有以C开头的单词,后面加s

\(..\):保存已匹配的字符,然后用 \1 可以读取匹配的字符

-e: 允许多项编辑,为一个命令指定多个处理办法
sed '1,$s/\b[Cc][[:alpha:]]*\b/&s/g' /proc/cpuinfo | sed '1,$s/\b[m]([[:alpha:]_]*\)\b/M\1/g'
sed -e '1,$s/\b[Cc][[:alpha:]]*\b/&s/g' -e '1,$s/\b[m]([[:alpha:]_]*\)\b/M\1/g' /proc/cpuinfo
【早上9:40】
-n:取消默认的输出。
-f:可以把-e后面的内容写进一个文件里,并直接把这个文件读出来 【sed脚本】
sed -f 去读 files (去读是一个文件,文件的内容是下面的两行)
'1,$s/\b[Cc][[:alpha:]]*\b/&s/g'
'1,$s/\b[m]([[:alpha:]_]*\)\b/M\1/g'

-i: 去修改源文件。
-------------------------------------------------------
【tr】 :转变转换
tr [options] 'ab' 'AB'
则可以实现各种转换。
-d : 可以用于实现删除字符
比如,想删除一个单词中间的字母a
tr -d 'a'
-------------------------------------------------------
【awk】: (念:奥克)
比sed功能要强大的多的多的文本命令。有内置变量,本来是个开发语言。
可以完成强大的文本处理
最早的版本诞生在Bell实验室。
到Unix的时候开始支持用户自己的变量。 叫nawk
从一九七几年到现在都一直存在的命令
它属于unix的命令。
在九十年代,为GUN项目,开发了完全开源的awk,叫 gawk。
此时,awk达到了顶峰。甚至加入了网络的处理

awk [options] 'pattern {action}'
pattern:
/regexp/
exp
BEGIN
END
action:
print

awk [options] 'program' file

program完全可以写成文件,利用-f命令来直接读取所有文件内容
program样子:pattern {action} 所有的action要以花括号括起来,所有的program要以单引号
用什么模式处理, 处理成什么样子
所有的action要以花括号括起来,
所有的program要以单引号

 


跟sed一样一次读一个行,然后将这一个行进行切片(以空格为基础进行切片)(field),每一片可以有一个内容引用
$1 代表引用第一段
$2 代表引用第二段
。。。。
。。。
$0 代表整个一行。

输入和输出都以行为基准,都将其切片,不光切片一行,如果有多行,还对多行的每一行以一种方式进行切片(以换行符)

print命令:
awk '{print $2}' /etc/fstab
则只显示第2列

awk '/^[a-z]/{print $0}'

pattern:
当你指定pattern,则表示他只对被pattern匹配的行做处理 (正则表达式)
1.Expression
2.pat1,pat2。从第一个pat1行到符合pat2的行
3.BEGIN
通常用于实现改变内建变量的值,或者在输出之前先打印标题的
在action之前先执行的
END
在action之后进行扫尾工作。

awk 'BEGIN{print "Devices mount point"}{print $0}' /proc/meminfo
添加标题
【14:50】
内建变量:
FS:修改子段分隔符,改变内建变量的值,要在BEGIN中实现
tail -10 /etc/passwd | gawk 'BEGIN{FS=":"}{print $1}'
RS:指定输入的时候行与行之间的分割符(默认是换行符)
tail -10 /etc/passwd | gawk 'BEGIN{FS=":";RS=";"}{print $1}'
OFS:显示数据的时候,显示给别人看的时候,是以什么为分隔符显示(默认空格)
tail -10 /etc/passwd | gawk 'BEGIN{FS=":";OFS=":"}{print $1,$3}'
ORS:行于行之间是如何分割的。
tail -10 /etc/passwd | gawk 'BEGIN{FS=":";ORS=" "}{print $1,$3}END{print "\n"}'
此条中END就在所有处理完成之后,又加入了换行。
NF:显示每一行一共有多少个字段
NR:正在被处理的这一行,在整个文件中处于哪一行
tail -10 /etc/passwd | gawk 'BEGIN{FS=":";OFS=":"}{print NR " " $1,$3}'
则在输出的时候显示行号

-F: : 以“:”为分隔符。不用BEGIN了。


如何通过awk的辅助取得ip的地址
ifconfig | awk '/inet addr/{print $2}' | cut -d: -f2
-------------------------------------------------------
【vim】:文本编辑工具
文本:纯ASII码。 跟word编辑的不是一个东西。
linux的重要哲学思想之一是把配置当做文件放在里面。
linux上很著名的文本编辑器,Vi,emacs。
vi ---> vim

vim其实是一款模式化编辑器。将需要在多个模式下切换
在不同的模式下,你所发出的命令,会被解释成不同的意义。
命令模式下输入v键,可以进入可视化模式
vi有3大模式最重要
1.命令模式:主要用于命令编辑,删除/打开/保存/退出
2.输入模式:击键的大部分命令都将输入到文本中。
3.末行模式:对模式进行配置,类似于比命令模式繁琐,但功能不输于命令模式的一种模式。不能和输入模式之间进行转换

vim能识别大部分的程序,比如C语言的程序,并高亮显示。

模式转换:
命令-->末行 只需要键入一个 ”:“ 则直接进入末行模式
命令-->输入 方法非常多:
1.输入 I 命令, i:在当前光标所在的地方插入 I:在当前行的行首插入
2.输入 A 命令 a:在当前光标所在的后方插入 A:在当前行的行尾插入
3.输入 O 命令 o:在当前光标所在的行的下一行打开一个新行
O:在当前光标所在的行的上一行打开一个新行
插入/末行-->命令
按下ESC键就好,有时需要敲两次,敲多次没有任何其他的弊端。

:q: 可以直接退出,只要做了编辑,就不能用:q退出。
:q! :强制退出,不保存
:x , :wq :保存并退出
ZZ :直接保存退出(必须大写),在命令模式下。
 :set nu 显示行号
----------------------------
如何打开vim:
vim +n : 不但打开vi ,还让光标直接处于第n行
vim +/pattern files: 可以直接匹配到第一次匹配到这个模式的行的行首
比如:vim +/redhat ff.rc
---------------------------
光标移动:(这些都可以和数字组合使用,比如5w,5b 5e ,一次跳到多少个相关的词/行)
一次移动一个字符的:
HJKL:
H向左移动,L向右移动,J向下移动,K向上移动
一次移动一个单词:
w: 跳到一下一个单词的词首
e: 跳到下一个单词的词尾(如果不在单词词尾,优先跳到自己的词尾)
b: 跳到上一个单词的词首(如果不在单词词首,优先跳到自己的词首)
在行内跳转的:
^,数字“0”: 用于跳到行首。^:用于跳到这个行的第一字符的符首。 0 用于跳到绝对行首。
$ : 用于跳到行尾(绝对行尾)
在行间跳转:
G,nG:跳转到第几行,比如10G,则跳回10行。单独一个G,跳到最后一行。gg跳到第一行。
--------------------------
删除字符:
x:nx 通常用于删除一个字符 3x 直接删除3个光标后面的字符
d:通常跟范围表达式组合起来,表示怎么删。
dd,直接删一行
ndd :直接删n行
dw: 连同单词后的空格一起删
de: 不删单词后面的空格
:10,100d :删除10-100行
:.,$d : 删除当前光标所在行到最后多少行 (.表示当前光标所在行 $表示最后一行,$-1表示最后一行的前一行)
--------------------------
翻屏功能:
ctrl+f: 往文件尾部翻一屏。
ctrl+b: 往文件首部翻一屏。
ctrl+d<---->ctrl+u : 往后或者往前一次翻半屏。
--------------------------
修改:
c:可以实现从命令模式转换到插入模式 ,但是在进入插入模式之前,先修改
cc,删除一行并进入插入模式
c$,删除到行尾,并进入插入模式
与d大致相同。
--------------------------
复制和粘贴
y:复制。y键的使用方式跟d一样
yy复制一行
3yy,复制3行
ye,yw,yb 等等
只要复制的不是单独的行,在粘贴时就是不单独的行
p:在当前光标所在的下方进行粘贴。 如果复制的是单词,则粘贴在光标的后面
P:在光标所在的上方进行粘贴。 如果复制的事单词,则粘贴在光标的前面
---------------------------
改错,就如[ctrl+Z]
u:撤销上一次的修改(vim会保持50次的操作)
U:一次性全部撤销。
Ctrl+R : 可以将上次的撤销,撤销掉
”.“ : 再做一次,就是redo.将此前的操作重复执行。
-----------------------------


作者“For The Dream”

相关内容

    暂无相关文章