① 文件管理与重定向
linux的 文件系统分层结构标准 :FHS Filesystem Hierarchy Standard
参考文档: http://www.pathname.com/fhs/ 其中对每个文件目录有详细说明
/ :根目录,最顶级目录,也是 管理员的家目录
/boot:引导文件、内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此
/bin: 所有用户 使用的基本命令(二进制文件)
/sbin:管理类的基本命令 (仅由root执行)
/bin与/sbin:不能关联至独立分区,OS启动即会用到的程序
/etc 配置文件目录
/home/USERNAME:各个用户家目录,存放用户数据
/proc: 用于输出内核与进程信息相关的虚拟文件系统
/sys:用于输出当前系统上硬件设备相关信息虚拟文件系统
/usr: universal shared, read-only data (通用只读文件)
lib:32位使用
lib64:只存在64位系统
include: C程序的头文件(header files)
share:结构化独立的数据,例如doc, man等
local:第三方应用程序的安装位置
bin, sbin, lib, lib64, etc, share
/var: variable data files (可变数据)
cache: 应用程序缓存数据目录
lib: 应用程序状态信息数据
local:专用于为/usr/local下的应用程序存储可变数据
lock: 锁文件
log: 日志目录及文件
opt: 专用于为/opt下的应用程序存储可变数据
run: 运行中的进程相关数据,通常用于存储进程pid文件
spool: 应用程序数据池
tmp: 保存系统两次重启之间产生的临时数据
/dev:设备文件及特殊文件存储位置
/tmp:临时文件存储位置
/srv:系统上运行的服务用到的数据
/media:便携式移动设备挂载点(优盘)
/mnt:临时文件系统挂载点
/opt:第三方应用程序的安装位置
注意:CentOS 7 以后版本目录结构变化 (以下两者相同)
/bin 和 /usr/bin
/sbin 和 /usr/sbin
/lib 和/usr/lib
/lib64 和 /usr/lib64
范例:
二进制程序:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin
库文件: /lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64
配置文件: /etc, /etc/DIRECTORY, /usr/local/etc
帮助文件: /usr/share/man, /usr/share/doc, /usr/local/share/man, /usr/local/share/doc
用 ll 命令查看首字母:
(-) 普通文件
d 目录文件
b 块设备
c 字符设备
l 符号链接文件
p 管道文件pipe
s 套接字文件socket
每个shell和系统进程 都有一个当前的工作目录(current work directory,简称CWD)
显示当前shell CWD的绝对路径: 使用pwd命令 (printing working directory)
范例:
[图片上传失败...(image-8b8689-1596285623724)]
基名 :basename,只取文件名而不要路径
目录名 :dirname,只取路径,不要文件名
范例:
命令 cd : change directory 改变目录(可以使用绝对或相对路径)
选项:-P 切换至物理路径
切换至父目录 : cd ..
切换至当前用户家目录: cd
切换至上一个工作目录 : cd -
相关的环境变量:
PWD:当前目录路径
OLDPWD:上一次目录路径
文件相关信息:metadata(属性,元数据), data(数据内容)
每个文件有三个时间戳: (touch创建已存在的文件时,刷新3个时间戳)
access time 访问时间,atime,读取文件内容
modify time 修改时间,mtime,改变文件内容(数据)
change time 改变时间,ctime,元数据发生改变(属性)
mtime的改变必然引起ctime的改变
执行ll命令默认显示mtime
范例:
用来匹配符合条件的多个文件,方便批理管理文件
通配符采有特定的符号,表示特定的含义,此特符号称为 元字符
范例:只显示文件夹
别外还有在Linux系统中预定义的字符类:命令man 7 glob可以查看
使用以上通配符,需要双重中括号!!!!!!!!!!!!!!
{a..e} 与 [a - e] 排序内容不相同!!!
范例:
范例: 创建一个以昨天日期命名的.log文件
cp 命令格式:
默认cp=cp -i,提示是否覆盖
范例:
1、将/etc/目录下所有文件,备份到/data独立的子目录下,并要求子目录格式为 backupYYYY-mm-dd,备份过程可见
2、创建/data/rootdir目录,并复制/root下所有文件到该目录内,要求 保留原有权限
mv 命令可以实现文件或目录的 移动和改名 :
常用选项:
-i 交互式
-f 强制
-b 若目标存在,覆盖前先备份
利用 rename 可以 批量修改文件名 :
范例: (改名对象打不打引号都可以)
使用rm 命令可以删除文件
常用选项 :
-i 交互式
-f 强制删除
-r 递归,对目录进行操作时必须使用
--no-preserve-root 用来删除根目录
范例:删除特殊文件
rm虽然删除了文件,但是被删除的文件仍然 可能被恢复 ,
在安全要求较高的场景下,可以使用shred安全删除文件
补充技巧: 防止rm造成严重后果,定义别名进行备份 (修改配置文件永久有效)
配置文件目录:/root/.bashrc
显示目录树 tree
常见选项:
-d: 只显示目录
-L level: 指定显示的层级数目
-P pattern: 只显示由指定wild-card pattern匹配到的路径
常见选项:
-p: 存在于不报错,且可自动创建所需的各目录 (用于一次创建多层目录)
-v: 显示详细信息
-m MODE: 创建目录时直接 指定权限!!!!!!!!!!
rmdir 只能删除空目录 ,如果想删除非空目录,可以使用rm -r 命令递归删除目录树
常见选项:
-p 递归删除父空目录
-v 显示详细信息
练习
(1) 如何创建/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b, /testdir/dir1/y/a,
/testdir/dir1/y/b
(2) 如何创建/testdir/dir2/x, /testdir/dir2/y, /testdir/dir2/x/a, /testdir/dir2/x/b
(3) 如何创建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7
inode = (index node)
每个文件的属性信息,比如:文件的大小,时间,类型等,称为文件的 元数据
这些元数据存放在 inode表中
inode 表 中有很多条记录组成, 第一条记录保存元数据,包括以下信息:
inode number 节点号(身份证号)
文件类型
权限
UID
GID
链接数(指向这个文件名路径名称个数)
该文件的大小和不同的时间戳
指向磁盘上文件的数据块指针
有关文件的其他数据
一般情况下inode表会占用系统磁盘inode总量的1%
节点号表示 文件的唯一编号 !!!整个系统中 节点号是有限的
当节点号用尽时,即使还有储存空间,也会提示无剩余空间 !!!!!!
目录 是个特殊文件,目录的元数据保存了 目录中文件的列表及节点号的对应关系!!!
系统引用文件是 使用 inode号
实际用户是 通过文件名 来引用一个文件
目录是 目录下的文件名和文件inode号之间的映射
执行cp命令:
执行rm 命令:
执行mv命令:
硬链接本质上就 给一个文件起一个新的名称 ,实质是同一个文件
范例:对文件f1.log创建新的名称f1link.log,两者inode都是132
硬链接特性 :
目录的链接数至少为2,因为目录中的 . 即为自身
创建子目录会导致链接数增加!
一个符号链接指向另一个文件, 就像windows中的快捷方式
软链接特点:
关于源文件相对路径:只有跨分区创建软链接时才有此问题!
案例一:
提示空间不足 No space left on device,但是 df 查看磁盘空间剩余很多
案例二:
提示储存空间不足,删除无用的大文件后,空间并未释放,什么原因?如何解决?
读入数据:Input
输出数据:Output
打开的文件都有一个 fd : file descriptor (文件描述符)
Linux给程序提供 三种 I/O 设备
I/O重定向:将默认的输入,输出或错误 对应的设备进行修改,指向新的目标
STDOUT和STDERR可以被重定向到指定文件,而非默认的当前终端
支持的操作符号包括:
把STDOUT重定向到文件或其他终端
重定向到文件时,若文件不存在则创建,若文件存在则覆盖内容
再次重定向到同一文件,内容再次覆盖
若 > 符号之前不输入命令,则效果为生成空文件或清空目标文件
是迅速清空文件内容的一种方式
借助/dev/null也可实现同样的功能
磁盘空间不足时,大文件被占用不能停,而且rm删除无法立即腾出空间,应使用 > 或/dev/null >
把STDERR重定向到文件或其他终端
set - C 命令, 禁止将内容覆盖已有文件,但可追加 (此时>|可以强制覆盖)
set + C 命令,允许覆盖
强制覆盖
用 ( )或者{ }合并多个命令的out或err, 注意使用花括号的格式!!!
使用 < 来重定向标准输入:从文件中导入STDIN,代替当前终端的输入设备
使用 单行或多行重定向 来创建新文件,并输入指定内容
同时存在 < > ,优先进行 输入运算
只能对新文件进行!!!!!
只能对新文件进行!!!!!
使用 "<<终止词" 命令 把接下来输入的多行内容进行重定向,
直到终止词位置之前的所有文本都发送给STDIN
终止词 可以是任何一个或多个符号,
比如:!,@,$,EOF(End Of File),mage等, 其中EOF比较常用
易错点: tr命令实现的是 单个字符一一对应的转换关系!!!!
基本格式:
常见用途: 全局大小写转换
-d 删除 所有含有SET1的字符
-c 取字符集的补集,即 取反(一般与-d搭配使用)
-s 把 连续重复的单个字符 以单独一个字符表示,即 去重
管道(使用符号“|”表示) 用来连接多个命令
功能说明:
注意:STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现,格式如下
因此, 当不确定命令的输出结果,或者已知结果中存在error时 ,应该使用上述命令
范例:将 /home 里面的 文件打包 ,不生成文件,而是传送到 stdout,经过管道后,
将 tar -cvf - /home 传送给后面的 tar -xvf - , 最后的这个 - 表示 取前一个命令的 stdout
利用tee命令 可以既重定向到文件,又显示在屏幕
tee的功能:
基本用法
若后面不加命令2
② 入侵Linux系统后日志文件及入侵后日志如何清除
现在可以在网上公开获得的日志清除程序代码很粗糙,我曾经看到过最夸张的清日志的代码像这样:
rm -rf /var/log/lastlog ; rm -rf /var/log/telnetd ; rm -rf /var/run/utmp ; rm -rf /var/log/secure ; rm -rf /root/.ksh_history ; rm -rf /root/.bash_history ; rm -rf /root/.bash_logut ; rm -rf /var/log/wtmp ; rm -rf /etc/wtmp ; rm -rf /var/run/utmp ; rm -rf /etc/utmp ; rm -rf /var/log ; rm -rf /var/adm ; rm -rf /var/apache/log ; rm -rf /var/apache/logs ; rm -rf /usr/local/apache/log ; rm -rf /usr/local/apache/logs ; rm -rf /var/log/acct ; rm -rf /var/log/xferlog ; rm -rf /var/log/messages ; rm -rf /var/log/proftpd/xferlog.legacy ; rm -rf /var/log/proftpd.access_log ; rm -rf /var/log/proftpd.xferlog ; rm -rf /var/log/httpd/error_log ; rm -rf /var/log/httpd/access_log ; rm -rf /etc/httpd/logs/access_log ; rm -rf /etc/httpd/logs/error_log ;rm -rf /var/log/news/suck.notice ; rm -rf /var/spool/tmp ; rm -rf /var/spool/errors ; rm -rf /var/spool/logs ; rm -rf /var/spool/locks ; rm -rf /usr/local/www/logs/thttpd_log ; rm -rf /var/log/thttpd_log ; rm -rf /var/log/ncftpd/misclog.txt ; rm -rf /var/log/ncftpd.errs ; rm -rf /var/log/auth ; rm -rf /root/.bash_history ; touch /root/.bash_history ; history Cr
整个一rm集合,要是服务器跑了很长时间,积累了很多日志。你这样一删除,的,你帮他省事了,他也省事,一眼就看出有人进来了。
先不说其他,用rm删除就不可取,正确的删除文件做法是用shred
shred -n 31337 -z -u file_to_delete
这样多次擦除才够安全。
③ 文件删除命令还在运行linux
只是隐藏起来。
在大多数情况下,我们想要删除电脑文件,Linux下一般会使用删除键或者rm命令、将文件扔到垃圾箱。但是,这些方法并没把文件从我们的电脑里彻底删除,只是把文件隐藏起来,让用户看不见而已。假设某个文件含有机密或秘密的内容,比如安全系统的用户名和密码,如果攻击者拥有必要的专长和技能,就能轻松恢复已删除的文件,从而访问那些用户资料,这种场景造成的后果可想而知。本文中,我们将介绍多款命令行工具,帮你实现永久安全地删除Linux下的文件。1. shred 覆盖文件以隐藏内容,shred可覆盖文件以隐藏内容,另外还可以删除文件。这个命令包括的几个选项有:z , 最后一次覆盖添加0,以隐藏覆盖操作。v ,能够显示操作进度。u , 覆盖后截断并删除文件。n ,指定覆盖文件内容的次数(默认值是3次)。
④ 如何在Linux中删除超大的(100
通常,要在 Linux 终端删除一个文件[1],我们使用 rm 命令(删除文件)、shred 命令(安全删除文件)、wipe 命令(安全擦除文件坦氏拆)或者 secure-deletion 工核拆具包(一个安全文件删除工具集合)。
我们可以使用上述任意的工具来处理相对较小的文件。如果我们想要删除超大的文件/文件夹,比如大概 100-200GB,在删除文件(I/O 调度)所花费的时间以及 RAM 占用量方面,就没有你想的那么简单。
在本教程中,我们会解释如何在 Linux 中有效率并可靠地删除大文件/文件夹。
建议阅读: 5 个在 Linux 中清空或者删除大文件的方法[2]
我们的主要目标是使用一种不会在删除大文件时拖慢系统的技术,合理地占用 I/O。我们可以用 ionice 命令实现这个目标。
在Linux 中使用 ionice 命令删除超大(200GB)文件
ionice 是一个可以对另一个程序设置或获取 I/O 调度级别和优先级的有用程序。如果没有给出参数或者只有 -p 参数,那么 ionice 将会查询该进程的当前的 I/O 调度级别以及优先级。
如果我们给出命令名称,如 rm 命令,它将使用给定的参数运行此命令。要获取或设置调度参数,请指定[进程的 PID],如下:
# ionice -p PID
要指定名字或者调度的数字,使用(0 表示无、1 表示实时、2 表示尽力、3 表示空闲)下面的命令。
以下命令表示 rm 会属于让枣空闲 I/O 级别,并且只在其他进程不使用的时候使用 I/O:
---- Deleting Huge Files in Linux -----# ionice -c 3 rm /var/logs/syslog# ionice -c 3 rm -rf /var/log/apache
如果系统中没有很多空闲时间,那么我们希望使用尽力调度级别,并且使用低优先级:
# ionice -c 2 -n 6 rm /var/logs/syslog# ionice -c 2 -n 6 rm -rf /var/log/apache
注意:要使用安全的方法删除大文件,我们可以使用先前提到的 shred、wipe 以及 secure-deletion 工具包中的不同工具,而不是 rm 命令。
⑤ Linux中的rm命令
rm命令:
1、可以删除一个目录中的一个或多个文件或目录。
2、可以将某个目录及其下属的所有文件及其子目录均删除掉。
3、对于链接文件,只是删除整个链接文件,而原有文件保持不变。
语法选项:
-d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
-f:强制删除文件或目录;
-i:删除已有文件或目录之前先询问用户;
-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
-preserve-root:不对根目录进行递归操作;
-v:显示指令的详细执行过程。
(5)shredlinux扩展阅读:
rm同时删除多个文件命令:rm <filename1> <filename2>
要删除第一个字符为‘-’的文件 (例如‘-foo’),请使用以下其中一种方法:
rm-- -foo
rm./-foo
请注意,如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。如果想保证
该文件的内容无法还原,请考虑使用 shred。
删除所有rb语言程序档;删除前逐一询问确认 :
rm-i *.rb
将 Finished 子目录及子目录中所有档案删除 :
rm -r Finished
将 Finished 子目录及子目录中所有档案删除,并且不用--确认 :
rm -rf Finished
⑥ Linux中删除一个非空子目录/tmp,用什么命令
rm -rf 目录名。
rmdir功能:删除空目录。语法:rmdir [选项] dirname
说明:dirname表示目录名。该命令从一个目录中删除一个或多个子目录项。需要特别注意的是,一个目录被删除之前必须是空的。(注意,rm - r dir命令可代替rmdir,但是有很大危险性。)删除某目录时也必须具有对父目录的写权限。
命令中各选项的含义为:- p 递归删除目录dirname,当子目录删除后其父目录为空时,也一同被删除。如果整个路径被删除或者由于某种原因保留部分路径,则系统在标准输出上显示相应的信息。
(6)shredlinux扩展阅读:
通常见到的使用字符操作界面的人机接口,例如dos。我们说控制台命令,就是指通过字符界面输入的可以操作系统的命令,例如dos命令就是控制台命令。
要了解的是基于Linux操作系统的基本控制台命令。有一点一定要注意,和dos命令不同的是,Linux的命令(也包括文件名等等)对大小写是敏感的,也就是说,如果你输入的命令大小写不对的话,系统是不会做出你期望的响应的。