20161102学习笔记
ctrl+win+左/右,切换虚拟机桌面
win+Tab快速切换任务程序
浏览器的:
ctrl+数字或ctrl+PgUp/PgDn或Ctrl+Tab切换浏览器的标签页
Ctrl+w关闭标签页
Ctrl+t创建标签页
=============Linux学习笔记如下:
1学习文件和目录的权限。学习umask。自学setuid,chown和chgrp,符号连接。
总结:umask命令确定了你创建文件的缺省模式(若umask的值为002,则代表他没有w权限)
umask的值为0~7,文件的值为6,4,2,0目录的权限为7~0。即,umask的值越小权限越大。
umask的作用是,它是为了控制默认权限,不要使默认的文件和目录具有全权而设的
语法:直接输入umask,查看当前默认权限
umask 后面接三三位数字,修改权限
SetUID命令:
passwd命令有一个特殊的权限标记s ,存在于文件所有者的权限位上。这是一类特殊的权限SetUID ,可以这样来理解它:当一个具有执行权限的文件设置SetUID权限后,用户执行这个文件时将以文件所有者的身份执行。passwd命令具有SetUID权限,所有者为root(Linux中的命令默认所有者都是root),也就是说当普通用户使用passwd更改自己密码的时候,那一瞬间突然灵魂附体了,实际在以passwd命令所有者root的身份在执行,root当然可以将密码写入/etc/shadow文件(不要忘记root这个家伙是superuser什么事都可以干),命令执行完成后该身份也随之消失。
当一个可执行文件(eg:命令touch)设置SetUID权限后,当普通用户samlee执行touch创建新文件时,实际上是以touch命令所有者root的身份在执行此操作,既然是以root身份执行,当然新建文件的所有者为root ,这就是SetUID的作用。
chmod命令:
使用权限 : 所有使用者
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取(4),w 表示可写入(2),x 表示可执行(1),
u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
示例:将档案 file1.txt 设为所有人皆可读取 :chmod a+r file1.txt
此外chmod也可以用数字来表示权限如 chmod 777 file
chown命令:
使用权限 : root
更改与文件关联的所有者或组。
格式:chmod [-cfhvR] [--help] [--version] user[:group] file...
chgrp命令:
chgrp命令可采用群组名称或群组识别码的方式改变文件或目录的所属群组。使用权限是超级用户
chgrp [选项] [组] [文件]
注:chmod是更改文件的权限 chown是改改文件的属主与属组 搜索chgrp只是更改文件的属组。
符号链接又叫软链接,是一类特殊的文件,这个文件包含了另一个文件的路径名(绝对路径或者相对路径)。
在对符号文件进行读或写操作的时候,系统会自动把该操作转换为对源文件的操作,但删除链接文件时,系统仅仅删除链接文件,而不删除源文件本身。
2在成功地执行一个命令之后再执行另一个命令&&,或者在一个命令失败后再执行另一个命令||
tips:某些情况下&&可取代if去使用,使语句更简单
在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号。文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文件的快速访问。
链接是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法
硬链接说白了是一个指针,指向文件索引节点,系统并不为它重新分配inode。可以用:ln命令来建立硬链接。
软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。
当创建了一个文件的硬链接时,硬链接会使用和文件相同的inode号,此时原来的文件的inode连接数由最初的1变为了2,实际上硬链接和文件使用了相同的inode,只不过是inode连接数增加了,删除文件不会影响硬链接,硬链接的inode数会从2变为1。
而在创建文件的软链接时,软链接会使用一个新的inode,所以软链接的inode号和文件的inode号不同,软链接的inode里存放着指向文件的路径,删除文件,软链接也无法使用了,因为文件的路径不存在了。当再次创建这个文件时(文件名与之前的相同),软链接又会重新指向这个文件(inode号与之前的不同了),而硬链接不会受其影响。
3后台执行命令:cron,nobup,at,&
当你在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏幕。为了使这些进程能够在后台运行,也就是说不在终端屏幕上运行,有几种选择方法可供使用。
crontab命令:
cron 系统调度进程。可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行。
cron在你安排不同的常规维护任务时是很有用的,比如周期性地备份、日志循环、检查文件系统、监测磁盘空间等等。
格式:<分钟> <小时> <日> <月> <星期> <命令>
eg:30 21* * * /apps/bin/cleanup.sh(分时天月周)每天21点30分执行 /apps/bin/cleanup.sh
at命令:
使用它在一个特定的时间运行一些特殊的作业,或在晚一些的非负荷高峰时间段或高峰负荷时间段运行。
&命令:
& 使用它在后台运行一个占用时间不长的进程。
我们一般想让某个程序在后台运行,于是我们将常会用 & 在程序结尾来让程序自动运行
示例:command >out.file 2>&1 &
nohup命令:
如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。
该命令的一般形式为:nohup command &
如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件;
⑴ sort的工作原理
sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
[rocrocket@rocrocket programming]$ cat seq.txt
banana
apple
pear
orange
[rocrocket@rocrocket programming]$ sort seq.txt
apple
banana
orange
pear
⑵ sort的-u选项
它的作用很简单,就是在输出行中去除重复行。
[rocrocket@rocrocket programming]$ cat seq.txt
banana
apple
pear
orange
pear
[rocrocket@rocrocket programming]$ sort seq.txt
apple
banana
orange
pear
pear
[rocrocket@rocrocket programming]$ sort -u seq.txt
apple
banana
orange
pear
pear由于重复被-u选项无情的删除了。
⑶ sort的-r选项
sort默认的排序方式是升序,如果想改成降序,就加个-r就搞定了。
[rocrocket@rocrocket programming]$ cat number.txt
1
3
5
2
4
[rocrocket@rocrocket programming]$ sort number.txt
1
2
3
4
5
[rocrocket@rocrocket programming]$ sort -r number.txt
5
4
3
2
1
⑷ sort的-o选项
由于sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort filename > newfile。
但是,如果你想把排序结果输出到原文件中,用重定向可就不行了。
[rocrocket@rocrocket programming]$ sort -r number.txt
> number.txt
[rocrocket@rocrocket programming]$ cat number.txt
[rocrocket@rocrocket programming]$
看,竟然将number清空了。
就在这个时候,-o选项出现了,它成功的解决了这个问题,让你放心的将结果写入原文件。这或许也是-o比重定向的唯一优势所在。
[rocrocket@rocrocket programming]$ cat number.txt
1
3
5
2
4
[rocrocket@rocrocket programming]$ sort -r number.txt -o
number.txt
[rocrocket@rocrocket programming]$ cat number.txt
5
4
3
2
1
⑸sort的-n选项
你有没有遇到过10比2小的情况。我反正遇到过。出现这种情况是由于排序程序将这些数字按字符来排序了,排序程序会先比较1和2,显然1小,所以就将10放在2前面喽。这也是sort的一贯作风。
我们如果想改变这种现状,就要使用-n选项,来告诉sort,“要以数值来排序”!
[rocrocket@rocrocket programming]$ cat number.txt
1
10
19
11
2
5
[rocrocket@rocrocket programming]$ sort number.txt
1
10
11
19
2
5
[rocrocket@rocrocket programming]$ sort -n number.txt
1
2
5
10
11
19
⑹ sort的-t选项和-k选项
如果有一个文件的内容是这样:
[rocrocket@rocrocket programming]$ cat facebook.txt
banana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4
这个文件有三列,列与列之间用冒号隔开了,第一列表示水果类型,第二列表示水果数量,第三列表示水果价格。
那么我想以水果数量来排序,也就是以第二列来排序,如何利用sort实现?
幸好,sort提供了-t选项,后面可以设定间隔符。(是不是想起了cut和paste的-d选项,共鸣~~)
指定了间隔符之后,就可以用-k来指定列数了。
[rocrocket@rocrocket programming]$ sort -n -k 2 -t :
facebook.txt
apple:10:2.5
orange:20:3.4
banana:30:5.5
pear:90:2.3
我们使用冒号作为间隔符,并针对第二列来进行数值升序排序,结果很令人满意。
⑺ 其他的sort常用选项
-f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写
-c会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1
-C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1
-M会以月份来排序,比如JAN小于FEB等等
-b会忽略每一行前面的所有空白部分,从第一个可见字符开始比较。
有时候学习脚本,你会发现sort命令后面跟了一堆类似-k1,2,或者-k1.2 -k3.4的东东,有些匪夷所思。今天,我们就来搞定它—-k选项!
a 准备素材
$ cat facebook.txt
google 110 5000
baidu 100 5000
guge 50 3000
sohu 100 4500
第一个域是公司名称,第二个域是公司人数,第三个域是员工平均工资。(除了公司名称,其他的别信,都瞎写的^_^)
b我想让这个文件按公司的字母顺序排序,也就是按第一个域进行排序:(这个facebook.txt文件有三个域)
$ sort -t ‘ ‘ -k 1 facebook.txt
baidu 100 5000
google 110 5000
guge 50 3000
sohu 100 4500
看到了吧,就直接用-k 1设定就可以了。(其实此处并不严格,稍后你就会知道)
c 我想让facebook.txt按照公司人数排序
$ sort -n -t ‘ ‘ -k 2 facebook.txt
guge 50 3000
baidu 100 5000
sohu 100 4500
google 110 5000
不用解释,我相信你能懂。
但是,此处出现了问题,那就是baidu和sohu的公司人数相同,都是100人,这个时候怎么办呢?按照默认规矩,是从第一个域开始进行升序排序,因此baidu排在了sohu前面。
d 我想让facebook.txt按照公司人数排序 ,人数相同的按照员工平均工资升序排序:
$ sort -n -t ‘ ‘ -k 2 -k 3 facebook.txt
guge 50 3000
sohu 100 4500
baidu 100 5000
google 110 5000
看,我们加了一个-k2 -k3就解决了问题。对滴,sort支持这种设定,就是说设定域排序的优先级,先以第2个域进行排序,如果相同,再以第3个域进行排序。(如果你愿意,可以一直这么写下去,设定很多个排序优先级)
e 我想让facebook.txt按照员工工资降序排序,如果员工人数相同的,则按照公司人数升序排序:(这个有点难度喽)
$ sort -n -t ‘ ‘ -k 3r -k 2 facebook.txt
baidu 100 5000
google 110 5000
sohu 100 4500
guge 50 3000
此处有使用了一些小技巧,你仔细看看,在-k 3后面偷偷加上了一个小写字母r。r和-r选项的作用是一样的,就是表示逆序。因为sort默认是按照升序排序的,所以此处需要加上r表示第三个域(员工平均工资)是按照降序排序。此处你还可以加上n,就表示对这个域进行排序时,要按照数值大小进行排序,举个例子吧:
$ sort -t ‘ ‘ -k 3nr -k 2n facebook.txt
baidu 100 5000
google 110 5000
sohu 100 4500
guge 50 3000
看,我们去掉了最前面的-n选项,而是将它加入到了每一个-k选项中了。
工作中会用到的:-r降序排列;-k指定列数;以:为分隔符,将文件a按照第二列排序sort -t: -k2nr a。
split用来将大文件分割成小文件。
split命令一般格式:
split
-output_file-size
input-filename output-filename
常用split
–l LTECGNO20160720CNT200.200
-b:值为每一输出档案的大小,单位为 byte。 -C:每一输出档中,单行的最大 byte 数。 -d:使用数字作为后缀。 -l:值为每一输出档的列数大小
uniq命令:
uniq用来从一个文本文件中去除或禁止重复行。
-c 打印每一重复行出现次数。
cut命令:是一个选取命令。拆
cut
[选项]
[file]
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定
-b、-c 或 -f 标志之一
paste命令:拆
paste将按行将不同文件行信息放在一行
paste -d -s -file1 file2
选项含义如下:
-d 指定不同于空格或tab键的域分隔符。例如用 @分隔域,使用- d @。
-s 将每个文件合并成行而不是按行粘贴。
5文件的输入输出
标准输入流是文件描述符0。它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出。
标准输出是流文件描述符 1。它是命令的输出,缺省是屏幕,也可以是文件。
标准错误流是文件描述符 2。
6xargs命令
之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了xargs命令,
例如:这个命令是错误的find /sbin -perm +700 |ls -l
这样才是正确的find /sbin -perm +700 |xargs ls -l
它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。xargs是构建单行命令的重要组件之一。
在 使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现 溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。find命令把匹配到的文件 传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一 批,并如此继续下去。
即find可以匹配xargs也可以匹配exec,在传递的内容较小时,使用exec是最佳匹配。
7正则表达式
^ 匹配串首
$ 匹配串尾
. 匹配单个任意字符
* 匹配零个或多个前导字符
+ 匹配一个或多个前导字符
? 匹配零个或一个前导字符
[ABC] 匹配指定字符组(即A、B和C)中任一字符
[^ABC] 匹配任何一个不在指定字符组(即A、B和C)中的字符
[A-Z] 匹配A至Z之间的任一字符
A|B 匹配A或B
(AB)+ 匹配一个或多个AB 的组合,例如: AB 、ABAB 、ABABAB
\* 匹配星号本身
& 用在替代串中,代表查找串中匹配到的内容
~ !~ 匹配,取反
() 在正则表达式中将字符串组合在一起
注:+比*好用,&用的不多
find命令:
常用的选项:-name,-mtime,-type文件类型,d目录,f普通文件
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;,注意{ }和\;之间的空格。
查找30天之前的文件并删除(提示):find -mtime +30 –exec rm{}\;(find . –type f -mtime +30 –ok rm {} \)
指定文件挪到我的目录:find . –type f -name “LTECNGI20160721CNT200.2000” –exec mv {} ~/asiainfo/fh/ \;
=================================================================
AWK命令
awk也是一门语言。
在 Awk 中,花括号{}用于将代码分块。
变量 $0 表示整个当前行, $1 代表第一个字段
BEGIN 代码块在 awk 开始处理输入文件之前执行,因此它是初始化 FS(字段分隔符)变量、打印页眉或者初始化在后续程序中将要引用的其他全局变量的绝佳位置。
BEGIN {
FS=":"
}
{ print $1 }
awk 还提供了另一种称为 END 的专用代码块。在输入文件的所有行处理完毕之后,awk 执行这个代码块。通常,END 代码块用于进行最终计算或者打印应该在输出流结尾处出现的汇总信息
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步