以下内容皆收集于网络
1.rpm -qa 和 rpm -q
查询一个包是否被安装# rpm -q < rpm package name>
列出所有被安装的rpm package
# rpm -qa
e.g. rpm -qa|grep jdk
2.grep
在文本中查找字符串
-i:搜索的时候忽略大小写
-n:显示结果所在行号
-c:统计匹配到的行数
-o:只显示符合条件的字符串,但是不整行显示,每个符合条件的字符串单独显示一行
-v:输出不带关键字的行(反向查询,反向匹配)
-w:匹配整个单词,如果是字符串中包含这个单词,则不作匹配
-Ax:在输出的时候包含结果所在行之后指定行数,这里是x行,A是after
-Bx:之前的x行
-Cx:之前和之后的x行
-e:实现多个选项的匹配,逻辑or关系
-q:静默模式,不输出任何信息,当只关心有没有匹配到而不关心匹配的内容时可以使用,然后用“echo $?”查看,0表示匹配到,1表示没匹配到
-P:表示兼容perl的正则引擎
-E:使用扩展正则表达式,而不是基本正则表达式,相当于使用egrep
3.tar
常用:tar -zxvf 压缩文件 -C 目标目录
-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件
这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。
-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出
下面的参数-f是必须的
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
# tar -cf all.tar *.jpg
这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。
# tar -rf all.tar *.gif
这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
# tar -uf all.tar logo.gif
这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。
# tar -tf all.tar
这条命令是列出all.tar包中所有文件,-t是列出文件的意思
# tar -xf all.tar
这条命令是解出all.tar包中所有文件,-t是解开的意思
压缩
tar -cvf jpg.tar *.jpg //将目录里所有jpg文件打包成jpg.tar
tar -czf jpg.tar.gz *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
tar -cjf jpg.tar.bz2 *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2
tar -cZf jpg.tar.Z *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z
rar a jpg.rar *.jpg //rar格式的压缩,需要先下载rar for linux
zip jpg.zip *.jpg //zip格式的压缩,需要先下载zip for linux
解压
tar -xvf file.tar //解压 tar包
tar -xzvf file.tar.gz //解压tar.gz
tar -xjvf file.tar.bz2 //解压 tar.bz2
tar -xZvf file.tar.Z //解压tar.Z
unrar e file.rar //解压rar
unzip file.zip //解压zip
-C
在打包的时候 -C 指定目录,从而不把目录打包进文件名字里
用这个命令:tar zcvf chao.tar.gz /chao/* 打包文件的时候,在压缩包里把 /chao/这个路径也打包进去了。
[root@yunwei-test chao]# ls /chao/ 01.txt 02.txt 03.txt 04.txt 05.txt 06.txt 07.txt 08.txt 09.txt 10.txt [root@yunwei-test chao]# tar zcvf /tar/chao.tar.gz /chao/* tar: Removing leading `/' from member names /chao/01.txt /chao/02.txt /chao/03.txt /chao/04.txt /chao/05.txt /chao/06.txt /chao/07.txt /chao/08.txt /chao/09.txt /chao/10.txt [root@yunwei-test chao]# ls /tar/ chao.tar.gz #解压 [root@yunwei-test chao]# cd /tar/ [root@yunwei-test tar]# ls chao.tar.gz [root@yunwei-test tar]# tar xf chao.tar.gz [root@yunwei-test tar]# ls chao chao.tar.gz [root@yunwei-test tar]# cd chao/ [root@yunwei-test chao]# ls 01.txt 02.txt 03.txt 04.txt 05.txt 06.txt 07.txt 08.txt 09.txt 10.txt我想不要路径,我不想切换目录过去,而又只想打包指定目录下的文件。 使用 -C 参数。
##打包
[root@yunwei-test chao]# tar zcvf /tar/chao.tar.gz -C /chao . ./ ./01.txt ./02.txt ./03.txt ./04.txt ./05.txt ./06.txt ./07.txt ./08.txt ./09.txt ./10.txt [root@yunwei-test chao]# ls /tar/ chao.tar.gz [root@yunwei-test chao]# cd /tar/ [root@yunwei-test tar]# ls chao.tar.gz
#解压 [root@yunwei-test tar]# tar xvf chao.tar.gz ./ ./01.txt ./02.txt ./03.txt ./04.txt ./05.txt ./06.txt ./07.txt ./08.txt ./09.txt ./10.txt [root@yunwei-test tar]# ls 01.txt 02.txt 03.txt 04.txt 05.txt 06.txt 07.txt 08.txt 09.txt 10.txt chao.tar.gz在解压的时候 -C 是解压到指定目录中。
4.软连接
ln -s 源文件 软链接文件
软链接是创建的,就意味着软链接文件不可以在创建之前存在
要使用绝对路径
ln -s /bigdata/application/jdk1.8.0_231/ /usr/local/jdk
5.chown
指令名称 : chown
使用权限 : root(一般来说,这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以改变别人的文件拥有者,也没有权限可以自己的文件拥有者改设为别人。只有系统管理者(root)才有这样的权限。)
使用方式 : chown [-cfhvR] [--help] [--version] user[:group] file…
利用 chown 可以将档案的拥有者加以改变。这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以改变别人的档案拥有者,也没有权限可以自己的档案拥有者改设为别人。只有系统管理者(root)才有这样的权限。
参数:
-c或-change:作用与-v相似,但只传回修改的部分
-f或–quiet或–silent:不显示错误信息
-h或–no-dereference:只对符号链接的文件做修改,而不更改其他任何相关文件
-R或-recursive:递归处理,将指定目录下的所有文件及子目录一并处理
-v或–verbose:显示指令执行过程
–dereference:作用和-h刚好相反
–help:显示在线说明
–reference=<参考文件或目录>:把指定文件或目录的所有者与所属组,统统设置成和参考文件或目录的所有者与所属组相同
–version:显示版本信息
chown命令使用举例:(像我用的vps,就要先ssh登录)
# chown [-R] [用户名称] [文件或目录]
# chown [-R] [用户名称:组名称] [文件或目录]
范例1:将test3.txt文件的属主改为test用户。 # ls -l test3.txt
-rw-r–r– 1 test root 0 2009-10-23 9:59 test3.txt # chown test:root test3.txt
# ls -l test3.txt
-rw-r–r– 1 test root 0 2009-10-23 9:59
范例2:chown所接的新的属主和新的属组之间可以使用:连接,属主和属组之一可以为空。如果属主为空,应该是“:属组”;如果属组为空,“:”可以不用带上。
# ls -l test3.txt
-rw-r–r– 1 test root 0 2009-10-23 9:59 test3.txt
# chown :test test3.txt <==把文件test3.txt的属组改为test
# ls -l test3.txt
-rw-r–r– 1 test test 0 2009-10-23 9:59 test3.txt
范例3:chown也提供了-R参数,这个参数对目录改变属主和属组极为有用,可以通过加 -R参数来改变某个目录下的所有文件到新的属主或属组。 # ls -l testdir <== 查看testdir目录属性
drwxr-xr-x 2 usr root 0 2009-10-56 10:38 testdir/ <==文件属主是usr用户,属组是 root用户 # ls -lr testdir <==查看testdir目录下所有文件及其属性
total 0
-rw-r–r– 1 usr root 0 2009-10-23 10:38 test1.txt
-rw-r–r– 1 usr root 0 2009-10-23 10:38 test2.txt
-rw-r–r– 1 usr root 0 2009-10-23 10:38 test3.txt # chown -R test:test testdir/ <==修改testdir及它的下级目录和所有文件到新的用户和用户组
# ls -l testdir
drwxr-xr-x 2 test test 0 2009-10-23 10:38 testdir/ # ls -lr testdir
total 0
-rw-r–r– 1 test test 0 2009-10-23 10:38 test1.txt
-rw-r–r– 1 test test 0 2009-10-23 10:38 test2.txt
-rw-r–r– 1 test test 0 2009-10-23 10:38 test3.txt
6.用户组和文件权限
原文链接:https://www.cnblogs.com/123-/p/4189072.html
用户组
在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件有所有者、所在组、其它组的概念
- 所有者
- 所在组
- 其它组
- 改变用户所在的组
所有者
一般为文件的创建者,谁创建了该文件,就天然的成为该文件的所有者
用ls ‐ahl命令可以看到文件的所有者
也可以使用chown 用户名 文件名来修改文件的所有者
文件所在组
当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组
用ls ‐ahl命令可以看到文件的所有组
也可以使用chgrp 组名 文件名来修改文件所在的组
其它组
除开文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组
文件权限
ls
-l中显示的内容如下:
-rwxrw-r‐-1 root root 1213 Feb 2 09:39 abc
- 10个字符确定不同用户能对文件干什么
- 第一个字符代表文件(-)、目录(d),链接(l)
- 其余字符每3个一组(rwx),读(r)、写(w)、执行(x)
- 第一组rwx:文件所有者的权限是读、写和执行
- 第二组rw-:与文件所有者同一组的用户的权限是读、写但不能执行
- 第三组r--:不与文件所有者同组的其他用户的权限是读不能写和执行
也可用数字表示为:r=4,w=2,x=1 因此rwx=4+2+1=7
- 1 表示连接的文件数
- root 表示用户
- root表示用户所在的组
- 1213 表示文件大小(字节)
- Feb 2 09:39 表示最后修改日期
- abc 表示文件名
改变权限的命令
chmod 改变文件或目录的权限
chmod 755 abc:赋予abc权限rwxr-xr-x
chmod u=rwx,g=rx,o=rx abc:同上u=用户权限,g=组权限,o=不同组其他用户权限
chmod u-x,g+w abc:给abc去除用户执行的权限,增加组写的权限
chmod a+r abc:给所有用户添加读的权限
改变所有者(chown)和用户组(chgrp)命令
chown xiaoming abc:改变abc的所有者为xiaoming
chgrp root abc:改变abc所属的组为root
chown root ./abc:改变abc这个目录的所有者是root
chown ‐R root ./abc:改变abc这个目录及其下面所有的文件和目录的所有者是root
改变用户所在组
在添加用户时,可以指定将该用户添加到哪个组中,同样用root的管理权限可以改变某个用户所在的组
- usermod ‐g 组名 用户名
你可以用
- usermod ‐d 目录名 用户名,改变该用户登录的初始目录
【综合案例】
【题1.1】建立两个用户组group1和group2,以及三个用户dennis、daniel、abigale,并且将前2个用户分配在group1用户组下,后一个分配在group2用户组下
【题1.2】以dennis用户登录,创建一个Hello.java文件
【题1.3】以daniel用户登录,观察是否可以访问/home/dennis目录以及读或写其创建的Hello.java文件
【题1.4】以dennis用户登录,修改目录/home/dennis及Hello.java文件的读写权限(更正:修改目录权限的时候,应该使用770,而不是760,否则权限不足)
【题1.5】重复【题1.3】
【题1.6】改变abigale的用户组由group2变为group1
然后,可以使用cat /etc/passwd查看并确定
【参考】
- groupadd 组名,在linux中添加组
- vi /etc/group,查看linux中所有组信息,可以看可以编辑
- cat /etc/group,查看linux中所有组信息,只可以看不可以编辑
- useradd ‐g 组名 用户名,创建用户的同时指定将该用户分配到哪个组下
- vi /etc/passwd,查看linux中所有用户信息,可以看可以编辑
- cat /etc/passwd,查看linux中所有用户信息,只可以看不可以编辑
7.chatter
常见命令参数
1
2
3
4
5
6
7
8
9
10
11
12
|
A:即Atime,告诉系统不要修改对这个文件的最后访问时间。 S:即Sync,一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。 a:即Append Only,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。 b:不更新文件或目录的最后存取时间。 c:将文件或目录压缩后存放。 d:当dump程序执行时,该文件或目录不会被dump备份。 D:检查压缩文件中的错误。 i:即Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。 s:彻底删除文件,不可恢复,因为是从磁盘上删除,然后用0填充文件所在区域。 u:当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件,用来防止意外删除文件或目录。 t:文件系统支持尾部合并( tail -merging)。 X:可以直接访问压缩文件的内容。 |
常用的命令展示
chatter: 锁定文件,不能删除,不能更改
+a: 只能给文件添加内容,但是删除不了,
chattr +a /etc/passwd
-d: 不可删除
加锁:chattr +i /etc/passwd 文件不能删除,不能更改,不能移动
查看加锁: lsattr /etc/passwd 文件加了一个参数 i 表示锁定
解锁:chattr -i /home/omd/h.txt - 表示解除
隐藏chattr命令:
which chattr mv /usr/bin/chattr /opt/ftl/ cd /opt/ftl/ mv chattr h -->更改命令,使用别名h隐藏身份 /opt/ftl/h +i /home/omd/h.txt -->利用h 行驶chattr命令
lsattr /home/omd/h.txt -->查看加密信息
恢复隐藏命令
mv h /usr/bin/chattr chattr -i /home/omd/h.txt lsattr /home/omd/h.txt
8.$#,$@,$0,$1,$2,$*,$$,$?
脚本内容
#!/bin/sh echo "number:$#" echo "scname:$0" echo "first :$1" echo "second:$2" echo "argume:$@" echo "show parm list:$*" echo "show process id:$$" echo "show precomm stat: $?"
保存退出
赋予脚本执行权限
# chmod +x test
执行脚本
# ./test aa bb number:2 scname:./test first:aa second:bb argume:aa bb show parm list:aa bb show process id:24544 show precomm stat:0
通过显示结果可以看到:
$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误
linux /etc/rc.d/目录及rc.local的详解
https://blog.51cto.com/efoni/2147018
centos 系统禁止普通用户使用crontab命令
cron计划任务默认root用户与非root用户都可以执行,当然如果在安全方面想禁用这部分用户,则可以通过两个文件来解决:
cron.allow
cron.deny
cron.allow:定义允许使用crontab命令的用户
cron.deny:定义拒绝使用crontab命令的用户
这两个文件有优先级,普通用户在执行crontab命令的时候
1、系统先检测cron.allow文件是否存在;如果存在,则检测文件中存在的用户中是否有当前用户,检测通过则开始执行,检测不通过直接提示该用户没有执行权限
2、当系统没有检测到cron.allow文件存在的时候,则接下来检测cron.deny文件,看当前用户是否被deny掉,如果没有在cron.deny文件中检测到当前运行crontab的用户,则该命令可以成功执行,如果有检测到该用户在cron.deny文件中,则直接提示该用户没有执行权限
案例1:只允许root和www用户执行crontab命令,其他用户则禁止执行
在需要定义该策略的主机上面执行:
echo “www” > /etc/cron.allow
案例2:只拒绝anonymous用户执行crontab命令,其他用户都可以执行该命令:
rm -f /etc/cron.allow
echo “anonymous” > /etc/cron.deny