C/C++调用mac命令以及常用mac命令

在C/C++中调用Mac命令,通常是通过在代码中使用system()函数或者创建子进程执行外部命令。这些方法允许执行任何在命令行中可用的命令,包括Mac OS的常用命令。

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一个简单的文本编辑器,适用于快速编辑文件。
vivim功能更强大的文本编辑器,具有多种编辑和自定义功能。
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 [目录名]删除目录及其内容(包括非空目录)。
lsls [目录路径]列出当前目录或指定目录中的文件和子目录。
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
推荐阅读
cjavapy编程之路首页