Linux命令收集

 以下内容皆收集于网络

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

原文地址:https://www.cnblogs.com/aidata/p/11703053.html