LinuxMac常用命令
目录
- 基础命令
- 文件和目录操作
- 文件解压、压缩
- 文件内容查看和编辑
- 文件夹软链
- 系统信息和管理
- 查看环境版本命令
- 其他命令(持续扩展)
- chmod 详解
- sed详解
- **sed 工作原理**
- **二、常用参数详解**
- **三、核心命令语法与标记**
- **1. 替换命令 `s`**
- **2. 地址定界**
- **3. 删除命令 `d`**
- **4. 插入/追加命令 `i` 和 `a`**
- **5. 读写文件命令 `r` 和 `w`**
- **6. 字符转换命令 `y`**
- **7. 多行处理命令**
- **高级用法与技巧**
- **1. 使用保持空间(Hold Space)**
- **2. 分支与标签**
- **3. 结合 Shell 变量**
- **综合示例**
- **示例 1:批量重命名文件(结合 `sed` 和 `mv`)**
- **示例 2:提取 JSON 中的特定字段**
- **示例 3:格式化日志文件**
基础命令
tips:
可以通过 man 命令来获取更多关于每个命令的详细信息,
例如 man ls / ls --help 会显示有关 ls 命令的帮助文档
文件和目录操作
ls:列出文件和目录。ls-l:以长格式显示文件/目录的详细信息,包括权限、所有者、大小、修改时间等 cd:切换当前工作目录,cd /path/to/folder:切换到指定文件夹 pwd:显示当前工作目录的路径。 mkdir:创建新目录。 cp:复制文件或目录。 mv:移动或重命名文件或目录。 rm:删除文件或目录。 touch:创建一个空文件或更新文件时间戳。 tree:以树状图形式递归列出指定目录下的所有子目录和文件 tree-L2显示当前目录下前两层级 tree-d仅列出目录结构,忽略文件 tree--du-h以易读格式(如 KB/MB)显示目录占用磁盘空间大小du-sh* du: 同样是用于计算文件或目录大小的命令。 -s: 表示汇总每个参数的大小,这里通常指每个子目录或文件。它只报告每个提供的目录的总大小,而不列出子目录或文件的细节。 -h: 表示以人类可读的格式(如 KB、MB、GB)显示大小。 *: 这是一个通配符,代表当前目录下的所有文件和子目录。du-ah--max-depth=2du: 这是用于计算文件或目录大小的命令。 -a: 表示显示所有文件和目录的大小。通常,du 只显示目录的大小,这个选项允许你查看每个文件的大小。 -h: 表示以人类可读的格式显示大小(如 KB、MB、GB)。 --max-depth=2: 限制命令输出的目录深度。这个例子中,命令将显示当前目录以及子目录下两级内的所有文件和目录的大小。free-h→ 查 运行内存(内存条),看程序能跑多少;df-h→ 查 磁盘总存储(硬盘),看能存多少文件;du-sh→ 查 文件夹占用磁盘大小; -h:显示 G/M 单位,看得懂; -s:只显示总大小,不啰嗦;文件解压、压缩
# 文件解压tar-zxvf文件名.tar.gz-C目标目录 -z:使用gzip算法解压(适用于 .tar.gz 或 .tgz 文件); -x:从压缩包中提取文件(解压); -v:显示解压过程的详细信息(可选,用于调试); -f:指定要操作的压缩文件名; -C:指定解压目录(可选,默认解压到当前目录)。# 文件压缩tar-czvf压缩包名.tar.gz 要压缩的文件或目录 -c:创建新的压缩包; -z:使用gzip算法压缩(生成 .tar.gz 或 .tgz 文件); 其他参数与解压相同(如-v显示过程,-f 指定文件名)文件内容查看和编辑
cat:显示文件内容tacfile1 从最后一行开始反向查看一个文件的内容more或 less:逐页浏览文件内容。head或 tail:显示文件的开头或结尾部分。 grep:在文件中搜索匹配的字符串。grep[选项]"搜索模式"文件名# 常用参数-i忽略大小写匹配grep-i"error"log.txt-v反向匹配,显示不包含模式的行grep-v"debug"log.txt-n显示匹配行的行号grep-n"warning"log.txt-r/-R递归搜索目录及其子目录grep-r"config"/etc/-w精确匹配整个单词(避免部分匹配)grep-w"port"config.txt-c统计匹配行数grep-c"success"report.csv-o仅显示匹配的字符串(不显示整行)grep-o"\d{3}-\d{4}"contacts.txtnano或 vi:使用文本编辑器编辑文件。find/-namefile1 从 ‘/’ 开始进入根文件系统搜索文件和目录(完整文件或文件名)find/home/map-namexxx 在当前目录(由./表示)及其子目录下查找所有文件名中包含"daily"的文件或目录find/-name"*daily*"cat*.txt>merged.txt 将当前目录的所有txt文件合并为一个merged.txt文件catguangzhou/*.txt|head-n300>merged_file.txt 将后200个txt文件合并为一个txt文件保存在上级目录中:ls-1*.txt|tail-n200|xargscat>../merged_200.txt文件夹软链
ln-sf/home/dir /home/work/dir ln: 这是用于创建硬链接和符号链接的命令。 -s: 这个选项告诉ln创建符号链接(软链接),而不是默认的硬链接。 -f: 这个选项用于强制符号链接的创建。如果目标位置已经有一个文件或链接,-f 会在不提示的情况下覆盖它。 /home/dir: 这是源路径。你希望创建一个指向这个文件或目录的符号链接。 /home/work/dir: 这是目标路径。在这里,符号链接将被创建。如果这个路径已经存在并且-f被使用,它将被覆盖。系统信息和管理
df-h:查看Linux磁盘空间内存情况 top:查看系统资源使用情况和进程列表。 ps:显示活动进程列表。ps-ef|greppython# 查看python相关的进程psaux|grep"[j]ava"# 显示所有 Java 进程(排除 grep 自身)kill:终止正在运行的进程。 ifconfig:显示和配置网络接口信息。 ping:向指定主机发送 ICMP 回显请求以测试网络连接。 ssh:通过 SSH 协议远程登录到另一台计算机。 sudo:以管理员权限执行命令。# 根据端口号查找进程运行文件目录lsof-i:8695# 查看端口占用情况,得到进程号pidps-f-p[进程pid]# 得到运行的CMD有详细信息# 查看进程的工作目录(绝对路径),11434替换成实际的进程pidls-l/proc/11434/cwd# 输出示例:/home/map/web_services# 查看端口占用情况netstat-tulnp|grep8884lsof-i:8884sudokill-9PID# 如:sudo kill -9 33607 ,强制kill -9# 快速查看机器的ip地址:ifconfig|grep"inet"ping机器名# 查看终端类型:bash、zsh等,对应的配置文件~/.bash_profile、~/.bashrc、~/.zshrcecho$SHELL# 查看cpu架构类型,输出x86_64表示x86架构(品牌Intel),arm86表示ARM架构uname-mlscpu# 其他基础命令echo# 输出文本或变量内容,支持文本打印、变量解析、转义字符处理等功能echo$HOME# 打印出home目录查看环境版本命令
# 列出所有已安装的 Python 解释器路径ls/usr/local/bin/python*# 用户手动安装的 Python 版本(如通过 Homebrew)ls/usr/bin/python*# 系统自带的 Python 版本python--version# 系统默认 Python(通常是 Python 2.x)python3--version# 用户安装的 Python 3.x# 查看mac安装的全部java,sdk版本/usr/libexec/java_home-V#其他命令(持续扩展)
# ssh 登陆机器sshuser@host?chmod 详解
chmod 是 “change mode” 的缩写,用于改变文件或目录的权限。
在 Unix 和类 Unix 系统(包括 macOS)中,每个文件都有一组权限,这些权限决定了哪些用户可以对文件执行哪些操作。权限通常分为三类:读取(r)、写入(w)和执行(x),它们可以分别应用于文件的所有者、文件所属的用户组以及其他所有用户。
chmod命令的基本语法如下:
chmod [选项] 模式 文件名
其中,选项是可选的,用于指定命令的行为;模式定义了新的权限设置;文件名是要修改权限的文件或目录的名称。
权限模式
权限模式可以通过符号(文字设定法)或数字(数字设定法)来指定。
- 符号模式:使用u(用户)、g(组)和o(其他)来指定权限的更改应用于哪些用户,以及使用+(添加)、-(删除)和=(设置)来指定权限的更改方式。权限可以是r(读)、w(写)和x(执行)。例如,chmod u+x filename会给文件的所有者添加执行权限。
- 数字模式:每个权限(读、写、执行)可以用一个数字表示:读是4,写是2,执行是1。因此,rwx权限对应的数字是7(4+2+1),rw-是6(4+2),r-x是5(4+1)等。你可以通过组合这些数字来设置特定的权限模式。例如,chmod 755 filename会设置文件的所有者有读、写和执行权限,而组用户和其他用户只有读和执行权限。
常用选项 - -R:递归地修改目录及其子目录下的所有文件和目录的权限。
- -v:显示命令执行过程中修改的文件或目录的权限信息。
- -c:只在修改了文件或目录的权限时才显示其详细信息。
- -f:不显示错误信息。
示例 - chmod +x script.sh:给script.sh文件添加执行权限。
- chmod u-w file.txt:移除file.txt文件所有者的写权限。
- chmod 755 directory:设置directory目录的权限为所有者有读、写和执行权限,组用户和其他用户有读和执行权限。
使用chmod时要小心,确保不会不小心修改了不应该修改的文件或目录的权限,这可能会导致安全问题或系统不稳定。在修改权限之前,最好先备份重要数据,并了解你正在修改的权限的含义和潜在影响。
ls -l 文件名 //查看文件权限
ls -l 目录名 //查看目录权限
//输出
-rw-r–r-- 1 用户名 组名 日期 时间 文件名
权限信息由10个字符组成,分为三组,每组三个字符:
- 第一组(三个字符)表示文件所有者的权限。
- 第二组(三个字符)表示文件所属组的成员的权限。
- 第三组(三个字符)表示其他用户的权限。
每个字符的含义如下: - r:读权限(read)
- w:写权限(write)
- x:执行权限(execute)
- -:没有相应权限
例如,在上面的输出中,-rw-r–r–表示: - 文件所有者有读(r)和写(w)权限,但没有执行(x)权限。
- 组用户和其他用户都只有读(r)权限,没有写(w)和执行(x)权限。
开头的-字符表示这是一个普通文件。如果是目录,这个字符会是d。
eg: -rwxr-xr-x 1 lishaolan01 staff 543 3 22 10:14 move_txt_files.sh- -rwxr-xr-x: 这是一个可执行文件(由开头的-表示)。权限设置允许所有者进行读、写和执行操作,组用户和其他用户只能读和执行。
- 1: 文件的硬链接数。
- lishaolan01: 文件的所有者。
- staff: 文件的组。
- 543: 文件的大小(以字节为单位)。
- 3 22 10:14: 最后的修改时间。
- move_txt_files.sh: 文件的名称。
sed详解
sed(Stream Editor)是一种非交互式的流式文本编辑器,基于行处理文本,支持正则表达式和脚本化操作。
sed 工作原理
处理流程:
- 读取:逐行读取输入流(文件或管道输入)到模式空间(Pattern Space,临时缓冲区)。
- 执行:对模式空间中的内容按脚本(命令)处理。
- 打印:默认将模式空间的内容输出到标准输出,除非使用
-n参数抑制。 - 循环:重复上述步骤,直到处理完所有行。
核心概念:
- 模式空间:当前处理行的临时工作区。
- 保持空间(Hold Space):用于临时存储数据的辅助缓冲区(通过
h,H,g,G等命令操作)。 - 地址定界:通过行号或正则表达式限定命令的作用范围。
二、常用参数详解
| 参数 | 功能 | 示例 |
|---|---|---|
-n | 抑制默认输出(需配合p,P等命令显式打印) | sed -n '1,5p' file.txt |
-e | 指定多个编辑命令 | sed -e 's/a/A/' -e 's/b/B/' file.txt |
-i | 直接修改文件内容(危险!建议先备份) | sed -i.bak 's/foo/bar/g' file.txt |
-r或-E | 启用扩展正则表达式(支持+,?,{}等) | sed -E 's/[0-9]+/NUM/g' file.txt |
-f | 从文件读取脚本命令 | sed -f script.sed file.txt |
三、核心命令语法与标记
1. 替换命令s
语法:[地址]s/正则表达式/替换内容/[标记]
标记:
g:全局替换(默认仅替换每行第一个匹配)。p:替换后打印该行(需与-n配合)。i或I:忽略大小写(GNU sed 支持)。数字:指定替换第 N 个匹配。
示例:
# 将每行第二个 "cat" 替换为 "dog"sed's/cat/dog/2'file.txt# 全局替换并打印修改过的行sed-n's/error/ERROR/gp'file.txt2. 地址定界
通过行号或正则表达式限定命令作用范围:
- 单行地址:
N(第 N 行)或/pattern/(匹配该模式的行)。 - 范围地址:
N,M(行号范围)或/start/,/end/(模式范围)。
示例:
# 删除第 5 到第 10 行sed'5,10d'file.txt# 替换从 "BEGIN" 到 "END" 之间的内容sed'/BEGIN/,/END/s/foo/bar/g'file.txt3. 删除命令d
语法:[地址]d
示例:
# 删除所有空行sed'/^$/d'file.txt# 删除匹配 "debug" 的行及其下一行sed'/debug/{N;d}'file.txt4. 插入/追加命令i和a
i:在匹配行前插入文本。a:在匹配行后追加文本。
示例:
# 在文件开头插入标题sed'1i\---\nTITLE\n---'file.txt# 在包含 "EOF" 的行后追加一行内容sed'/EOF/a\This is the end'file.txt5. 读写文件命令r和w
r:将外部文件内容读入并插入到匹配行后。w:将匹配行写入外部文件。
示例:
# 将 "footer.txt" 内容插入到文件末尾sed'$r footer.txt'file.txt# 将包含 "WARNING" 的行保存到新文件sed'/WARNING/w warnings.log'file.txt6. 字符转换命令y
语法:y/源字符集合/目标字符集合/(字符一一映射)。
示例:
# 将字母 a→z 转为大写sed'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'file.txt7. 多行处理命令
N:将下一行读入模式空间(合并两行)。D:删除模式空间的第一行。P:打印模式空间的第一行。
示例:
# 合并连续空行为单行空行sed'/^$/{N;/\n$/D}'file.txt高级用法与技巧
1. 使用保持空间(Hold Space)
h:将模式空间内容复制到保持空间。H:将模式空间内容追加到保持空间。g:将保持空间内容复制到模式空间。G:将保持空间内容追加到模式空间。
示例(反转文件行序):
sed'1!G;h;$!d'file.txt2. 分支与标签
:label:定义标签。b label:跳转到标签。t label:如果前一个替换命令成功,则跳转。
示例(跳过包含 “skip” 的行):
sed'/skip/b; s/foo/bar/'file.txt3. 结合 Shell 变量
在脚本中动态传递变量:
pattern="error"replacement="ERROR"sed"s/$pattern/$replacement/g"file.txt综合示例
示例 1:批量重命名文件(结合sed和mv)
# 将目录下所有 .txt 文件中的 "old" 替换为 "new"forfilein*.txt;domv"$file""$(echo$file|sed's/old/new/')"done示例 2:提取 JSON 中的特定字段
# 提取 "username" 字段的值echo'{"user": {"username": "john", "age": 30}}'|sed-nE's/.*"username": "([^"]+).*/\1/p'# 输出:john示例 3:格式化日志文件
# 将时间戳 "20231001" 转换为 "2023-10-01"sed-E's/([0-9]{4})([0-9]{2})([0-9]{2})/\1-\2-\3/g'log.txt