当前位置: 首页 > news >正文

Shell命令集锦(一)

一、知识点

1、获取当前目录名称

    basename  命令获取

#!/bin/bashCURRENT=`pwd`BASENAME=`basename "$CURRENT"`echo "$BASENAME"exit;

 2、source 

  • source(或等效的 . 命令)会直接在当前 Shell 会话中执行指定的脚本文件(这里是 /etc/profile),而不是启动子进程。
  • 这意味着脚本中定义的 环境变量、别名、函数等会立即生效,无需重启终端或会话。

2.1 用法

1)直接在 shell 会话中 执行 source /etc/profile, 当前会话中加载生效 /etc/profile定义的全局变量

2)在一个脚本(test.sh)中通过 source xxx.sh 中加载xxx.sh 内容到 test.sh 脚本会话上,此时 test.sh 中可以直接调用 xxx.sh 上定义的方法或变量

xxx.sh 脚本内容如下

 function hello(){echo "hello"
} 

test.sh 脚本内容可以如下:

source xxx.shoutput=`hello`
echo $output

直接执行在 xxx.sh 脚本中的hello方法,打印输出内容

3、command

在 Shell 中,command 是一个内置命令,主要用于 绕过 Shell 的别名和函数查找机制,直接调用系统命令或显示命令的真实路径。

3.1 基本用法

command [-pVv] [command_name] [args...]
  • command_name:要执行的命令或程序名称。
  • args:传递给命令的参数。

3.2 选项

选项作用
-p 使用系统的默认 $PATH(通常是 /bin:/usr/bin 等)搜索命令,忽略用户自定义路径。
-v 显示命令的路径或定义(如果是别名/函数)。
-V 更详细的描述(如命令类型:内置、别名、函数等)。

 

 3.3 实操

(1) 绕过别名或函数

若用户定义了别名或函数,command 会直接调用原始命令:

# 示例:假设 ls 被别名化为 'ls --color=auto'
alias ls='ls --color=auto'# 使用 command 调用原始 ls
command ls  # 无颜色输出

(2) 检查命令是否存在或获取路径

# 获取 python 的真实路径(忽略别名)
command -v python
# 输出示例:/usr/bin/python# 使用系统默认 PATH 搜索
command -pv python

(3) 强制调用系统命令

即使同名函数存在,也能执行系统命令:

# 定义了一个 echo 函数
echo() { printf "Hook: %s\n" "$*"; }# 调用系统原生的 echo
command echo "Hello"  # 输出: Hello

(4) 安全脚本编写

在脚本中避免因用户自定义别名/函数导致意外行为:

#!/bin/bash
# 确保使用系统的 rm,而非用户可能定义的别名
command rm -rf "$temp_dir"

3.4 与其他命令对比

命令特点
which 仅查找可执行文件路径,可能受 $PATH 影响,不处理 Shell 内置命令。
type Shell 内置,可识别别名/函数/内置命令(类似 command -V)。
whereis 查找二进制、源码和手册页,范围更广但不够精准。

 

4、realpath

realpath 是 Linux/Unix 系统中用于 解析文件或目录的绝对路径 的命令,它会去除路径中的符号链接(软链接)、相对路径(如 . 或 ..)等,返回标准化后的完整路径。

4.1 基本用法

realpath [选项] [文件或目录...]

4.2 选项

选项作用
-e 或 --canonicalize-existing 仅解析已存在的路径(默认行为)。
-m 或 --canonicalize-missing 解析路径,即使文件/目录不存在。
-s 或 --no-symlinks 不解析符号链接(保留原始链接路径)。
-q 或 --quiet 静默模式,不显示错误信息(如路径不存在)。
--relative-to=DIR 返回相对于指定目录的路径(而非绝对路径)。
--relative-base=DIR 仅当路径在基准目录下时,返回相对路径,否则返回绝对路径。

4.3 实操

(1)获取文件的绝对路径

$ realpath file.txt
/home/user/file.txt

(2)解析符号链接的真实路径

$ ln -s /var/log logs  # 创建软链接
$ realpath logs
/var/log               # 返回链接指向的真实路径

(3)处理相对路径

$ realpath ../parent_dir
/home/user/parent_dir  # 解析父目录的绝对路径

(4)检查不存在的路径(使用 -m

$ realpath -m /nonexistent/path
/nonexistent/path      # 即使路径不存在也返回标准化结果

(5)返回相对路径

$ realpath --relative-to=/home/user /home/user/docs/file.txt
docs/file.txt          # 相对于指定目录的路径

(6)批量解析路径

$ realpath dir1/file1 dir2/file2  # 同时解析多个路径

(7)忽略符号链接

$ realpath -s /usr/bin/python  # 输出原始路径(如 /usr/bin/python3.8),不跟踪链接

 

4.4 与其他命令对比

命令特点
readlink -f 类似 realpath -e,但非 POSIX 标准,部分系统可能不支持。
pwd 仅显示当前目录的绝对路径,不处理参数。
cd + pwd 通过切换目录获取路径,但会改变环境(脚本中不推荐)。

4.5 注意事项

  • 依赖安装:部分旧系统可能未预装 realpath,需手动安装(如 coreutils 包)。
  • 符号链接循环:若路径中存在循环链接,realpath 会报错。
  • 空格处理:路径含空格时建议用引号包裹(如 realpath "my file.txt")。

 

http://www.sczhlp.com/news/11744/

相关文章:

  • shell数组详解
  • shell流程控制详解
  • 284、寄扬州韩绰判官
  • 保障家庭网络安全的3个实用技巧
  • 用Jmeter进行接口测试
  • 2025-08-14 开通博客园 随笔
  • Windows上安装和使用OpenSSH
  • 无聊!
  • shell函数用法
  • 解锁矢量图形新世界:Vector Magic 深度解析
  • shell变量详解
  • 0101_面向对象的设计原则
  • 重塑隐私边界,微算法科技(NASDAQ:MLGO)开发基于边缘计算的轻量级区块链身份隐私保护方案
  • 快速开发平台 WebBuilder 10.7发布
  • OCI编程基础篇(八) 更新和删除数据
  • 单文件组件CSS功能--:样式穿透deep()
  • 基于超像素和基于图论的图像分割方法
  • 实习经历
  • cookie与session的区别?
  • 2025年10款效能项目管理软件的5个关键问题,选错就完蛋!
  • AI的应用方向思考随笔
  • 8/14
  • docker安装oracle11g
  • 【CAPL】发送固定数的帧后恢复原状态
  • 【EI期刊征稿】第二届智能驾驶与智慧交通国际学术会议(IDST 2025)
  • 小鹅通课程下载工具,如何在电脑端下载视频到本地观看?
  • 鼠标拖动方式实现动态添加表格样式 - unique
  • Hall 定理 学习笔记
  • 2025-08-14 个人工具网站项目
  • 记一次反汇编获取某软件的密码过程