1、C/C++调用mac命令的方法
使用system()
函数或者创建子进程执行外部命令。
1)system() 函数
属性 | 描述 |
---|---|
原型 | int system(const char * command) |
功能 | 执行 shell(Linux/Unix系统) 命令, 参数字符串command为命令名 |
说明 | 在Linux/Unix系统中, system函数会调用fork函数产生子进程, 由子进程来执行command命令, 命令执行完后随即返回原调用的进程 |
头文件 | stdlib.h |
返回值 | 命令执行成功返回0 ,执行失败返回 -1 |
使用代码:
#include <stdlib.h> int main() { // 调用ls命令,列出当前目录下的文件和文件夹 system("ls"); return 0; }
2)创建子进程
在Unix-like系统中,可以使用 fork()
和 exec()
系列函数创建子进程来执行外部命令。相比 system()
更强的控制能力,但也更复杂。
使用代码:
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main() {
pid_t pid = fork();
if (pid == 0) {
// 子进程
execlp("ls", "ls", NULL);
} else {
// 父进程
wait(NULL);
}
return 0;
}
2、Mac的简单介绍以及
Mac是由苹果公司(Apple Inc.)开发的一系列个人电脑,运行着苹果公司专有的操作系统macOS(之前称为OS X)。Mac以其优雅的设计、直观的用户界面、优秀的构建质量和强大的性能而闻名。它广泛应用于创意和专业领域,如图形设计、视频编辑和音乐制作。
1)文件系统
路径 | 说明 |
---|---|
/ | 整个文件系统的起点,所有文件和文件夹的根目录。 |
/Applications | 存放系统级应用程序的目录。用户安装的大多数应用程序通常放在这里。 |
/Users | 包含所有用户的个人文件夹,每个用户的家目录通常位于此处(如/Users/username )。 |
~ 或 /Users/username | 当前用户的个人空间,包含文档、下载、音乐、图片等。 |
/System | 包含Mac OS的核心组件。普通用户通常没有权限修改此目录下的内容。 |
/Library | 存放系统级别的应用程序支持文件和库文件。 |
~/Library | 存放用户级别的应用程序支持文件和设置。通常在Finder中默认隐藏。 |
/tmp 或 /var/tmp | 用于存放临时文件的目录。系统可能会定期清理这些目录。 |
/bin , /sbin , /usr/bin , /usr/sbin | 包含大多数系统命令和程序的目录。 |
/dev | 包含系统中所有设备和驱动的特殊文件。 |
/Volumes | 在桌面上看到的所有硬盘都挂载在此目录下。例如,USBHD的移动硬盘在桌面上显示为硬盘图标,在终端中可通过ls /Volumes/USBHD 查看其内容。 |
/System/Library/Extensions | 驱动所在的位置。 |
/Users/用户名 | 用户文件夹的位置。 |
/Users/用户名/Desktop | 桌面的位置。 |
* | 文件通配符,用于匹配多个文件。 |
2)如何进入命令行操作模式
再图形界面下,用finder 打开 应用程序 》实用程序》终端
如果连图形界面都进不去,例如安错显示驱动,开机时按 F8,用-s
参数启动,然后输入命令 mount -uw /
3)获得权限
为了防止误操作破坏系统,再用户状态下时没有权限操作系统重要文件的,所以先要取得root权限
sudo -s
然后输入密码,输入密码时没有任何回显,连星号都没有,只管输完回车即可。
3、基本常用命令
1)列出文件
ls
是最基本的命令,用于列出目录内容。
命令 | 描述 |
---|---|
ls -a | 列出所有文件(包括隐藏文件)。 |
ls -l | 显示详细列表视图,包括文件的权限、所有者、大小和最后修改时间。 |
ls -lh | 以人类可读的格式显示文件大小。 |
ls -lt | 按时间排序,最近修改的文件先显示。 |
ls -R | 递归列出所有子目录。 |
2)拷贝文件
命令 | 描述 |
---|---|
cp [源文件] [目标位置] | 拷贝文件或目录到新位置。 |
cp -i [源文件] [目标位置] | 拷贝文件之前提示。当目标文件存在时,会询问是否覆盖。 |
cp -r [源目录] [目标位置] | 递归拷贝整个目录及其内容。 |
cp -a [源文件/目录] [目标位置] | 归档拷贝,保留原文件的所有属性,同时也递归拷贝。 |
cp -v [源文件] [目标位置] | 拷贝时显示详细信息。 |
cp -n [源文件] [目标位置] | 不覆盖目标位置已存在的文件。 |
3)删除文件
命令 | 描述 |
---|---|
rm [文件名] | 删除指定的文件。 |
rm -f [文件名] | 强制删除指定的文件,不会询问确认。 |
rm -r [目录名] | 递归删除指定目录及其下所有文件和子目录。 |
rm -rf [目录名] | 强制递归删除指定目录及其下所有文件和子目录,不会询问确认。 |
rm -i [文件名] | 删除前会提示用户确认。 |
rmdir [空目录名] | 删除空目录。如果目录不为空,该命令将失败。 |
注意:rm
命令在Mac OS中非常强大,使用时需特别小心,尤其是带有-r
和-f
选项的命令,因为它们可以删除大量的文件和目录,且不可恢复。
4)移动文件
命令 | 描述 |
---|---|
mv [原文件路径] [目标路径] | 移动文件或文件夹到新的位置。 |
mv [文件名1] [文件名2] [目标目录] | 同时移动多个文件到指定目录。 |
mv -i [原文件路径] [目标路径] | 在覆盖文件之前提示用户。 |
mv -n [原文件路径] [目标路径] | 不覆盖已存在的目标文件。 |
mv -v [原文件路径] [目标路径] | 移动文件时显示详细信息。 |
5)更改文件权限
命令 | 描述 |
---|---|
chmod [权限] [文件名] | 更改文件或目录的权限。 |
chmod 755 [文件名] | 设置文件或目录的权限为755 (即所有者可读写执行,其他人可读执行)。 |
chmod +x [文件名] | 为文件添加执行权限。 |
chmod -R 755 [目录名] | 递归地将一个目录及其所有子目录和文件的权限设置为755 。 |
chmod u=rwx,g=rx,o=r [文件名] | 设置文件或目录的权限, 其中所有者(u)有读写执行(rwx)权限, 组(g)有读执行(rx)权限, 其他人(o)有读(r)权限。 |
chmod go-w [文件名] | 移除组(g)和其他人(o)的写(w)权限。 |
6)更改文件属主
命令 | 描述 |
---|---|
sudo chown 用户名 文件名 | 将指定文件的所有权更改为指定用户。 |
sudo chown 用户名:用户组 文件名 | 同时更改文件的所有者和所属用户组。 |
sudo chown -R 用户名 目录名 | 递归地更改指定目录及其中所有文件的所有者。 |
sudo chown -v 用户名 文件名 | 更改文件所有者,并显示详细信息。 |
sudo chown --reference=参考文件 目标文件 | 将目标文件的所有者 和用户组更改为参考文件的所有者和用户组。 |
7)文本编辑
描述 | |
---|---|
nano | 一个简单的文本编辑器,适用于快速编辑文件。 |
vi 或 vim | 功能更强大的文本编辑器,具有多种编辑和自定义功能。 |
cat | 用于查看文件内容,也可用于连接多个文件。 |
more | 分页显示文本文件内容,适用于查看较长的文件。 |
less | 类似于more ,但提供更多的控制和导航功能。 |
head | 显示文件的开始部分(默认前10行)。 |
tail | 显示文件的结尾部分(默认最后10行),常用于查看日志文件。 |
grep | 在文件中搜索特定的文本字符串或模式。 |
sed | 流编辑器,用于对文本进行强大的处理,如替换、删除、插入等。 |
awk | 功能强大的文本处理工具,适用于模式匹配和数据重组。 |
touch | 创建一个新的空文件或更新现有文件的时间戳。 |
wc | 计算文件中的行数、单词数和字符数。 |
8)运行脚本命令
命令 | 描述 |
---|---|
./script.sh | 运行当前目录下名为script.sh 的脚本。 |
sh script.sh | 使用sh 命令解释器运行脚本。 |
bash script.sh | 使用bash 命令解释器运行脚本。 |
source script.sh | 在当前shell会话中执行脚本中的命令(相当于. )。 |
python script.py | 使用Python解释器运行Python脚本。 |
chmod +x script.sh | 使脚本文件script.sh 变为可执行文件。 |
nohup ./script.sh & | 使用nohup 运行脚本,并使其在后台持续运行。 |
./script.sh > output.txt | 运行脚本并将输出重定向到文件output.txt 。 |
./script.sh 2> error.txt | 运行脚本并将错误信息重定向到文件error.txt 。 |
./script.sh &> output.txt | 运行脚本并将标准输出 和错误输出都重定向到文件 output.txt 。 |
crontab -e | 编辑cron作业,定时运行脚本。 |
open -a Terminal script.sh | 使用Terminal应用程序打开并运行脚本。 |
9)用 Tab 键自动补齐命令
命令 | 描述 | 使用Tab键自动补齐示例 |
---|---|---|
cd | 更改当前目录 | 输入cd /Us 后按Tab键,自动补齐为cd /Users/ |
ls | 列出当前目录下的文件和文件夹 | 输入ls /A 后按Tab键,自动补齐为ls /Applications/ |
open | 打开文件或文件夹 | 输入open ~/De 后按Tab键,自动补齐为open ~/Desktop/ |
rm | 删除文件或文件夹 | 输入rm filen 后按Tab键,自动补齐为rm filename |
cp | 复制文件或文件夹 | 输入cp /path/source_fi 后按Tab键,自动补齐文件名 |
mv | 移动或重命名文件或文件夹 | 输入mv old_fi 后按Tab键,自动补齐为mv old_filename |
10)查看命令的详细帮助
命令 | 描述 |
---|---|
man [命令名] | 显示命令的手册页(manual page), 提供详细的命令信息和选项。 例如, man ls 会显示ls 命令的手册页。 |
[命令名] --help | 显示命令的帮助信息, 通常用于简单快速的命令说明。 例如, ls --help 会显示ls 命令的帮助信息。 |
info [命令名] | 显示命令的info 文档,这通常比 man 页更详细。例如, info ls 会显示ls 命令的info 文档。 |
apropos [关键词] | 搜索与关键词相关的命令和手册页。 例如, apropos copy 会列出与“copy”相关的命令。 |
whatis [命令名] | 显示简短的命令描述。 例如, whatis ls 会显示ls 命令的简短描述。 |
11) 目录操作
命令 | 描述 |
---|---|
cd [目录路径] | 更改当前工作目录到指定路径。 |
mkdir [目录名] | 创建一个新目录。 |
rmdir [目录名] | 删除一个空目录。 |
rm -r [目录名] | 删除目录及其内容(包括非空目录)。 |
ls 或 ls [目录路径] | 列出当前目录或指定目录中的文件和子目录。 |
pwd | 显示当前工作目录的完整路径。 |
cp -R [源目录] [目标目录] | 复制目录及其所有内容到新位置。 |
mv [源目录] [目标目录] | 移动或重命名目录。 |
find [目录路径] -name [文件名] | 在指定目录及子目录下搜索文件。 |
du -sh [目录路径] | 显示指定目录所占用的磁盘空间。 |
open [目录路径] | 在Finder中打开指定目录。 |
12)文件操作
命令 | 描述 |
---|---|
cp [源文件] [目标位置] | 复制文件或目录。 |
mv [源文件] [目标位置] | 移动或重命名文件或目录。 |
rm [文件名] | 删除文件。 |
rm -r [目录名] | 递归删除目录及其内容。 |
mkdir [目录名] | 创建新目录。 |
rmdir [目录名] | 删除空目录。 |
touch [文件名] | 创建一个新的空文件或更新现有文件的时间戳。 |
cat [文件名] | 显示文件内容。 |
less [文件名] | 分页显示文件内容。 |
grep [文本] [文件名] | 在文件中搜索指定的文本。 |
find [路径] -name [文件名] | 在指定路径下递归查找文件。 |
chmod [权限] [文件名] | 更改文件或目录的权限。 |
chown [用户][:组] [文件名] | 更改文件或目录的所有者和/或所属组。 |
ln -s [源文件] [链接名] | 创建指向源文件的符号链接。 |
df | 显示磁盘空间使用情况。 |
du [文件或目录名] | 显示文件或目录的磁盘使用量。 |
open [文件或目录名] | 打开文件或目录(类似于双击)。 |
open -a [应用程序名] [文件名] | 使用指定的应用程序打开文件。 |
diskutil list | 列出所有磁盘和分区。 |
diskutil verifyDisk [磁盘标识符] | 验证特定磁盘的文件系统。 |
diskutil repairDisk [磁盘标识符] | 修复特定磁盘的文件系统。 |
diskutil eraseDisk [格式] [名字] [磁盘标识符] | 格式化磁盘。 |
diskutil mountDisk [磁盘标识符] | 挂载一个未挂载的磁盘。 |
diskutil unmountDisk [磁盘标识符] | 卸载一个磁盘。 |
13)安全操作
命令 | 描述 | 例子 |
---|---|---|
passwd | 修改用户密码。 | passwd |
chmod | 改变文件或目录的权限。 | chmod ug+x filename |
umask | 定义创建文件的权限掩码。 | umask 027 |
chown | 改变文件或目录的属主。 | chown newowner filename |
chgrp | 改变文件或目录的所属组。 | chgrp staff filename |
xlock | 给终端上锁。 | xlock -remote |
14)编程操作
命令 | 描述 | 例子 |
---|---|---|
make | 维护可执行程序的最新版本。 | make |
touch | 更新文件的访问和修改时间。 | touch -m 05202400 filename |
dbx | 命令行界面调试工具。 | dbx a.out |
xde | 图形用户界面调试工具。 | xde a.out
|
15)进程操作
命令 | 描述 | 例子 |
---|---|---|
ps | 显示进程当前状态。 | ps u |
kill | 终止进程。 | kill -9 30142 |
nice | 改变待执行命令的优先级。 | nice cc -c *.c |
renice | 改变已运行进程的优先级。 | renice +20 32768 |
16)时间操作
命令 | 描述 | 例子 |
---|---|---|
date | 显示系统的当前日期和时间。 | date |
cal | 显示日历。 | cal 8 1996 |
time | 统计程序的执行时间。 | time a.out |
17)网络与通信操作
命令 | 描述 | 例子 |
---|---|---|
telnet | 远程登录。 | telnet hpc.sp.net.edu.cn |
rlogin | 远程登录。 | rlogin hostname -l username |
rsh | 在远程主机执行指定命令。 | rsh f01n03 date |
ftp | 在本地主机与远程主机之间传输文件。 | ftp ftp.sp.net.edu.cn |
rcp | 在本地主机与远程主机之间复制文件。 | rcp file1 host1:file2 |
ping | 给一个网络主机发送回应请求。 | ping hpc.sp.net.edu.cn |
mail | 阅读和发送电子邮件。 | mail |
write | 给另一用户发送报文。 | write username pts/1 |
mesg | 允许或拒绝接收报文。 | mesg n
|
18)Korn Shell 命令
命令 | 描述 | 例子 |
---|---|---|
history | 列出最近执行过的几条命令及编号。 | history |
alias | 给某个命令定义别名。 | alias del=rm -i |
unalias | 取消对某个别名的定义。 | unalias del |
19)其它命令
命令 | 描述 | 示例 |
---|---|---|
uname | 显示操作系统的有关信息。 | uname -a |
clear | 清除屏幕或窗口内容。 | clear |
env | 显示当前所有设置过的环境变量。 | env |
who | 列出当前登录的所有用户。 | who |
whoami | 显示当前正进行操作的用户名。 | whoami |
tty | 显示终端或伪终端的名称。 | tty |
stty | 显示或重置控制键定义。 | stty -a |
du | 查询磁盘使用情况。 | du -k subdir |
df | 显示文件系统的总空间和可用空间。 | df /tmp |
w | 显示当前系统活动的总信息。 | w
|