1 删除非空目录
1.1 rm -rf dirname 无提示递归删除dirname目录和目录中的内容
rm: -r --recursive remove directories and their contents recursively -f --force ignore nonexistent files and arguments, never prompt
1.2 删除某个文件之外的所有文件/目录
如abc文件夹下有a、b、c三个文件,如何一行命令删除b和c不删除a?
rm -f !(a)
若删除c而保留a、b?
rm -f !(a|b)
注:使用该命令时可能遇到的麻烦,一般bash中运行后会提示“-bash:!:event not found”可以通过运行shopt -s extgolb来解决。
2 在Linux下创建一个不可变更的文件
假如你想对Linux中的一些重要文件做写保护,这样它们就不能被删除或者被篡改成之前的版本或者其他东西,或者在其他情况下,你可能想避免某些配置文件被软件自动修改。使用chown
和chmod
命令修改文件的归属关系或者权限位是处理这种情况的一个解决方法,但这并不完美,因为这样无法避免有root权限的操作。这时chattr
就派上用场了。
chattr
是一个可以设置或取消文件的标志位的Linux命令,它和标准的文件权限(读、写、执行)是分离的。与此相关的另一个命令是lsattr
,它可以显示文件的哪些标志位被设置上了。最初只有EXT文件系统(EXT2/3/4)支持chattr
和lsattr
所管理的标志位,但现在很多其他的原生的Linux文件系统都支持了,比如XFS、Btrfs、ReiserFS等等。
在这个教程,我会示范如何使用chattr来让Linux中的文件不可变更。
chattr
和lsattr
命令是e2fsprogs包的一部分,它在所有现代Linux发行版都预装了。
下面是chattr
的基本语法。
$chattr [-RVf] [操作符][标志位] 文件...
其中操作符可以是“+”(把选定的标志位添加到标志位列表)、“-”(从标志位列表中移除选定的标志位)、或者“=”(强制使用选定的标志位)。
下面是一些可用的标志位。
- a: 只能以追加模式打开。
- A: 不能更新atime(文件访问时间)。
- c: 当被写入磁盘时被自动压缩。
- C: 关掉“写时复制”。
- i: 不可变更。
- s: 通过自动归零来安全删除。(LCTT 译注:一般情况文件被删后内容不会被修改,改标志位会使得文件被删后原有内容被“0”取代)
“不可变更”标志位
为了让一个文件不可变更,你需要按照如下方法为这个文件添加“不可变更”标识位。例如对/etc/passwd文件做写保护
$sudo chattr +i /etc/passwd
注意设置或取消一个文件的“不可变更”标志位是需要root用户权限的。现在检查该文件“不可变更”标志位是否被添加上了。
$ lsattr /etc/passwd
一旦文件被设置为不可变更,任何用户都将无法修改该文件。即使是root用户也不可以修改、删除、覆盖、移动或者重命名这个文件。如果你想再次修改这个文件,需要先把“不可变更”标志位取消了。
用如下命令取消“不可变更”标志位:
$ sudo chattr -i /etc/passwd
如果你想让一个目录(比如/etc)连同它下边的所有内容不可变更,使用“-R”选项:
$ sudo chattr -R +i /etc
"只可追加"标志位
另一个有用的的标志位是“只可追加”,它只允许文件内容被追加的方式修改。你不能覆盖或者删除一个设置了“只可追加”标志位的文件。这个标志位在你想避免日志文件被意外清理掉的情况很有用。
和“不可变更”标志位类似,你可以使用如下命令让文件变成“只可追加”模式:
$ sudo chattr +a /var/log/syslog
注意当你复制一个“不可变更”或者“只可追加”的文件到其他地方后,新文件不会保留这些标志位!
结论
在这个教程中,我展示了如何使用chattr
和lsattr
命令来管理额外的文件标志位,来避免文件被篡改(意外或者其他情况)的方法。注意你不能将chattr
作为一个安全措施,因为“不可变更”标志位可以很容易被取消掉。解决这个问题的一个可能的方式是限制chattr
命令自身的可用性,或者去掉CAPLINUXIMMUTABLE内核权能标志。关于chattr
以及可用的标志位的更多细节,请参考它的man手册。
3 wget命令
一个例子:
$ wget -qO - http://packages.elasticsearch.org/GPG-KEY-elasticsearch > key_file
3.1 wget 命令格式
wget [参数] [URL地址]
3.2 命令功能
用于从网络上下载资源,没有指定目录,下载资源会默认为当前目录
1)支持续传功能
2)同时支持FTP和HTTP下载方式
3)支持代理服务器
3.3 例子中命令的解析
参数:
-q: --quit Turn off Wget's output
-O: -O file, --output-document=file 下载的文档会被写入O后面的指定的file文件中
注:当file文件用"-" 表示时,文档将被打印到标准输出
3.4 参考资料
1)man 手册
4 ps 命令
ps是linux中最基础的浏览系统中进程的命令。能列出系统中运行的进程,包括进程号、命令、CPU使用量、内存使用量等。
4.1 列出所有运行中/激活进程
$ ps -a
4.2 列出需要的进程
$ ps -ef |grep “program-name”
4.3 显示进程详细信息,包括无终端的(x)和针对用户(u)的进程:如USER,PID,%CPU,%MEM等
$ ps -aux
5 pstree
linux中,每一个进程都是由其父进程创建的。此命令以可视化的方式显示进程,通过显示进程的树状图来展示进程关系。如果指定了pid,那么树的根就是该pid,不然将会是init(pid:1)。
6 top
top命令可以监视系统中不同的进程所使用的资源。它提供实时的系统状态信息。显示进程的数据包括PID、进程属主、优先级、%CPU、%memory等。可以使用这些显示指示出资源使用量。
7 kill
这个命令用于发送信号来结束进程。如果一个进程没有响应杀死命令,这也许就需要强制杀死,使用-9参数来执行。注意,使用强制杀死的时候一定要小心,因为进程没有时机清理现场,也许写入文件没有完成。如果不知道进程PID或者打算用名字杀死进程时,killall就派上用场。
$ kill <pid> $ kill -9 <pid> $ killall -9 "pname"
8 w
w提供当前登陆的用户及其正在执行的进程的信息。显示信息头包含信息,如当前时间、系统运行时长、登陆用户总数、过去的1,5,15分钟内的负载均衡数。
9 pgrep
pgrep的意思是“进程号全局正则匹配输出”。该命令扫描当前运行进程,然后按照命令匹配条件列出匹配结果到标准输出。
pgrep -u mint sh 这个命令显示用户为mint和进程名为sh的进程ID。
10 /proc/meminfo
查看RAM使用情况最简单的方法时通过/proc/meminfo.这个动态更新的虚拟文件实际上时许多其他内存相关工具(如:free/ps/top)等的组合显示.
进程的内存使用信息也可以通过/proc/<pid>/statm 和/proc/<pid>/status来查看
$ cat /proc/meminfo
11 /proc/cpuinfo
查看cpu信息
$ cat /proc/cpuinfo
12 free
free命令可以快速查看内存使用情况的方法,它时对/proc/meminfo收集信息的一个概述
$ free -h
额外补充知识:
proc文件系统:访问系统内核信息
/proc不是一个真实的文件系统,不占用外存空间,只是以文件的方式为访问linux内核数据提供接口。用户和应用程序可以通过查看/proc目录中的相关文件得到系统的运行信息,并可以改变内核的某些参数。由于系统的信息总是动态变化的,所以用户或应用程序读取proc文件时所获得的数据也是瞬时的。
/proc目录下的文件不是真正意义上的文件,关闭系统后,改目录中的文件不再存在。
在/proc目录中,每一个以数字命名的目录对应系统中运行的一个进程,数字即为进程的PID号。数字目录存放了该进程的运行信息,可以通过相应的命令进行查询。
// 查看cpu信息 # cat /proc/cpuinfo // 查看当前系统使用的中断号 # cat /proc/interrupts // 查看系统运行的时间 # cat /proc/uptime // 产看当前系统支持的文件系统类型 # cat /proc/filesystems