linux命令-文件目录操作-1
大纲
| 命令 | 功能 | 常用参数示例 | 说明 |
|---|---|---|---|
ls | 列出目录 | ls -l(详情) ls -a(含隐藏文件) | 权限/时间/大小可视化 |
pwd | 显示当前目录 | pwd -P(显示物理路径) pwd -L(显示逻辑路径,默认) | 核心选项区分符号链接解析 |
cd | 切换目录 | cd ~(主目录) cd ..(上级目录) | 相对/绝对路径皆可 |
mkdir | 创建目录 | mkdir -p dir1/dir2(递归创建) | 避免目录不存在报错 |
rmdir | 删除空目录 | rmdir dir | 非空目录需用 rm -r |
touch | 创建空文件 | touch file.txt | 文件不存在则新建 |
cp | 复制文件/目录 | cp -r src_dir dst/(递归复制) | 目录复制必须加 -r |
rm | 删除文件/目录 | rm -rf dir/(强制递归删除) | 慎用!不可逆操作 |
| clear | 清屏 | clear 直接清理屏幕 | |
| alias | 别名 | alias ls=‘ls -l’ 设置临时别名 | |
| echo | 输出文本 | echo “hello world” | |
| history | 历史命令 | history | |
| tree | 显示目录树 | tree -L 1 | |
| nohup | 后台运行服务 | nohup java /xx/xx.jar 2>&1 & | |
| basename | 获取绝对路径的最后目录或文件 | ||
| dirname | 去掉绝对路径的最后目录或文件 |
ls
-
选项
选项 功能说明 使用示例与注意事项 ls -a显示所有文件(含隐藏文件) 隐藏文件以 .开头,如.config示例:ls -a ~ls -l显示文件详细信息(权限、所有者等) 示例: ls -l /var(显示/var目录详情)ls -R递归显示目录及子目录内容 示例: ls -R dir/(逐层列出dir下所有文件)ls -ld显示目录/符号链接本身信息(非内容) 示例: ls -ld /tmp(查看/tmp目录属性而非内部文件)ls -1每行仅显示一个文件/目录名 示例: ls -1(单列输出,适合脚本处理)ls -s显示文件占用块数 示例: ls -s→4 file.txt(表示占4个块)ls -S按文件大小降序排序 示例: ls -lS(大文件在前)ls -t按修改时间(mtime)排序(新→旧) 示例: ls -lt(最新修改文件排最前)ls -u配合 -t时,按访问时间(atime)排序示例: ls -ltu(按最近访问时间排序)ls -U按目录原始存储顺序显示(不排序) 示例: ls -U(保持文件系统原始顺序)ls -X按文件后缀名排序 示例: ls -lX(.txt、.sh等同后缀文件归类) -
示例
命令 功能说明 示例场景 ls -lSh带单位(KB/MB)显示大小 快速识别大文件 ls -lSR递归显示子目录并按大小排序 排查目录占用空间 ls -lS --color彩色区分文件类型 提升可读性
文件类型
| 文件类型 | 标识符 | 示例说明 | 创建/查看命令示例 |
|---|---|---|---|
| 普通文件 | - | 文本文件、图片等(如 /etc/hosts) | touch example.txt |
| 目录文件 | d | 文件夹(如 /home/user/Documents) | mkdir new_directory |
| 块设备文件 | B | 硬盘设备(如 /dev/sda) | ls -l /dev/sda |
| 字符设备文件 | C | 终端设备(如 /dev/tty1) | ls -l /dev/tty1 |
| 符号链接文件 | l | 软链接文件(如 /usr/bin/python→python3) | ln -s target link_name |
| 管道文件 | p | 进程间通信管道(如 mypipe) | mkfifo mypipe |
| 套接字文件 | s | 网络通信套接字(如 /var/run/mysqld.sock ) | nc -U /tmp/socket.sock |
pwd
假设 /home/docs 是指向 /data/documents 的符号链接
| 选项 | 功能描述 | 示例 |
|---|---|---|
| 无选项(默认) | 显示逻辑路径,保留符号链接 | 当前位于 /home/docs 时,输出 /home/docs |
pwd -L | 同默认行为,显式指定逻辑路径 | pwd -L 输出 /home/docs |
pwd -P | 显示物理路径,解析符号链接 | pwd -P 输出 /data/documents |
mkdir
| 参数 | 作用 | 示例命令 | 效果说明 |
|---|---|---|---|
| 无 | 创建单个目录 | mkdir test | 在当前目录生成 test 空目录 |
-p | 递归创建多级目录 | mkdir -p a/b/c | 自动创建 a、a/b、a/b/c 三级目录 |
-m | 创建时设置权限 | mkdir -m 755 docs | 创建 docs 目录并赋予 rwxr-xr-x 权限 |
-v | 显示创建过程信息 | mkdir -v newdir | 输出 created directory 'newdir' 提示 |
| 多目录名 | 同时创建多个并列目录 | mkdir dir1 dir2 dir3 | 一次性生成 dir1、dir2、dir3 |
rmdir
| 参数 | 作用 | 示例命令 | 效果 |
|---|---|---|---|
| 无参数 | 删除单个空目录 | rmdir dir | 删除空目录 dir |
-p | 递归删除多级空目录 | rmdir -p dir/dir1/dir2 | 若 dir2、dir1、dir 均为空,依次删除这三级目录 |
-v | 显示详细执行过程 | rmdir -v dir | 输出 rmdir: 正在删除目录 'dir' |
--ignore-fail-on-non-empty | 忽略非空目录删除失败的错误信息 | rmdir --ignore-fail-on-non-empty non_empty_dir | 尝试删除非空目录时不显示报错(但仍删除失败) |
touch
| 功能 | 命令格式 | 说明 |
|---|---|---|
| 创建单个空文件 | touch filename | 若文件不存在,创建空文件;若存在,更新时间戳。 |
| 创建多个空文件 | touch file1 file2 file3 | 空格分隔文件名,一次性创建多个文件。 |
| 避免创建新文件 | touch -c filename | 若文件不存在,不执行任何操作(防止误创建)。 |
cp
-
选项
选项 功能说明 简单示例 -i覆盖前提示确认(交互模式) cp -i file1.txt dir/若dir/file1.txt存在,会提示overwrite? (y/n)-n不覆盖已存在的文件(无提示) cp -n file1.txt dir/若dir/file1.txt存在,静默跳过不复制-r/-R递归复制目录及内部所有内容 cp -r source_dir/ dest_dir/复制source_dir下所有子目录和文件到dest_dir-a归档模式(保留所有属性) 等效于 -dR --preserve=allcp -a source/ dest/复制时保留权限、时间戳、符号链接等元数据-d保留符号链接(不复制原文件) 等效于 --no-dereference --preserve=linkscp -d symlink_file dest/复制符号链接本身而非链接指向的文件 -
关键选项
-
示例1- 目录归档备份
cp -a /var/www/ /backups/www_archive/ -
示例2 - 复制符号链接本身
~]# ln -sv /data/documents/ abc "abc" -> "/data/documents/"~]# cp -d abc /data/111 <-- 复制符号链接本身 ~]# ll /data/ lrwxrwxrwx 1 root root 16 10月 28 23:10 111 -> /data/documents/ -
示例3 - 覆盖文件
\cp -rf /目录/upload/* /tmp/upload -R # 递归覆盖复制 \cp -rf ${old_conf_path}/*.p* ${new_conf_path}/ # 覆盖配置文件
-
rm
-
示例1
# 这是直接不提示删,如果是直接/ , 那就是福报了, 等开除坐牢 rm -rf /xxx -
示例2
# 删除会给出提示,如果有一堆文件, 那敲y敲到吐. rm -r /xxx
alias
定义别名NAME,其相当于执行命令VALUE
alias NAME='VALUE'
-
临时生效
docs]# alias ll="ls -l" docs]# ll docs]# unalias ll <-- 撤销别名 -
永久生效
目录 生效范围 ~/.bashrc,等同于是 /root/.bashrc 或 /home/用户/.bashrc 仅对当前用户生效 /etc/bashrc 全用户
echo
-
选项
选项 说明 -n 不自动换行 -e 启用 \ 字符的解释功能 -
echo 单引号和双引号的核心区别
特性 单引号 ' '双引号 " "变量解析 不解析变量,原样输出(如 $name直接显示为$name)会解析变量值(如 $name替换为变量实际内容)特殊字符 所有字符均原样输出(包括转义字符如 \n)可解析部分转义字符(如 \n换行、\t制表符) -
示例1
~]# varName='xiong' ~]# echo "${varName}" # 变量会替换,弱引用 xiong ~]# echo '${varName}' # 单引号不会解析变量 ${varName} -
示例2:命令行扩展:$( ) 或 ``
~]# echo "hello my name's $(hostname)" hello my name's do3 # 替换的只是系统命令, 而不是自定义的变量 -
示例3:
括号扩展:{ }~]# echo {1..10}1 2 3 4 5 6 7 8 9 10~]# echo file{1..2}file1 file2~]# echo {a..z} a b c d e f g h i j k l m n o p q r s t u v w x y z
history
登录shell时,会读取命令历史文件中记录下的命令~/.bash_history
| 选项 | 功能描述 | 简单示例 |
|---|---|---|
-c | 清空当前会话的命令历史记录 | history -c → 清空所有历史记录 |
n | 显示最近的 n 条命令历史 | history 5 → 显示最近5条命令 |
-r | 从历史文件中读取命令并附加到当前历史列表 | history -r → 加载历史文件内容 |
-w | 将当前历史列表保存到指定文件 | history -w ~/log.txt → 保存到文件 |
-n | 读取历史文件中未加载的新命令到当前列表 | history -n → 加载未读命令 |
-s | 伪造命令:将参数作为一行命令加入历史列表(不执行) | history -s "ls -l" → 添加假记录 |
-p | 展开参数成多行显示(不保存到历史列表) | history -p "ls -l" → 预览展开效果 |
-d offset | 删除历史中指定序号 offset 的命令 | history -d 100 → 删除第100条命令 |
-a | 将会话中新执行的命令追加到历史文件 | history -a → 实时保存新增命令 |
tree
需要先安装
yum -y install tree或apt-get install tree
-
选项
选项 说明 简单示例命令 无选项 显示当前目录所有文件和子目录 tree-d仅显示目录(不显示文件) tree -d-L level限制目录显示层级深度 tree -L 2-P pattern仅显示匹配通配符的内容 tree -P "*.txt" -
示例1:
-P pattern:按通配符匹配~]# tree -P "*.txt" . ├── aa ├── a.txt # 仅列出当前目录全部以.txt后缀的文件 ├── bb
nohup
| 场景 | 命令示例 | 输出位置 |
|---|---|---|
| 默认后台运行 | nohup /opt/phpfpm/bin/phphotel.php & | 当前目录 nohup.out 文件 |
| 自定义输出文件 | nohup command > myout.file 2>&1 & | 输出与错误均重定向到 myout.file |
basename|dirname
-
basename
-
语法格式:
basename [OPTION] NAME [SUFFIX] -
核心功能: 提取文件名/目录名,可去后缀
-
典型示例:
[root@localhost bb]# ll drwxr-xr-x 2 root root 6 10月 29 20:37 cc [root@localhost bb]# basename /root/aa/bb/cc/ cc[root@localhost cc]# ls -l -rw-r--r-- 1 root root 0 10月 29 20:47 aaa [root@localhost cc]# basename /root/aa/bb/cc/aaa aaa
-
-
dirname
-
语法格式:
dirname NAME -
核心功能: 提取目录路径
-
典型示例:
# 不管是文件还是目录,都是去掉最后那级 [root@localhost cc]# dirname /root/aa/bb/cc/aaa /root/aa/bb/cc [root@localhost cc]# dirname /root/aa/bb/cc /root/aa/bb
-
-
示例
-
日志归档脚本
# 按日期拆分日志文件,需先获取原路径和文件名: log_file=/var/log/app.log current_date=$(date +%Y-%m-%d) file_name=$(basename $log_file) # 提取文件名:app.log archive_dir=/var/log/archive/$current_date cp $log_file $archive_dir/${file_name}_$current_date # 归档为 app.log_2025-10-29 -
脚本中路径拆分
# 结合使用可分离路径和文件名,例如备份文件时保留原目录结构: file_path=/usr/local/bin/script.sh dir_path=$(dirname $file_path) # 获取目录:/usr/local/bin base_name=$(basename $file_path) # 获取文件名:script.sh
-
