linux22

 

20.declare

加法1:

 

 

 

 加法2:

 

 

加法3:

 

 

 

 运算符:

 

 

 说明:优先级从上到下。

例子:

 

查看一个变量是否有值:

 

 

例子:

 

 

 21.环境变量配置文件

配置文件有:

/etc/profile

/etc/profile.d/*.sh

/etc/bashrc:这三个是任意用户登录后都会自动加载的配置文件

~/.bash_profile

~/.baskrc:.是隐藏文件,~是家的意思,这2个只对当前用户生效

 

 配置文件加载顺序:/etc/profile,里面有for语句,会读取/etc/profile.d/*.sh,其中*.sh中,比较重要的是lang.sh(定义语言的),lang.sh里面调用/etc/sysconfig/i18n。/etc/profile执行完后,执行~/.bash_profile。~/.bash_profile里面又调用了~/bathrc。。。。。在/etc/bashrc中对nologin,还需在调用/etc/profile.d.*sh

加载配置文件时里面会对用户进行判断,所以不同用户登录path值不同。

更改~/.bash_profile可以在path后面追加内容,这样就能永久改变path值了。

source 配置文件或.配置文件:不用再重启了,该命令能重新加载配置文件。

其他配置文件:

vi ~/.bash_logout: 在logout时,会自动执行这个配置文件

20. shell登录信息:

退出和登录都会执行该文件,登录信息保存在/etc/issue里面,可以直接更改。

 注意:\l仅对本地登录有效,远程登录无效。

远程登录欢迎信息在/etc/issue.net中,上面列表的转义符在issue.net中无效,只能输入纯文本。同时:

这样登录时就只执行issue.net文件了。

 在sshd_config中写入:

 

 

再:service sshd start 

不管本地还是远程:

直接vi改它就能执行了。

20.正则表达式

仅在Linux中,与通配符区别:

注意:用通配符的ls,find,cp必须是文件名的完全匹配,找a就不找ab 

基础正则表达式:

 

 

比如:a*:没有a或者a或者aa。。。。 

举例:

 

 

 

 

 

 

 

 

 

 

 

 

 

20.ps 显示进程状态

ps -fe:打印所有进程和它的id

21.pstree

以树状图显示进程之间的关系。

注意:shell就是可以接受用户输入命令的程序,是用户和计算机之间沟通的翻译官,而bash属于shell,linux当中的shell就是bash,而bash的作用就是:用命令行接受用户输入的命令(bash看来就是字符串),然后将字符串进行分割,看看是不是内部命令,若是外部命令则需要找到相应的实体然后运行它,最后返回结果。

具体地,当输入命令后,bash先看这个命令是不是内部命令,若不是,则在path里面找这个命令(应用程序)的位置,然后过去执行,找不到则显示command not found.

23. du命令用于显示目录或文件的大小。

方便阅读的格式显示test目录所占空间情况# du -h test

608K    test/test6
308K    test/test4
4.0K    test/scf/lib
4.0K    test/scf/service/deploy/product
4.0K    test/scf/service/deploy/info
12K     test/scf/service/deploy
16K     test/scf/service
4.0K    test/scf/doc
4.0K    test/scf/bin
32K     test/scf
8.0K    test/test3
1.3M    test

-s或--summarize 仅显示总计

24.mv

mv ./a Videos :将当前目录的a剪切到Videos目录下,还有重命名功能

25.ln

ln a b: 使用硬链接,硬链接的inode号一直;对a连接出来一个b来<==>cp -p + 同步更新,删掉原文件还能访问,不可跨分区,不可操作目录

ln -s a b:使用软链接,类似于快捷方式,虽然所有用户都有rwx权限操作l文件,但是只有原文件权限具有最终决定作用,删掉原文件不能访问,可跨分区

26.chmod

文件所有者和root才能更改权限

chmod g+w,o-r aaaa:对aaaa文件,将group的权限多一个w,其他人少个r权限

chmod 765 aaaa:利用数字更改权限

chmod -R 765 a:把a目录及a目=目录以下所有文件权限改为765

25.chown

23.chgrp

 25.write

 write 用户名:给用户发信,按ctrl+D返回。

26.wall

wall=write all

wall 信息:给所有用户(包括自己)发消息

27.ping

ping -c 3 12.12.12.12:只ping三次

28.mail

mail 用户名:给用户发信。ctrl+D结束,对方输入mail可以查看,输入1可以查看内容,输入h可以查看有几条邮件,输入d 1可以删掉它,按q退出。

28.last

查看登录过的所有用户的登录信息

lastlog :查看所有用户的登录信息,仅指的是最后一次 

lastlog -u 510(uid):查看uid=510的用户

28.traceroute

traceroute 网站:跟踪沿线路由器

26.netstat

-tlun只能查看tcp中的listen状态,而-an还能查看established的连接

查看网关可以用netstat -rn

25.vi

编辑模式:屏幕下方输入冒号的。

 

 

 

 

 

 

:%s/原字符串/新字符串/g:对全文中所有的原字符串替换为新的字符串

技巧:

:r /etc/a :将a文件的内容导入到当前文件的当前光标处

:!which ls:在不退出vi的模式下,执行并显示which ls 

:map ^P(同时按ctrl+v+p)I#<ESC> : 将Ctrl+P定义为命令:I#<ESC>

:1,4s/^/#/g:选中第一行到第四行,对所有的行首(^表示),替换为#

:1,4s/^#//g:^#表示行首的#,若没有^,则表示全部#

:1,4s/^/\/\//g:在1,4行的行首加入//,注意/前面要写\来转义

:ab mymail 73433@qq.com:在编辑模式令mymail=73433@qq.com,当insert时,只要输入mymail加enter,就会自动地换

若想使得一些命令在文件一加载就自动先执行,则需要在家目录下,vi /root/.vimrc(其他用户:/home/username/.vimrc),写入编辑模式的命令:

set nu

ab mymail 73433@qq.com

 

 

 26.stat

stat a :显示a的元数据

a文件的权限属于a的元数据

change记录改变元数据的时间。若改变profile文件的权限,则stat后可以发现change变了,若改变profile文件里面的内容时,则modify,change都变了,因为大小发生了变化导致元数据发生了变化,使得change变了。 

 28.grep

文件中搜索符合条件的字符串

 

grep asd a: 返回a文件中,含有asd的行

grep -i asd a:不区分大小写

grep -v asd a:显示不含asd的行

grep -v ^asd a:显示首部不是asd的行

-e:使用扩展正则表达式

 grep "^asd" grep.txt :查找以asd开头的行

grep "^asd\>" grep.txt:查找以asd开头的行,且asd是一个单词的结束

grep "a[0-9]b" grep.txt:含 a数字b 的行

grep "a[0-9]\+b" grep.txt:含 a多个数字b 的行,由于+是红色,不是基本的,需要再加\

grep "a[0-9]\{4\}b" grep.txt:含 a4个数字b 的行,由于{}是红色,不是基本的,需要再加\

grep "a.*b" grep.txt: 该单词首位是a,b,中间任意字符,所在行

grep "\(a\)\1" grep.txt: ()表示一个组,\1表示第一个组

 

 

1.组

组分为初始组和附加组

每个用户刚建立就有他自己的初始组,名字一样,一个用户只能有1个初始组,同时他还可以属于多个附加组

系统一产生1个用户,就会有对应的只能属于一个初始组的同用户名组出现

2.passwd

/etc/passwd:每一行代表一个用户:用户名称;密码标志(x表示有密码);UID(0:超级用户,1-499:系统用户(伪用户),500-65535:普通用户);GID(用户初始组

ID);用户说明(一个说明信息);家目录;shell(命令解释器,包括标准SHELL:/bin/bash,/sbin/login,后者使得用户不能登录)

在Linux系统中,通过用户配置文件来查看和修改用户信息。
man 5(查看配置文件的帮助) passwd(只输入文件名)

而真正密码存在于:/etc/shadow中,以密文形式
将普通用户的uid=0,这样它就成为了管理员,但是家目录没有更改
伪用户:不能登录,不能删除。

2.passwd

 

passwd 用户名:更改该用户名的密码

passwd:给当前用户设置密码

 

 

锁定用户:就是在/etc/shadow下的对应用户行,在密文前面加入了!!更改密码映射值,从而改变了密码,这样就达到锁定的目的。解锁可以直接去掉!!

echo “123” | passwd --stdin lamp:管道符把前面的输出变为后面的输入,则把123作为用户lamp的密码,适用于批量添加

3.shadow

补充:第4个字段:10,表示从第三字段起,10天内不能修改密码 

 

补充:第7字段若不写,则到期后就登不了了。若过了账号失效时间,则不管前面的天数有没有过期,都不能登录

4.时间戳

 

5.组信息文件

 

 补充:真正的组密码放在gshadow里面

 

补充:知道组密码的人,可以将其他用户加入此组,也可以删除组内成员

6.邮箱

用户的邮箱:/var/spool/mail/用户名/

7.模板目录

当用户刚创建时,自动把/etc/skel/的模板拷贝到用户的家目录下。

8.useradd

 

举例:useradd -u 666 -c "good" -s /bin/bash  jary:创建jary用户,令其uid=666,用户说明为:good,登录shell是/bin/bash

9.默认值

/etc/default/useradd当中会存有创建user的初始默认值,如:

 

/etc/login.defs也存有默认初始值:

 

10.usermod

用来修改已有用户的信息(useradd是添加新用户并设定选项)

 

usermod -c "godd" lamp :修改lamp用户的说明信息

11.chage

修改用户密码状态

 

强制用户登录就改变密码:

 

 12.userdel

userdel -r user1:删除user1的同时也删除user1的家目录

userdel原理:

 

 13.su

切换用户

su - root:用户切换到root且用户环境切换到root环境

:借用root的权限执行命令,但是不切换到root

 

14.groupadd

添加组:

 

15.groupmod

修改用户组

 

 16.groupdel

 删除组

groupdel 组名

如果这个组里面只有附加用户,则能删掉这个组,但里面的用户不会删掉。

如果这个组包含了初始用户,则不能直接删掉这个组,而是需要先删掉这个用户,才能删掉这个组。

17.gpasswd

添加的是附加用户

gpasswd -a u1 g1:将u1加入到g1组

gpasswd -d u1 g1:将u1移除了g1组

 可以直接改文件也行:vi /etc/group 

20.组

组分为初始组和附加组

每个用户刚建立就有他自己的初始组,名字一样,一个用户只能有1个初始组,同时他还可以属于多个附加组

20.passwd
在Linux系统中,通过用户配置文件来查看和修改用户信息。
man 5(查看配置文件的帮助) passwd(只输入文件名)
/etc/passwd:每一行代表一个用户:用户名称;密码标志(x表示有密码);UID(0:超级用户,1-499:系统用户(伪用户),500-65535:普通用户);GID(用户初始组

ID);用户说明(一个说明信息);家目录;shell(命令解释器,包括/bin/bash,/sbin/login)

而真正密码存在于:/etc/shadow中,以密文形式
将普通用户的uid=0,这样它就成为了管理员
伪用户:不能登录,不能删除。
系统一产生1个用户,就会有对应的只能一个初始组的同用户名组出现

29.cut

 cut -d" " -f1 grep.txt : 自定义分隔符“ ”,以它作为分割符,显示grep.txt第一列的数据

默认使用制表符分割

 cut -d" " -s -f1 grep.txt : ....,仅仅显示被切割的行

 cut -d" " -s -f1-3 grep.txt :.....,显示第一至第三列,以“ ”作为分割

30.printf

 

 

 

 

 

 

利用空格识别出后面的6个字符串,然后按照前面的'%s %s %s'格式输出前三个字符串,再用'%s %s %s'作用于后面的

 

 

 

 

 

 说明:想输出什么格式就直接对应着打出%s。。。。。

 

30.sort

 

 

 

说明:缺点是123排在2前面,因为它只用1和2比。解决:加入-n就可以解决

sort a: 默认对第一个字符按字典序排列行

sort -t" " -k2 -n a:以“ ”为分割,对第二列,以数值序进行排序

31.wc

 

统计用的命令,可以用man wc看看帮助

wc -l a:打印a的文件的行数

32.sed

可以不用vi进入文件,而是直接操作;可以操作从管道符接受过来的数据。

 

 

说明:\意思是如果需要多行,则需要输入\

 

 说明,不加-n,会多输出第二行,加-n,就只会输出第二行。因为没写-i选项,所有原文件内容不会变化。

 

 

 

 

 说明:在第二行后添加一行zuobi

 

 说明:在第二行前添加2行,输入时得写上\

 

 说明:把第四行替换为no person

 

-e:多处替换,只写了s,说明查找范围是整篇文档,多个条件之间用分号分开。 

 

sed "1a\hello" a : 在a文件的第一行的后面加一行,内容为hello,打印到屏幕,但是不改变原文件

sed -i "1a\hello" a : 要改动原文件

sed "2d" a :把第二行删了再显示,但不改变文件

sed "/aa/d" a :查找asd所在行,然后删了

sed "s/fuck/good/" a 或者sed "s@fuck@good@" a 或者 sed "s#fuck#good#" a :把fuck换位good

init文件当中的:id:3:.....中的3是启动后进入命令行模式,5是图形用户界面,但是该程序在Linux中属于用户模式,安装了才能用

sed "s/\(id:\)[0-6]/\15/" a:把id:数字替换为id:5

33.awk

 

若条件1满足,则执行动作1;若条件2满足,则执行动作2

$0代表整个一行,先读第一行,把这行对应的东西赋值给$0,1,2,3,4..,然后判断为真,则执行动作。

 

说明:awk默认识别空格或者制表符作为分隔符,print自带换行符,print在awk中有,但不是系统命令。

 

BEGIN

 

说明:先执行一次begin,再对每行执行后面的{}

 

说明:FS指定分隔符,此处在读数据之前先执行begin里面的,这样就定义好了分隔符。随后再对每行数据执行后面的{}操作。

假如没有begin,则先读入第一行数据,接着$0,$1....就被赋值了,然后再定义分隔符,这样第一行数据就没法分割了,只是分割了后面几行的数据。

END:在所有行读完之后,执行END命令

 

条件判断:

 

awk -F':' '{print $1 }' passwd :读入passwd文件的每一行,以:作为分隔符,如果不写-F":"就默认以空格和制表符为分隔符,对于每一行执行{}里面的语句,而大括号里面的是给awk看的而不是bash,所以要用单引号,对每一行打印第一列

echo "$a" : 由于bash解析,则打印a值

echo '$a':打印$a

awk -F':' 'BEGIN{print "name\tshell"} {print $1 "\t" $7} end{print "hello"}' passwd: 先执行begin方法,打印name  shell,然后读取每一行并执行匿名方法,打印第一列和第七列,最后执行end方法。

awk -F':' '/root/{print $0}' passwd : 打印passwd文件里面,含有root关键字的行($0代表整行,$1代表第一列)

多个匿名方法:

awk -F' ' '/root/{print "asd"$0} {print $0}' a : 将a文件的每行拿出来分别经过所有的匿名方法。

awk -F' ' '{print NR"\t"NF"\t"$0}' a :NR是一个内部变量——行号,NF是列数

 例子:

Tom 0 12-12-11 car 3000
John 1 13-01-13 bike 1000
vivi 1 13-01-18 car 2800
Tom 0 13-01-29 car 2500
John 1 13-01-28 bike 3500

awk '{split($3,date,"-");if(date[2]=="01"){name[$1]+=$5;}}END{for(i in name){print i"\t"name[i]}}'  a: split:对字符串$3以‘-’作为分割,分割后的元素被存到date数组里面。这里面的数组下标从1开始。新建name变量,以$1作为name的key,让它+上该行第5列的数据。意思是:统计出01月份里,员工们的工资分别是多少,结果放到name的value里面。最后再END{}当中,i遍历key,打印出name[i],即打印出所有员工的工资。

awk '{split($3,date,"-");if(date[2]=="01"){name[$1]+=$5;};if($2=="0"){role[$1]="M"}else{role[$1]='W'}}END{for(i in name){print i"\t"name[i]}}'  a:加入‘男‘,‘女’的显示

33.判断

 

test -e a:判断文件a是否存在 ,或者写[ -e a ]

echo $?:若结果为0则上面的命令是对的,即存在

 

 判断权限:

 

[ w a ] :在判断是否有w权限时,只要有w,不管是所有者,所属组,其他人,都考虑到了。

两个文件比较:

 

 

 

 

 

 

 字符串

 

 

 

多重条件:

 

34.流程控制

if

单分支:

 

 多分支

简单备份脚本:

 

 

判断Apache是否启动:

 

 

 

 多分支:

 

 

35.case

格式:

例子

 

 

例子:

 

posted @ 2020-03-18 13:53  Jary霸  阅读(216)  评论(0编辑  收藏  举报