Unix系统:文件管理、安全与常用命令详解
1. Unix文件所有权与隐私问题
在Unix系统中,文件权限对于控制文件和目录的读写执行访问至关重要。通过谨慎选择文件权限,用户可以决定谁能够访问自己的文件。
-
umask命令
:这是访问控制的重要工具,它限制了后续创建的所有文件的权限。通常,用户会选择一个默认值,并将其设置在shell启动时读取的文件中,例如sh类shell的
$HOME/.profile
。在不同环境下,umask值的选择有所不同:
-
协作研究环境
:可以选择022的掩码值,去除组和其他用户的写访问权限。
-
学生环境
:077的掩码可能更合适,这样除了文件所有者(和root用户)外,其他用户都无法访问文件。
当需要非默认权限时,shell脚本应在开始且创建文件之前明确使用umask命令。但要注意,此设置不会影响命令行重定向的文件,因为脚本启动时这些文件已经打开。
-
chmod命令
:也是非常重要的工具。即使在允许所有人读取访问的宽松环境中,仍有一些文件和目录需要更严格的权限控制,如邮件文件、浏览器历史记录和缓存、私人通信、财务和人事数据、营销计划等。邮件客户端和浏览器通常会默认设置严格的权限,但对于使用文本编辑器创建的文件,用户可能需要自己使用chmod命令。如果非常注重隐私,可以先使用
touch
命令创建一个空文件,运行chmod设置权限后再进行编辑,这样可以避免在初始编辑时文件中的数据被他人看到。
-
系统管理员权限与法律问题
:系统管理员对用户的文件系统拥有完全访问权限,可以读取任何文件。虽然大多数系统管理员认为在未经文件所有者明确许可的情况下查看用户文件是不道德的,但一些组织认为所有计算机文件(包括电子邮件)都是其财产,并可能随时进行监控。这方面的法律问题尚不明确,且在世界各地有所不同。此外,网站可能有长期的备份,文件可能会根据法院命令从备份中恢复。
2. 网络环境下的数据安全
在联网计算机时代,用户的文件系统或操作系统可能会通过网络与自己分离。如果网络流量不安全,数据就会面临风险。
-
无线网络的脆弱性
:无线网络特别容易受到攻击,市面上有可以无声监听并利用当前一些无线加密协议弱点来解密加密流量的软件。远程访问电子邮件和交互式消息系统也可能不安全。如果仍在使用telnet或非匿名ftp连接计算机,应立即切换到安全的shell替代方案,如使用基于强公钥加密技术的安全shell软件。这种软件会先进行随机生成的长加密密钥的安全交换,然后再使用更简单快速的加密算法。在加密通道建立之前,不会传输用户数据,标准加密方法经过充分研究,被认为相当安全。攻击者只能看到数据包中看似随机的字节流,但源地址和目的地址仍然可见,可用于流量分析。安全shell还能为X Window System数据创建安全通道,保护输入按键和窗口输出。然而,如果攻击者处于用户和计算机之间,如在网吧、使用键盘嗅探器、无线网络或瘦客户端的情况下,即使是安全shell也无法提供保护。甚至显示器在墙壁上的不同反射也被证明可以让80米外的攻击者读取屏幕图像。
-
数据加密的必要性与注意事项
:如果希望存储几乎只有自己能读取的文件,就需要使用加密技术。由于各种政府出口规则将加密技术归类为武器,大多数Unix供应商通常不会在标准发行版中提供加密软件。在安装从网上找到或购买的加密软件之前,需要注意以下几点:
-
安全是一个过程
:安全不是产品,可阅读《Secrets and Lies: Digital Security in a Networked World》深入了解。
-
密钥丢失风险
:如果忘记加密密钥或员工离职未交接密钥,可能会丢失数据,因为好的加密方法通常在可用时间内无法破解。
-
密钥更换
:就像员工离职时更换门锁一样,必须认为前员工的加密密钥已泄露,需要使用新密钥对之前用不可信密钥保护的所有文件进行重新加密。
-
用户接受度
:如果加密文件的增强安全性给用户带来不便,他们可能会停止使用加密,就像复杂的门锁会让人把门撑开一样。
3. Unix文件扩展名约定
其他一些操作系统的文件名由基本名称、点和一到三个字符的文件类型或文件扩展名组成,这些扩展名用于指示文件内容所属的数据类别。Unix也有大量常见的文件扩展名,但Unix文件名不强制最多只有一个点。有些扩展名只是约定俗成(如大多数脚本语言),但编译器通常需要特定的扩展名,并使用基本名称(去掉扩展名后)来形成其他相关文件的名称。以下是一些常见的Unix文件扩展名:
| 扩展名 | 内容 |
| — | — |
| 1 | 第1节(用户命令)的手册页 |
| a | 库存档文件 |
| awk | awk语言源文件 |
| bz2 | 由bzip2压缩的文件 |
| c | C语言源文件 |
| cc、cpp、cxx | C++语言源文件 |
| eps、ps | PostScript页面描述语言源文件 |
| f | Fortran 77语言源文件 |
| gz | 由gzip压缩的文件 |
| f90 | Fortran 90/95/200x语言源文件 |
| h | C语言头文件 |
| html、htm | 超文本标记语言文件 |
| o | 对象文件(来自大多数编译型编程语言) |
| pdf | 便携式文档格式文件 |
| s | 汇编语言源文件(如编译器响应符号代码选项 -S 时的输出) |
| sh | Bourne家族shell脚本 |
| so | 共享对象库(在某些系统上称为动态加载库) |
| tar | 磁带存档文件(来自tar实用程序) |
| ,v | cvs和rcs历史文件 |
| z | 由pack压缩的文件(罕见) |
| Z | 由compress压缩的文件 |
与其他操作系统不同,Unix不使用特定的扩展名来表示可执行文件,文件权限起到了这个作用,并且Unix软件很少允许省略文件扩展名。此外,一些Unix文本编辑器允许用户创建临时备份文件,备份文件的命名有多种约定,如使用#和~作为前缀或后缀,或使用包含波浪号和数字的后缀(如.~1~、.~2~等)。其他系统使用文件生成编号来保留文件的多个版本,Unix则通过软件工具(如AT&T的Source Code Control System (sccs)、Revision Control System (rcs)和Concurrent Versions System (cvs))来更好地处理文件版本历史,这些工具可以保存与基础版本的差异以及更改原因的注释。
4. Unix文件系统的主要特点
Unix文件系统具有以下特点:
-
文件结构
:文件是零个或多个8位字节的流,除了在文本文件中使用换行符标记行边界外,没有其他额外结构。字节通常被解释为ASCII字符,但UTF - 8编码和Unicode字符集允许Unix文件系统、管道和网络通信优雅地发展,以支持来自世界各地书写系统的数百万个不同字符,而不会使大多数现有文件或软件失效。
-
文件属性
:文件具有时间戳、所有权和权限等属性,这提供了比一些其他桌面操作系统更高程度的访问控制和隐私保护,同时也减少了计算机病毒问题。
-
目录权限
:通过适当设置目录权限,可以在单个点控制整个目录树的访问。
-
文件大小和名称长度
:最大文件大小通常不会成为问题,新的文件系统设计进一步提高了最大限制。最大文件名和路径名长度比实际需求长得多。
-
目录结构
:清晰的分层目录结构,路径组件用斜杠分隔,结合
mount
命令,可以创建潜在无限大小的逻辑文件系统。
-
数据视图
:可以创建其他数据的类文件视图,以简化数据处理和人类使用。
-
文件名规则
:文件名可以使用除NUL或斜杠以外的任何字符,但出于可移植性、可读性和shell通配符的实际考虑,应使用的字符受到很大限制。文件名区分大小写(Mac OS X的非Unix HFS文件系统除外)。虽然文件系统不对文件名结构施加规则,但许多程序期望文件使用特定的点分隔扩展名,并在创建相关文件时替换扩展名。shell通过支持像
ch01.*
和
*.xml
这样的通配符模式来鼓励这种做法。
-
文件存储
:文件名存储在目录文件中,而文件的元数据(如时间戳、所有权、权限等)则单独存储在inode条目中。在同一文件系统内移动或重命名文件和目录速度很快,因为只需要更新包含它们的目录条目,而不会访问文件数据块本身。
-
文件链接
:硬链接和软链接允许为同一物理文件设置多个名称。硬链接仅限于单个物理文件系统,而软链接可以指向逻辑文件系统中的任何位置。
-
inode表
:inode表的大小在创建文件系统时固定,因此即使有足够的存储空间用于文件数据,文件系统也可能因inode耗尽而满。
Unix系统常用命令
现代Unix系统有数百个命令,以下是一些对Unix用户和开发者来说非常重要的命令:
-
Shells和内置命令
-
Shell类型
:
-
bash
:GNU项目的Bourne - Again Shell。
-
ksh
:Korn shell,根据操作系统可能是原始版本或克隆版本。
-
pdksh
:公共领域Korn shell。
-
sh
:原始Bourne shell,特别是在商业Unix系统上。
-
zsh
:Z - shell。
-
内置命令
:
-
.
:在当前shell中读取并执行给定文件。
-
break
:跳出for、select、until或while循环。
-
cd
:更改当前目录。
-
command
:绕过函数搜索,运行常规内置命令。
-
continue
:开始for、select、until或while循环的下一次迭代。
-
eval
:将给定文本作为shell命令进行评估。
-
exec
:无参数时更改shell的打开文件;有参数时用另一个程序替换shell。
-
exit
:退出shell脚本,可选择指定退出代码。
-
export
:将变量导出到后续程序的环境中。
-
false
:什么都不做,返回失败状态,用于shell循环。
-
getopts
:处理命令行选项。
-
read
:将输入行读入一个或多个shell变量。
-
readonly
:将变量标记为只读,不可更改。
-
return
:从shell函数返回一个值。
-
set
:打印shell变量和值,设置shell选项,设置命令行参数($1, $2, …)。
-
shift
:将命令行参数向下移动一个或多个位置。
-
test
:评估表达式,可能与字符串、数字或文件属性相关。
-
trap
:管理操作系统信号。
-
true
:什么都不做,返回成功状态,用于shell循环。
-
type
:指示命令的性质(关键字、内置、外部等)。
-
typeset
:声明变量并管理其类型和属性。
-
ulimit
:设置或显示每个进程的系统强加的各种限制。
-
unset
:删除shell变量和函数。
-
文本操作命令
-
基本文本处理
:
-
basename
:打印路径名的最后一个组件,可选择去除后缀,主要用于命令替换。
-
dirname
:打印路径名除最后一个组件外的所有部分,主要用于命令替换。
-
env
:操作命令的环境。
-
id
:打印用户和组ID及名称信息。
-
date
:打印当前日期和时间,可根据用户提供的格式字符串进行控制。
-
who
:打印登录用户列表。
-
stty
:操作当前终端设备的状态。
-
awk
:本身是一种优雅且有用的编程语言,也是许多大型shell脚本的重要组成部分。
-
cat
:连接文件。
-
cmp
:简单的文件比较程序。
-
cut
:截取选定的列或字段。
-
dd
:用于数据块处理和转换(如在ASCII和EBCDIC之间转换),特别适合制作设备文件的原始副本。不过,对于字符集转换,
iconv
是更好的程序。
-
文本搜索和格式化
:
-
echo
:将参数打印到标准输出。
-
egrep
:扩展grep,使用扩展正则表达式(EREs)进行匹配。
-
expand
:将制表符扩展为空格。
-
fgrep
:快速grep,使用不同算法匹配固定字符串,大多数Unix系统可以同时搜索多个固定字符串。
-
fmt
:简单的文本段落格式化工具。
-
grep
:源自原始ed行编辑器的
g/re/p
命令,使用基本正则表达式(BREs)进行匹配。
-
iconv
:通用字符编码转换工具。
-
join
:合并多个文件中匹配的记录。
-
less
:功能强大的交互式分页程序,一次显示一屏(或“一页”)信息,现在可从GNU项目获取,名称是对
more
程序的一种调侃。
-
more
:原始的BSD Unix交互式分页程序。
-
pr
:格式化文件以便在行式打印机上打印。
-
printf
:比
echo
更复杂的版本,可控制每个参数的打印方式。
-
sed
:基于原始ed行编辑器命令集的流编辑器。
-
sort
:对文本文件进行排序,命令行参数可控制排序键的指定和优先级。
-
spell
:批量拼写检查器,可能使用
aspell
或
ispell
并通过名为
spell
的shell脚本包装。
-
tee
:将标准输入复制到标准输出和一个或多个命名输出文件。
-
tr
:进行字符转换、删除或减少重复字符的运行。
-
unexpand
:将连续的空格转换为适当数量的制表符。
-
uniq
:去除或统计排序输入中的重复行。
-
wc
:统计行、单词、字符和/或字节数。
-
文件操作命令
-
文件压缩和解压缩
:
-
bzip2
、
bunzip2
:高质量的文件压缩和解压缩。
-
gzip
、
gunzip
:高质量的文件压缩和解压缩。
-
文件权限和属性更改
:
-
chgrp
:更改文件和目录的组。
-
chmod
:更改文件和目录的权限(模式)。
-
chown
:更改文件和目录的所有者。
-
文件检查和比较
:
-
cksum
:打印文件校验和,使用POSIX标准算法。
-
comm
:打印或省略两个排序文件中唯一或共同的行。
-
cp
:复制文件和目录。
-
df
:显示可用磁盘空间。
-
diff
:比较文件,显示差异。
-
du
:显示文件和目录的磁盘块使用情况。
-
file
:通过检查文件的开头部分来猜测文件中的数据类型。
-
find
:遍历一个或多个目录层次结构,查找符合指定条件的文件系统对象(文件、目录、特殊文件)。
Unix系统:文件管理、安全与常用命令详解
5. 命令使用示例与流程
为了更好地理解这些命令的使用,下面通过一些示例和流程来进一步说明。
5.1 umask命令设置示例
在协作研究环境中,设置umask为022,去除组和其他用户的写访问权限。以下是在bash shell中设置umask的流程:
graph TD;
A[打开终端] --> B[输入umask 022];
B --> C[验证umask设置];
C --> D[使用umask -S查看当前设置];
在终端中操作如下:
# 设置umask
umask 022
# 验证设置
umask -S
运行上述命令后,会显示当前umask的设置情况,确保设置成功。
5.2 chmod命令使用示例
假设我们有一个名为
test.txt
的文件,现在要将其权限设置为只有所有者有读写执行权限,组用户有读和执行权限,其他用户没有任何权限。可以使用以下命令:
chmod 750 test.txt
这里的750分别对应所有者、组用户和其他用户的权限,7表示读写执行(4+2+1),5表示读和执行(4+1),0表示没有任何权限。
5.3 文件压缩与解压缩示例
使用
gzip
和
gunzip
对文件进行压缩和解压缩。假设我们有一个名为
large_file.txt
的大文件,要对其进行压缩:
# 压缩文件
gzip large_file.txt
压缩后,原文件会被替换为
large_file.txt.gz
。如果需要解压缩该文件,可以使用
gunzip
命令:
# 解压缩文件
gunzip large_file.txt.gz
6. 命令之间的协作与应用场景
在实际使用中,这些命令通常会相互协作,以完成更复杂的任务。以下是一些常见的应用场景。
6.1 文本处理场景
假设我们有一个包含大量数据的文本文件
data.txt
,需要对其进行处理。首先,我们要查找包含特定关键字的行,然后对这些行进行排序,最后统计行数。可以使用以下命令组合:
# 查找包含关键字的行
grep "keyword" data.txt | sort | wc -l
这里,
grep
命令用于查找包含“keyword”的行,
sort
命令对这些行进行排序,
wc -l
命令统计排序后的行数。
6.2 文件备份与恢复场景
在进行文件备份时,我们可以使用
tar
命令将多个文件和目录打包成一个文件,然后使用
gzip
进行压缩。假设我们要备份
/home/user/documents
目录:
# 打包并压缩目录
tar -czvf documents_backup.tar.gz /home/user/documents
这里,
-c
表示创建新的归档文件,
-z
表示使用gzip进行压缩,
-v
表示显示详细信息,
-f
指定归档文件的名称。
如果需要恢复备份,可以使用以下命令:
# 解压缩并恢复目录
tar -xzvf documents_backup.tar.gz -C /home/user
这里,
-x
表示解压缩归档文件,
-C
指定解压缩的目标目录。
7. 总结
Unix系统的文件管理、安全和命令使用是一个复杂而强大的体系。通过合理设置文件权限、采用安全的数据加密措施以及熟练掌握各种常用命令,用户可以更好地管理自己的数据,提高工作效率,同时保障数据的安全性和隐私性。
在文件所有权和隐私方面,umask和chmod命令是控制文件访问权限的重要工具,用户应根据不同的环境和需求合理设置权限。在网络环境下,要注意无线网络的脆弱性,及时采用安全的shell替代方案和数据加密技术。
Unix文件系统具有丰富的特点,如清晰的分层目录结构、灵活的文件名规则和高效的文件存储方式。同时,Unix系统提供了大量的常用命令,涵盖了shell操作、文本处理、文件管理等多个方面。这些命令可以单独使用,也可以相互协作,以满足不同的应用场景。
希望通过本文的介绍,读者能够对Unix系统的文件管理、安全和常用命令有更深入的了解,并在实际使用中灵活运用这些知识。
超级会员免费看
8991

被折叠的 条评论
为什么被折叠?



