输入命令按下enter键就会开始执行,如果输入的命令很长,可以使用反斜杠\来转义enter符号,使命令连续到下一行。
在linux环境中大小写是不同的
基本命令:
1.显示日期和事件的命令:date
如果想要输出特定格式的日期和事件需要带上参数
例如:date +%Y/%m/%d
date +%H:%M
2.显示日历的命令:cal
cal的基本能语法:cal [[month] year]
可以显示某年的日历:例如,cal 2009
可以显示某年某月的日历:例如,cal 9 2009
3.计算器命令:bc
输入bc命令就进入bc这个软件的工作环境,就可以像在windows中一样进行加减乘除,
+加法,-减法,*乘法,/除法,^指数,%余数。
bc默认是输出整数的,如果要输出全部小数,就必须执行scale=number,其中number就是小数点后的位数。
要离开bc,需要输入quit才能离开bc软件环境。
重要的功能键
1.tab键:用于补全命令或者补全文件
2.ctrl+c:用于中断目前正在运行的命令
3.ctrl+d:表示键盘输入结束,也可以用来代替exit的输入。
在命令行中直接按下两次tab键,可以看到总共有多少个命令可以供当前用户使用。
查看命令的用法:
可以使用man 命令名来查看命令的具体用法。
其中man是manual的缩写。
linux关机:
数据同步写入磁盘中:在关机前可以使用命令sync将内存中尚未被更新的数据就会被写入硬盘中。
关机命令:shutdown、reboot、halt、poweroff
系统执行等级:
run level 0:关机
run level 3:纯命令行模式
run level 5:含有图形界面模式
run level 6:重启
可以使用init命令来切换各种模式,例如想要关机的话,也可以使用init 0。
Linux下文件权限的概念
Linux文件属性
ls -al 列出所有的文件,-al表示列出所有的文件详细的权限和属性。
例如
[1] [2] [3] [4] [5] [6] [7]
[权限] [连接] [所有者][用户组][文件容量] [修改日期] [文件名]
drwxr-x--- 4 root root 4096 Sep 8 14:06 .gconfd
-rwxr-xr-x 1 root root 1024 Jan 3 11:01 install.log
1.第一列文件的类型与权限
第一列由10个字符组成:
第一个字符代表这个文件是目录、文件或者链接文件等
其中d表示目录,
-表示是文件
l表示是连接文件
接下来的字符中,以三个字符为一组,均是rwx的组合,其中r表示可读,w表示可写,x表示可执行。如果没有相应的权限就用-表示。
这三组分别表示的权限是:
第一组为”文件所有者的权限“
第二组为”同用户组的权限“
第三组为”其他非本用户组的权限“
2.第二列表示有多少个文件名连接到此节点上
3.第三列表示这个文件或目录的所有者账号
4.第四列表示这个文件所属的用户组
5.第五列表示这个文件的大小,默认单位为B
6.第六列表示这个文件的创建日期或这个文件的修改日期。
7.第七列表示这个文件名
改变文件属性和权限:
chgrp(change group):改变文件的所属用户组
chown(change owner):改变文件所有者
chmod:改变权限,权限的设置有两种方式,使用数字或者符号来进行权限的更改。
数字类型改变权限:
使用数字分别代表各个权限,其中:
r:4
w:2
x:1
owner、group、others三种身份各自有自己的rwx权限,三个权限的分数需要累加。例如
owner = rwx = 4 + 2 + 1=7
group = rwx = 4 + 2 + 1 = 7
others = --- = 0 + 0 + 0 = 0
那么这个文件的权限数字就是770
符号类型改变权限:
使用u,g,o分别代表user、group、others三种身份的权限,a表示所有身份
例如:
一个文件的权限为:-rwxr-xr-x
user:有可读、可写、可执行的权限
group:有可读、可执行的权限
others:有可读、可执行的权限
可以使用命令 chmod u=rwx,go=rx install.log
给install.log文件的所有用户增加写权限
chmod a+w install.log
给install.log文件的所有用户去掉可执行权限
chmod a-x install.log
Linux下文件没有所谓的扩展名,一个linux文件能不能被执行,与文件名没有一点关系,而是权限中有x,就代表这个文件可以被执行。
通常会以适当的扩展名来表示文件是什么种类的。例如,.sh表示脚本或批处理文件,.Z、.tar、.tar.gz、.zip、.tgz都表示压缩文件。
Linux目录配置:
FHS(Filesystem Hierarchy Standard)标准用于让用户能够了解到已安装的软件通常放置在哪个目录下。FHS根据文件系统使用的频繁与否和是否允许用户随意改动,而将目录定义成四种交互作用的形态。分别如下:
可分享的 不可分享的
不变的:/usr(软件放置处)、/opt(第三方软件) /etc(配置文件)、/boot(开机与内核文件)
可变动的: /var/mail(用户邮件信箱) /var/run(程序相关)、/var/lock(程序相关)
/var/spool/news(新闻组) /var/lock(程序相关)
可分享的:可以分享给其他系统挂载使用的目录,所以包括可执行文件与用户的邮件等数据,是能够分享给网络上的其他主机挂载用的目录。
不可分享的:自己机器上运行的设备文件或者程序有关的socket文件等,不适合分享给其他主机。
不变的:数据不经常变动。
可变动的:数据经常变动
根目录(/):是整个系统最重要的目录,不仅所有其他目录是由根目录衍生出来的,而且根目录与开机、还原、系统修复等操作有关。根目录所在的分区越小越好,并且应用程序所安装的软件最好不要与根目录在同一个分区。
开机过程中仅有根目录会被挂载,其他的分区会在开机完成之后才会持续进行挂载,因此根目录下与开机过程有关的目录就不能够与根目录放到不同的分区去。有如下这些目录:
/etc:配置文件
/bin:重要执行文件
/dev:所需要的设备文件
/lib:执行文件所需的函数库与内核所需的模块
/sbin:重要的系统执行文件
/usr(UNIX software resource)unix操作系统软件资源,所有系统默认的软件都会放置在该目录下,因此这个目录有点类似与windows下的“C:\Windows”和“C:\Program files”。
/var 放置一些缓存、登录文件以及某些软件运行所产生的文件。
相对路径和绝对路径:
绝对路径:由根目录/开始写起的文件名或目录名称。
相对路径:相对于当前路径
.:或者./表示当前路径
..:或者../表示上层目录
目录管理
几个特殊的目录
. 代表此层目录
.. 代表上层目录
代表前一个工作目录
~ 代表“目前用户身份”所在的主文件夹
~account 代表account这个用户的主文件夹
几个常见的处理目录的命令
cd:切换目录
刚登录时会回到自己的主文件夹,主文件夹有一个代表符号就是~,cd ~会回到个人的主文件夹中,仅输入cd和输入cd ~相同。
pwd:显示当前目录
pwd [-p] 其中-p表示显示当前路径,而不是使用连接路径。加上-p可以让我们取得正确的目录名称。
mkdir:创建一个新目录
mkdir [-mp] 目录名称,其中m参数表示配置文件夹的权限。p参数表示递归创建所需要的所有目录
rmdir:删除一个空目录
rmdir [-p] 目录名,其中p参数表示连同上层空的目录一起删除。要删除的目录中必定不能存在其他的目录或文件。
执行文件路径的变量:$PATH
例如查看文件属性的命令是ls,而ls完整的文件名是/bin/ls,为什么我们可以在任何地方执行ls这个命令呢,这是因为环境变量PATH的帮助。当我们输入ls的时候,系统会依照PATH的设置去每个PATH定义的目录中查找文件名为ls的可执行文件,如果在PATH定义的目录中含有多个文件名为ls的可执行文件,那么先查询到的同名命令先被执行。
文件与目录管理
查看文件与目录:ls
-a:列出全部文件,连同隐藏文件(开头为.的文件)一起列出来
-d:仅列出目录本身,而不列出目录内的文件数据
-l:列出长数据串,包括文件的属性与权限等数据
如果只执行ls,默认显示的只有非隐藏文件的文件名、以文件名进行排序及文件名代表的颜色显示文件类型。
我们可以加上一些参数来显示我们想要的信息。
例如:ls -al 将主文件夹下的所有文件显示出来,其中包括隐藏文件,显示文件的属性和权限。
可以通过man ls来查看ls的具体用法复制、移动和删除
- 复制: cp [-adfilprsu] 源文件 目标文件
其中 -a相当于-pdr参数
-d表示源文件为连接文件的属性,则复制连接文件属性而非文件本身
-i表示若目标文件已经存在时,在覆盖时会先询问操作的进行
-p表示连同文件的属性一起复制过去
-r表示递归持续复制,用于目录的复制
在默认条件下,cp的源文件和目的文件的权限是不同的,目的文件的所有者通常会是命令操作者本身。 - 删除:rm [-fir] 文件或目录
-f表示force,忽略不存在的文件,不会出现告警信息
-i表示删除之前会询问用户是否操作
-r表示递归删除 - 移动:mv [-fiu] 源文件 目的文件
-f表示force的意思,如果目的文件已经存在,不会询问直接覆盖
-i表示如果目的文件存在时,会询问是否覆盖
-u表示如果目的文件存在,其源文件比较新时,才会更新
也可以多个源文件或目录全部移动到目录中
mv [option] source1 source2 .... directory
- 取得路径的文件名和目录名称
完成的文件名(包含目录名称和文件名)可能会很长,怎么知道哪个是文件名哪个是目录名,可以通过basename和dirname来获取
basename /etc/sysconfig/network
取到的文件名为network
dirname /etc/sysconfig/network
取到的目录名为/etc/sysconfig
文件内容查阅
- 直接查看文件内容可以使用cat、tac、nl命令,一次性将数据全部显示在屏幕上
- cat [-AbEnTv]
-A表示相当于-vET的集合参数
-v表示列出一些看不出来的特殊字符
-n表示打印出行号,连同空白行也会有行号
-E表示将结尾的断行字符$显示出来
-T表示将tab按键以^I显示出来 - tac 由最后一行到第一行反向在屏幕上显示出来
- nl [-bnw] 文件 添加行号打印
-b表示指定行号指定的方式,有两种方式
-b a 表示不论是否为空行,也同样显示行号
-b t 表示如果有空行,空的那一行不要列出行号(默认值)
-n表示列出行号表示的方法
-n ln 表示行号在屏幕的最左边显示
-n rn 表示行号在自己字段的最右方显示,且不加0
-n rz 表示行号在自己字段的最右方显示,且加0
-w表示行号字段占用的位数
- 可翻页查看
- more 一页一页翻动
在more命令运行的过程中,有几个有用的按键
空格键 代表向下翻一页
enter 代表向下滚动一行
:f 表示立即显示出文件名以及目前显示的行数
q 表示离开more命令,不再显示该文件的内容
b或者ctrl+b 表示往回翻页,只对文件有用 - less 一页一页翻动
在less命令运行的过程中,有几个有用的按键
空格键 代表向下翻一页
[PageDown] 代表向下翻一页
[PageUp] 代表向上翻一页
/字符串 代表向下查询字符串的功能
?字符串 代表向上查询字符串的功能
n 重复前一个查询(与/或者?有关)
N 反向重复前一个查询(与/或者?有关)
q 表示退出less命令
- 数据选取
- head [-n number] 文件 取前面几行
默认情况下显示前面10行
如果number为负数,则显示所有的行,但是不包括最后负数绝对值行 - tailf [-n number] 文件 取后面几行
默认显示后10行
如果number为正数,则表示只列出number行之后的数据
上面列出的所有文件查阅命令都是查阅纯文本文件
- 查阅非纯文本文件使用od
od [-t TYPE] 文件
-t后面可以接各种类型的输出
a 表示利用默认的字符来输出
c 表示使用ASCII字符来输出
d[size] 表示使用十进制来输出数据,每个整数占用size字节
f[size]表示使用浮点数来输出数据,每个数占用size字节
o[size]表示使用八进制来输出数据,每个整数占用size字节
x[size]表示使用十六进制来输出数据,每个整数占用size字节 - 修改文件时间或创建新文件
文件有三个变动的时间
- modification time(mtime):当文件的内容更改时,会更新这个时间
- status time(ctime):当文件的状态改变时,会更新这个时间,例如权限或属性被更改了。
- access time(atime):当文件的内容被取用时,会更新这个时间。
ls -l命令会显示文件内容上次被更改的时间。
ls -l --time=atime 命令显示的时间就是文件刚才被使用的时间
ls -l --time=ctime 命令显示的时间就是文件状态被更改的时间
修改文件的时间使用命令touch
touch [-acdmt] 文件
参数
-a表示仅修改访问时间
-c表示修改文件的时间,如果文件不存在则不会创建文件
-d表示后面可以接与修改的日期而不是目前的日期,也可以使用--date=“日期或时间”
-m表示仅修改mtime
-t表示后面可以接欲修改的时间而不是目前的日期,格式为 [YYMMDDhhmm]
使用touch 文件命令时,如果文件不存在就会创建该文件
例如touch test.log 当test.log文件不存在的时候就会去创建该文件。
- 文件默认权限与隐藏权限
- 文件默认权限
umask 用户在创建文件或目录的时候的,文件或目录的默认权限。
例如:
unmask
显示权限数字
unmask
0022
显示权限符号
unmask -s
u=rwx,g=rx,o=rx
默认情况下,如果用户创建文件,则默认没有可执行权限(x),只有r、w这两个选项,即默认权限是-rw-rw-rw(666)
默认情况下,如果用户创建目录,则默认所有权限均开放,即为drwx-rwx-rwx(777)
unmask的分数是指“该默认值需要拿掉的权限”,例如上面的022表示用户没有被拿掉任何权限,用户组和其他被拿掉了写的权限。
如何使用unmask修改新建文件的默认权限,直接在unmask后面加上分数就好了
比如:
···
unmask 002 就表示用户和用户组的读写权限不被拿掉,其他会被拿掉写的权限
···
- 查看文件类型file
file命令可以查看文件的类型
6.文件的查询 - 查找文件
whereis [-bmsu] 文件或目录名
-b表示只找二进制文件
-m表示只找在说明文件manual路径下的文件
-s表示只找source源文件
-u表示查找不在上述三个选项中的其他特殊文件
locate [-ir] keyword
-i表示忽略大小写的差异
-r表示后边可以接正则表达式的显示方式
有时候当你查找刚新建的文件时,会有找不到的情况,是因为locate命令是去寻找已经创建的数据库/var/lib/mlocate里面的数据,而数据库的创建默认是每天执行一次。
find [PATH] [option] [action]
参数主要如下:
1.与时间有关的参数
-atime,-ctime,-mtime
以-mtime为例,
-mtime n :n为数字,意思就是查找在n天之前的“一天之内”被修改过的文件
-mtime +n :列出在n天之前(不包含n天本身)被更改过的文件
-mtime -n :列出在n天之内(含n天本身)被更改过的文件
-newer file :file为一个存在的文件,列出比file还要新的文件名
例如:
find / -mtime 0 表示找到从现在开始过去24小时内有改动过的文件,0表示当前的时间
find /etc -newer /etc/passwd 表示找到比/etc/passwd新的文件
2.与用户或用户组名有关的参数
-uid n 其中n表示数字,即用户的ID,也称为UID
-gid n 其中n表示数字,即用户组名的ID,也称为GID
-user name 其中name为用户的账号名称
-group name 其中name为用户组名
-nonuser 表示寻找文件的所有者不存在在/etc/passwd中的文件
-nongroup 表示寻找文件的所有用户组不存在于/etc/group中的文件
例如:
find /home -user vbird 表示查找home下属于用户vbird的文件
find / -nonuser 查找系统中不属于任何人的文件
3.与文件权限及名称有关的参数
-name filename 查找文件名为filename的文件
-size [+-] SIZE 查找比size大(+)或小(-)的文件
-type TYPE表示查找文件类型为TYPE的文件
-perm mode表示查找文件权限刚好等于mode的文件
-perm -mode表示查找文件权限必须全部包括mode的权限的文件
例如 查找文件权限为-rwxr--r--的文件,即权限744,那么文件权限为-rwxr-xr-x(755)的文件也会被列出来,因为-rwxr-xr-x的属性包括了-rwxr--r--的属性
-perm +mode表示查找文件权限包含任一mode的权限的文件,例如查找-rwxr-xr-x,但是另一个文件属性包括-rw-------的文件也会被列出来,因为它有-rw属性存在
4.其他可进行的操作
-exec command :其中command表示其他命令,-exec表示接其他命令来处理查询的结果
-print 表示将结果打印在屏幕上
vim程序编辑器
vi和vim的区别是vim是vi的高级版本
为什么要学vim
1.所有的linux like 系统都会内置vi文本编辑器,而其他的文本编辑器不一定有
2.很多软件的编辑接口都会主动调用vi
3.vim有程序编辑的能力,可以主动以字体颜色辨别语法的正确性,方便设计
vi的使用:
vi有三种模式:一般模式、编辑模式、命令行模式
一般模式:使用vi打开一个文件的时候就进入了一般模式,在这个模式中可以按左右键移动光标,可以删除字符或删除整行,也可以复制粘贴你的文件数据。但是不可以编辑文件。
编辑模式:在一般模式下按下“i 、I、o、O、a、A、r、R”等任何一个字母才会进入编辑模式,按esc退出编辑模式
命令行模式:在一般模式下,输入“:、/、?”就进入了,命令行模式,在这个模式下可以进行读取、保存文件,离开vi等操作。
编辑牧师和命令行模式之间是不可以切换的。
一般模式切换到命令行模式可用的按钮
:w 表示将编辑的内容写入到硬盘中
:w! 表示如果文件属性为 只读时,强制写入该文件
:q表示离开vi
:q!表示如果文件有修改过,不保存强制退出,
:wq表示保存后离开
vim的用法和vi完全一样
管道命令
管道命令仅会处理standard out,对于standard error output会予以忽略
管道命令必须要能够接收来自前一个命令的数据成为standard input继续处理才行
选取命令:cut,grep
1.cut -d ‘分隔符’ -f field
cut -c 字符范围
-d表示分隔符
-f表示与-d分隔符一起使用,表示取分割后的第几段
-c表示以字符为单位取出固定字符区间
以“行”为单位进行处理的选取
例如:
echo $path |cut -d ':' -f 5 表示将取出的path变量用:分割后取第五段
export
输出
declare -x HISTSIZE="1000"
declare -x INPUTRC="/etc/inputrc"
export |cut -c 12-
输出为
HISTSIZE=“1000”
INPUTRC=“/etc/inputrc”
表示取第12个字符之后的所有字符串输出,因为是以行为单位进行处理的
2.grep
grep [-acinv] [--color=auto] '查找的字符串' filename
其中
-a表示将binary文件以text文件的放肆查找数据
-c表示计算找到“查找字符串”的次数
-i表示忽略大小写的不同
-n表示输出行号
-v表示反向选择,即显示出没有‘查找字符串’内容的那一行。
--color=auto表示将找到的关键字部分加上颜色
例如:
last |grep 'root' 表示将last当中出现root的那一行列出来
last |grep ‘root’ | cut -d “ ” -f 1 表示将last当中出现root的那一行列出来并用空格分隔开后取一个列。
正则表达式
首先学习一下grep命令的一些高级参数
grep [-A] [-B] [--color=auto] ‘搜索字符串’ filename
其中:
-A :后面可加数字,表示after的意思,除了列出该行外,后续的n行也列出来。
-B :后面可加数字,表示before的意思,除了列出该行外,前面的n行也列出来。
--color=auto表示将选取的数据添加颜色
grep是一个很常用的命令,grep在数据中查找一个字符串时,是以整行为单位来进行数据的选取的。假如一个文件有10行,其中有两行具有你查找的字符串,则将那两行显示在屏幕上,其他的丢弃。
例如
1.查找特定的字符
grep -n 'the' regular_express.txt
表示在regular_express.txt文件中查找含有the字符串的行
2.利用中括号[]来查找集合字符
[]里面不论有几个字符,它都只代表某“一个”字符
grep -n 't[ae]st' regular_express.txt
表示在regular_express.txt中查找字符串test或者tast
grep -n 'oo' regular_express.txt
表示在regular_express.txt中查找字符串oo
grep -n ‘[^g]oo’ regular_express.txt
表示在regular_express.txt中查找字符串前不包含g的oo字符串
grep -n '[^a-z]oo' regular_express.txt
表示在regular_express.txt中查找oo前面不能有小写字符的oo字符串
grep -n '[0-9]' regular_express.txt
表示在regular_express.txt中查找有数字的行
3.行首与行尾字符^$
linux中的断行字符是$
grep -n '^the' regular_express.txt
表示在regular_express.txt中查找在行首出现的the
grep -n ‘^[a-z]’ regular_express.txt
表示在regular_express.txt中查找开头是小写字符的行
grep -n '^[a-zA-Z]' regular_express.txt
表示在regular_express.txt中查找开头不是英文字母的行
^ 出现在[]之外表示定位在首行,^ 出现在[]中表示方向选择
grep -n '\.$' regular_express.txt
表示找到行尾结束为小数点.的那一行
grep -n '^$'regular_express.txt
表示找出哪以行是空白行
grep -v '^$' regular_express.txt |grep -v '^#'
不输出空行和以#开头的行
4.任意一个字符.与重复字符*
.(小数点):代表一定有一个任意字符
*(星号):代表重复前一个字符0到无穷次的意思
例如:
grep -n 'g..d' regular_express.txt
表示找出以g开头,d结尾的中间有两个字符的字符串
o*表示空字符或者一个o字符以上
oo*表示至少一个o以上
ooo*表示至少两个o以上
grep -n 'ooo*' regular_express.txt
表示查找至少有两个o以上的字符
grep -n 'goo*g' regular_express.txt
表示以g开头结尾,中间至少有一个o的字符串
grep -n 'g.*g' regular_express.txt
表示以g开头结尾中间任意字符的字符串
.*表示零个或多个任意字符
5.限定连续RE字符范围{}
因为符号{}在shell中是有特殊意义的,因此必须要使用转义字符\来让它失去特殊意义才行。
例如
grep -n 'o\{2\}' regular_express.txt
表示找到连续两个o的字符串
grep -n 'go\{2,5\}' regular_express.txt
表示查找g后面接2到5个o的字符串
grep -n ‘go\{2,\}’ regular_express.txt
表示g后面接至少两个o的字符串
基础正则表达式字符
^word 表示待查找的字符word在首行
word$ 表示待查找的字符在结尾
.(小数点)表示一定有一个任意字符的字符
\表示转义字符,将特殊符号的特殊意义去掉
*表示重复零个或无穷多个前一个字符
[list]表示从字符集合list中找出想太选取的一个字符
[n1-n2]表示从字符集中查找想要选取的字符范围
[^n1-n2]表示从字符集中查找不要的字符串或范围
{n,m}表示连续n到m个前一个字符,若为{n}表示连续n个前一个字符,{n,}表示连续n个以上前一个字符。
sed命令
sed命令可以将数据进行替换、删除、新增、选取特定行等
sed [-nefr] [动作]
其中
-n表示使用安静模式,在一般sed用法中,所有来自STDIN的数据一般都会被列出在屏幕上,但如果加上-n参数后,则只有经过sed特殊命令处理的那一行才会被列出来。
-e表示直接在命令行模式上进行sed的动作编辑
-f表示直接将sed的动作写在一个文件内
-r表示sed的动作支持的是扩展型的正则表达式,默认是基础型的正则表达式
-i表示直接修改读取的内容,而不是由屏幕输出
动作说明:
[n1[,n2]] function
n1,n2:不一定会存在,一般代表选择进行动作的行
function 有下面的参数
a表示新增,a后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)
c表示替换,c的后面可以接字符串,这些字符串可以替换n1,n2之间的行
d表示删除
i表示插入,i后买呢可以接字符串,而这些字符串会在新的一行出现(目前的上一行)
p表示打印,将某个选择的数据打印出来,通常会和参数-n一起运行
s表示替换,可以直接进行替换工作,sed ‘s/要被替换的字符串/新的字符串/g'
例如
n1 /etc/passwd | sed '2,5d'
表示将2到5行删除
n1 /etc/passwd | sed '3,$d'
表示删除第3行到最后一行
n1 /etc/passwd | sed '2a drink tea'
表示在第2行的后面增加一行,如果要在第2行的前面增加一行,使用参数i
如果要增加两行以上,则需要每行之间必须要以反斜杠\来进行新行的增加
n1 /etc/passwd | sed '2a drink tea or ......\
drink bear ?'
n1 /etc/passwd | sed '2,5c No 2-5 number'
表示将2到5行内容替换成No 2-5 number
awk 数据处理工具
awk是非常棒的数据处理工具。
awk '条件类型1{动作1} 条件类型2{动作2} 条件类型3{动作3}....' filename
awk主要是处理每一行的字段内的数据,而默认的字段的分隔符是空格键或[tab]键。
例如
last -n 5 表示仅取前5行
root pts/1 192.168.1.100 still logged in
root pts/1 192.168.1.100 (01:41)
root pts/1 192.168.1.100 (00:00)
root pts/1 192.168.1.100 (02:00)
root pts/1 192.168.1.100 (03:00)
想要输出账号和ip
last -n 5 | awk '{print $1 "\t" $3}'
表示输出以空格或tab键分开的第1和第3个字段,并且以tab键分割
$0表示一整行
awk内置变量有:
NF 表示每一行($0)拥有的字段总数
NR 表示目前awk所处理的是“第几行”的数据
FS 表示目前的分隔符,默认是空格键
例如:
last -n 5|awk '{print $1 "\t lines: " NR "\t columes: " NF}'
root lines:1 columes: 6
root lines:2 columes: 4
root lines:3 columes: 4
root lines:4 columes: 4
root lines:5 columes: 4
awk的逻辑运算符
> 大于
< 小于
>= 大于或等于
<= 小于或等于
== 等于
!= 不等于
例如:
cat /etc/passwd | awk '{FS=":"} $3 < 10 {print $1 "\t " $3}'
输出:
root:x:0:0:root:/root:/bin/bash
bin 1
daemon 2
以下省略
表示用:分割,打印第三个字段小于10的行的1,3字段
我们发现上面会输出第一行奇怪的数据,是因为当读入第一行的时候,变量之间还是以空格键进行分隔的,所有,我们虽然定义了FS=":",但是却在第二行后开始生效,我们可以利用BEGIN这个关键字。
cat /etc/passwd | awk 'BEGIN {FS=":"} $3<10 {print $1 "\t " $3}'
root 0
bin 1
daemon 2
使用awk进行计算统计
例如
Name 1st 2nd 3th
VBird 23000 24000 25000
DMTsai 21000 20000 23000
cat pay.txt | awk 'NR==1{printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total"} NR>=2{total=$1+$2+$3 printf "%10s %10d %10d %10d %10.2f\n",$1,$2,$3,$4,total}'
输出如下:
Name 1st 2nd 3th Total
VBird 23000 24000 25000 72000.00
DMTsai 21000 20000 23000 64000.00
格式输出中,在printf的格式设置中,务必加上\n,才能进行分行
在awk中变量可以直接使用,不用加上$符号
循环执行的例行性工作调度
crontab进行工作调度
crontab [-u username] [-l | -e | -r]
-u表示只有root才能进行这个任务
-e表示编辑crontab的工作内容
-l表示查阅crontab的工作内容
-r表示删除crontab的所有工作内容
例如
crontab -e
0 12 * * * mail dmtsai -s "at 12:00" < /home/dmtsai/.bashrc
其中由6个字段组成
分别表示的意义是:
分钟 小时 日期 月份 周 命令
0-59 0-23 1-31 1-12 0-7 命令
其中周的0和7都表示星期日
表示任意时刻
,(逗号)表示分隔时段的意思,例如0 3,6 * * * commond,表示在3和6时执行
-(减号)表示一段时间范围,例如20 8-12 * * * commond,表示8到12时之间每小时的20分执行。
/n(斜线)表示每隔n单位间隔的意思,例如/5 * * * * commond,表示每隔5分钟执行一次。
执行crontab -e这个crontab其实是/usr/bin/crontab这个执行文件。
Linux中的>和&
表示将输出重定向
&表示任务在后台执行,不加表示临时运行,关闭窗口项目即停止运行
几个基本符号及其含义:
/dev/null 表示空设备文件
0 表示stdin标准输入
1 表示stdout标准输出
2 表示stderr标准错误
例如:
command>/dev/null 表示将commond的标准输出重定向到设备文件/dev/null中
2>&1表示将标准错误重定向到标准输出,&相当于等效于标准输出
nohup命令即项目在运行前新建一个nohup.out文件用来记录该项目的运行日志情况。
scp -r 源文件路径 root@ip:目标文件路径