Shell命令——文件目录

本文深入讲解了Linux文件系统的结构特点,包括文件路径表示方法、常用文件管理命令的使用技巧及参数选项,还介绍了如何利用find命令进行高效文件搜索。

Linux只有一个文件系统树,不同的硬件设备可以挂载在不同目录下。
文件或目录有两种表示方式:
 - 绝对路径:从根目录”/”开始
 - 相对路径:从工作目录开始,使用”..”指向父目录,”.”指向当前目录。在大多数情况下”./”可以省略。
隐藏文件:以”.”开头的文件

命令作用
pwd显示当前工作目录
cd切换工作目录
ls列出目录的内容
file打印文件类型的说明
mkdir新建目录
cp复制文件或目录
mv移动文件或目录
rm删除文件或目录
ln创建链接
locate通过查找路径名数据库搜寻文件(updatedb命令用来更新数据库,一般一天更新一次)
find查找文件
xargs从标准输入中建立、执行命令
touch更改文件日期时间
stat显示文件或文件系统的详细信息

cd

cd:切换到主目录
cd -:切换到先前工作目录
cd ~user:切换到user的主目录

ls

参数可用文件或目录,可接多个参数。

短选项长选项含义
-a–all列出所有文件,包含隐藏文件和当前目录、父目录(默认不列出)
-d–directory列出目录本身而不是目录的内容,常和-l一起使用
-F–classify在所列项后加上类型指示符,如用”/”指示目录
-h–human-readable在用长格式”-l”列出时,使用可读格式显示大小。默认使用字节数。
-l使用长格式显示结果
-r–reverse以相反的顺序显示结果。默认使用字母升序显示。
-S以文件大小顺序显示结果。从大到小。文件夹大小是所有目录项的大小,一般是4K。
-t以修改时间顺序显示结果。从新到旧。

列出隐藏文件和隐藏目录:
ls -d .[!.]* 以点开头,第二个字符不是点。(书中的模式.[!.]?*会忽略”.a”的情况)
ls -d .* 会列出隐藏文件和目录以及本目录和父附录的所有内容

mkdir

mkdir directory…
可同时新建多个目录

cp

默认情况下不能拷贝目录
拷贝文件:cp file1 file2
拷贝目录:cp -a(-r) dir1 dir2
  - 拷贝dir1及dir1中的所有内容。
  - 若dir2存在,拷贝到dir2下,即dir2/dir1。
  - 若dir2不存在,新建dir2并复制dir1的内容到dir2下。
拷贝到指定目录下:cp item… directory
  - 拷贝文件到指定目录下,此时directory必须存在。
  - 若要拷贝目录,需指定-a或-r选项

选项长选项含义
-a–archive复制文件或目录的所有内容及属性,包含所有者信息和权限。默认情况下,不能拷贝目录,拷贝后使用拷贝者设定的的默认信息。
-i–interactive如果目标文件已存在,给出提示信息请求确认。默认情况下,直接覆盖文件。
-r–recursive复制目录
-u–update拷贝目录时,只复制目标目录中不存在或对应更新的文件。
-v–verbose显示提示信息

mv

移动文件或者目录,参数和cp类似,但移动目录时不需要-a(-r)选项。
移动文件或目录:mv item1 item2
  若移动文件,直接覆盖item2。
  若移动目录,item2存在时,item1移动到item2下,即item2/item1。
    若item2不存在,新建item2并移动item1的所有内容到item2,然后删除item1。
移动到指定目录下:mv item… directory
  移动文件或目录到指定目录,此时directory必须存在

选项长选项含义
-i–interactive如果目标文件或目录已存在,给出提示信息请求确认。默认情况下,直接覆盖文件。
-u–update移动目录时,只移动目标目录中不存在或对应更新的文件。
-v–verbose显示提示信息

rm

删除文件或者目录,和cp类似,删除目录时需要-r选项。当文件或目录不存在时,会给出提示信息:”No such file or directory”。
删除文件:rm file…
删除文件和目录:rm -r file… dir…

选项长选项含义
-i–interactive如果文件或目录存在,给出提示信息请求确认。默认情况下,直接删除文件。
-r–recursive删除目录及子目录。
-f–force文件不存在时不给出提示信息,也忽略-i选项的确认信息。
-v–verbose显示提示信息

ln

创建硬链接:ln file link
  不能引用不同磁盘分区的文件,不能引用目录
  建立不同的目录项,指向同一个数据inode块(ls -i查看inode编号)
  ls查看时,与目标文件没有区别
  删除时,只是删除硬链接,文件不变。当文件的所有硬链接都删除时,才会删除文件

创建软链接(符号链接):ln -s item link
  创建一个特殊文件,包含一个指向文件或目录的指针
  符号链接大小是指针字符串的大小
  ls查看时,是l类型,有”->”号指向目标文件或目录。目标不存在时(坏链接),一般会反色显示。
  item可以是绝对路径,也可以是相对路径
  大部分操作时以链接目标为对象,但rm命令是删除符号链接
  符号文件的权限都是”伪权限”,真实权限由符号链接指向的文件确定

find

find命令包含test选项、action选项和options选项,实现高级文件搜索。
操作符:-and[-a](默认)、-or[-o]、-not[-!]、括号()。-and和-or按照短路规则执行,括号需要用反斜杠()

test选项:
  文件类型(-type):f-普通文件、d-目录、l-符号链接、b-块设备文件、c-字符设备文件
  文件名(-name):-name “*.jpg”,一般用引号防止shell扩展
  大小(-size):+1M-超过1M,-1M-小于1M,1M-等于1M。支持的单位:b-512字节块(默认)、c-字节、w-两个字节、k-KB(1024字节),M-MB,G-GB

action选项:
  -delete:删除
  -ls
  -print:打印匹配项(默认操作),-print0可以识别文件名中的空格,配合xargs –null用来处理空格文件名。
  -quit
  -exec[-ok] command {} ; :自定义操作,{}表示当前路径,;做分隔符表示命令结束。{}和;需要用单引号防止shell识别。

option选项:
  -depth
  -maxdepth levels
  -mindepth levels
  -mount

### Shell编程中文件系统管理的课程设计报告示例 #### 1. 文件系统管理概述 文件系统是操作系统用于组织和存储数据的核心部分。在Linux系统中,Shell编程可以用来管理和操作文件系统。通过编写Shell脚本,用户可以实现文件的创建、删除、移动、复制以及权限设置等功能[^1]。 #### 2. 示例程序:文件系统备份工具 以下是一个简单的Shell脚本示例,用于备份指定目录下的文件到另一个位置。该脚本展示了如何使用Shell命令来管理文件系统。 ```bash #!/bin/bash # 定义源目录和目标目录 SOURCE_DIR="/path/to/source" BACKUP_DIR="/path/to/backup" # 检查目标目录是否存在,如果不存在则创建 if [ ! -d "$BACKUP_DIR" ]; then mkdir -p "$BACKUP_DIR" fi # 复制文件到目标目录 cp -r "$SOURCE_DIR"/* "$BACKUP_DIR"/ # 记录备份时间 DATE=$(date +%Y%m%d%H%M%S) echo "Backup completed at $DATE" >> "$BACKUP_DIR/backup.log" ``` 上述脚本的功能包括: - 检查目标目录是否存在,如果不存在则创建目标目录。 - 将源目录中的所有文件复制到目标目录。 - 记录备份完成的时间,并将信息写入日志文件。 #### 3. 提取的5条语句及其功能分析 1. `if [ ! -d "$BACKUP_DIR" ]; then` 检查目标目录是否已存在。如果不存在,则执行后续代码块[^2]。 2. `mkdir -p "$BACKUP_DIR"` 创建目标目录,即使父目录不存在也会自动创建。 3. `cp -r "$SOURCE_DIR"/* "$BACKUP_DIR"/` 使用`cp`命令递归地复制源目录中的所有文件和子目录到目标目录。 4. `DATE=$(date +%Y%m%d%H%M%S)` 获取当前日期和时间,并将其格式化为`YYYYMMDDHHMMSS`形式,便于记录备份时间。 5. `echo "Backup completed at $DATE" >> "$BACKUP_DIR/backup.log"` 将备份完成的时间信息追加到日志文件中,方便后续查看。 #### 4. 自定义小程序:文件清理工具 以下是一个自定义的小程序,用于清理指定目录下的旧文件(例如超过7天未修改的文件)。 ```bash #!/bin/bash # 定义需要清理的目录 CLEAN_DIR="/path/to/clean" # 查找并删除超过7天未修改的文件 find "$CLEAN_DIR" -type f -mtime +7 -exec rm -f {} \; # 记录清理操作的时间 CLEAN_DATE=$(date +%Y%m%d%H%M%S) echo "Files older than 7 days were cleaned at $CLEAN_DATE" >> "$CLEAN_DIR/clean.log" ``` 上述脚本的功能包括: - 使用`find`命令查找超过7天未修改的文件,并将其删除。 - 记录清理操作的时间,并将信息写入日志文件。 #### 5. 实验结果记录与分析 实验结果表明,通过Shell脚本可以高效地完成文件系统的管理任务。无论是备份还是清理操作,都可以通过简单的脚本实现自动化。此外,日志记录功能有助于跟踪操作历史,确保系统的可维护性[^3]。 #### 6. 实验心得 Shell编程在Linux系统中具有重要作用,尤其是在文件系统管理方面。通过编写脚本,不仅可以提高工作效率,还可以减少人为错误的发生。对于JavaEE和Python程序员来说,掌握Shell编程技能可以帮助他们更好地完成服务器维护和集群管理等任务。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值