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
格式:
例子
例子: