mac终端只显示目录

mac终端只显示目录,第1张

使用pwd和ls查看当前目录及其内容只想获取当前目录的信息,可以键入pwd,不需要使用Nautilus,也可以使用teamviewer软件远程连接电脑,可以得到想要的一切。显示当前文件夹的路径。

终端是系统中一个应用程序,你可以直接在所有程序中找到它,点击打开就行。我比较喜欢使用聚焦搜索,输入「终端」或「Terminal」,看到终端被选中了按下回车即可。

快速打开终端

快速打开终端

基础知识

本节会从零开始,一步步讲解基础知识。若你只想查看实际命令,可以完全跳过这一部分。

终端启动后,就会进入一个问你要指令的状态,你只需要将指令输入在光标后,按下键盘回车,指令就会被执行。

那么什么是命令?命令就是你告诉电脑希望它做什么的那句话。若我现在希望告诉电脑说 hi,这句话的命令就是 say hi,就这么简单。

命令由三个部分组成,第一个部分是命令对象,在 say hi 这个命令中,「say」 是我们的命令对象,我们希望电脑说话;第二个部分是修饰命令对象的关键词,可有可无,若我希望电脑说话时慢一点,可以输入 say -r 500 hi,这里的 「-r 500」 则是修饰说话语速的关键词;第三部分是命令内容,这里填写希望电脑说的内容是「hi」这句话。

命令的组成

命令的组成

我们先来尝试让电脑将我们所打的话复述出来,这一步的指令是 echo "想说的话",将这句指令复制进终端并回车后,可以看到,它会将我们输入进去的文字在下一行重新打出来。

echo

echo

终端运行常常离不开对文件,文件夹的 *** 作。

当你需要使用终端对文件夹进行 *** 作时,终端需要你告诉它,你想要修改的文件在哪里,这时我们需要了解路径的概念。系统中的每一个文件都有一个存放位置,这一存放位置就称作路径。

终端启动后,它的默认路径在当前用户文件夹的根目录上,为了确定这一点,你可以输入 pwd 命令来查看当前路径。在下图中,输入命令后,终端告诉我当前路径是 /Users/我的名字。

pwd

pwd

路径的一般写法为 /文件夹名/文件夹名,但路径其实分为两种。一种叫相对路径,另一种叫绝对路径,它们两有什么区别呢?

我们从当前路径说起,当前路径指的是现在终端所处的位置,若你想改变当前路径,则可以输入 cd /其他文件夹。比如我希望系统将当前路径改为所有应用程序文件夹,则输入 cd /Applications,在下图中可以看到,Legolas 前出现了一个 Applications,表示当前路径已经在应用程序文件夹中。

cd /

cd /

刚刚提到的路径的一般写法 「/文件夹名/文件夹名」,它指的其实就是绝对路径,你必须指定它从根目录一直到达具体的文件夹。

与其相对的是相对路径,相对路径允许你告诉终端从现在开始,接下来应该怎么走。相对路径的书写方法实在绝对路径前加一个 。

若你现在已经处在应用程序文件夹中,想前往其中的一个名叫 Utilities 的子文件夹应该怎么办?

下图中,当前位置的绝对路径是 /Applications/Utilities,但由于我已经处于 /Applications 文件夹中,因此可以使用相对路径的写法 cd /Utilities,表示将当前路径转到 Utilities 文件夹。

cd /

cd /

说了这么多关于路径的写法,你可能已经头大了,懒得去这么写,那么有没有快速导入路径的方法呢?有,直接将待编辑文件或文件夹拖入终端中即可,它会自动把绝对路径提取出来,实际情况下常用的也是这种自动提取或手动复制的方法。

拖入快速提取路径

拖入快速提取路径

当你想要查看当前路径下有什么文件时,可以使用 ls 命令,它会列举当前路径下的全部文件,若你希查看进阶设定,比如列举当前路径下的全部文件并展开所有子文件夹,可以在 ls 命令后加上 -R 的识别符,新指令就变成了 ls -R,运行结果如下,可以看到我放在资源文件夹中的所有子文件都被显示出来了。

ls -R

ls -R

讲到这里,你也许会发现自己的终端已经满满当当的了,看着不舒服,这时可以使用 clear指令来清屏,运行结果如下。

clear

clear

以上讲的所有指令,都是无害指令,这里的无害指的是不会对系统文件造成破坏,但是还有一些指令,可以瞬间删掉你的整个系统,若你知道这些指令的用法那也没问题,但若是不小心根据网上的教程用了从而误删了东西就不好了。内核为了确保你知道某些指令的用法,要求你必须在这些有风险的指令前加输 sudo,这就是所谓的超级管理员指令,它会在你密码确认后,赋予 sudo 之后的命令最高权限,可以进行任何 *** 作。

比如我需要把电脑上的 Windows 分区彻底删除时,只需要输入下面这串代码,一瞬间整个磁盘分区就会被删除:

sudo diskutil eraseVolume free none diskx

关联阅读:如何彻底移除你的 Boot Camp 分区?

到这里为止,终端的非常基础教学就已经讲完了,这只是略过了终端海量指令中最常见的一小部分,毕竟终端控制的是整个系统的内核,其指令库非常之大,没有办法全部讲完。那么,当你在网上见到一个新命令的时候,怎么知道它该如何用?你可以使用 man 指令查看其用法,比如,当你见到了一个磁盘管理命令 diskutil,可以使用 man diskutil来查看这个磁盘管理命令的具体用法说明,想要退出这个说明按下键盘 Q 即可。

man

man

若你使用的是带有触控条的 Mac,可以点按触控条按钮进行快速更改终端颜色,添加书签等 *** 作。

触控栏更改颜色

触控栏更改颜色

若你想要完全自定义终端,可以在「终端 - 偏好设置 - 描述文件」中进行更改。

自定义

自定义

常见玩法

关闭崩溃报错:有时软件崩溃就已经很让人烦心了,重新打开后一遍遍d出的问题报告更是烦不胜烦。这时你可以使用 defaults write comappleCrashReporter DialogType none 命令关闭这个问题报告。若你希望恢复其显示,可以输入 defaults write comappleCrashReporter DialogType crashreport。

烦人的崩溃提醒

烦人的崩溃提醒

修改文件日期: 有时你可能需要修改文件创建或修改日期,这时可以使用 touch -t 199505090000 拖入文件命令。这句命令中的数字表示 1995 年 5 月 9 日 00:00 分,你可以根据实际需要修改。

任意修改文件日期

任意修改文件日期

不要进入休眠状态:当你临时不希望电脑进入休眠状态时,可以使用 caffeinate 命令让电脑时刻清醒。当你需要其恢复正常时,按下 ⌃Control - C 即可停止该命令。

caffeinate

caffeinate

程序假死需要强退:有时候程序假死了,强行退出也没用,这时可以使用 killall 命令。以微信为例,若想强退它,只需输入 killall WeChat 即可。

killall

killall

截图保存为 JPEG:Mac 的默认截图格式为 PNG,若你想让默认的截图保存类型为 JPEG,可以输入如下指令 defaults write comapplescreencapture type jpg,结果如下图所示,以后的截图都会变成 JPEG 格式。如果你希望撤销这条指令,输入 defaults write comapplescreencapture type png 即可。

运行命令后所有截图均为 JPEG

运行命令后所有截图均为 JPEG

关闭截图自动阴影: 若你使用 Mac 自带的截图,会发现每次的窗口截图均会自动添加阴影,当你需要后期处理这些时,这些阴影可能会对你造成困扰。你可以使用下面这串命令来关闭截图阴影:

defaults write comapplescreencapture disable-shadow -bool true; killall SystemUIServer

当你希望重新启动阴影时,可以输入:

defaults write comapplescreencapture disable-shadow -bool false; killall SystemUIServer

查看下方的截图,你就会发现它和本文的其他截图不同,没有阴影。

关闭阴影后的截图

关闭阴影后的截图

显示隐藏文件夹:在你跟着网络上的教程进行一些 *** 作时,难免会遇到让你寻找隐藏文件夹的情况,这时你可以使用:

defaults write comapplefinder AppleShowAllFiles -bool true; killall Finder

来显示所有隐藏文件夹,当你不需要再显示时,输入:

defaults write comapplefinder AppleShowAllFiles -bool false; killall Finder

即可恢复隐藏。查看下图,你会发现所有隐藏文件夹全部显示出来了。

显示隐藏文件夹

显示隐藏文件夹

整理程序栏:你也许会发现,底部的程序栏越用越乱,有时候内容多的半天找不到所需程序。这时你可以考虑为其加入几个隐藏的分界符将其归为几个区域,输入:

defaults write comappledock persistent-apps -array-add '{"tile-type"="spacer-tile";}'; killall Dock

即可添加一个空白分界符,需要几个重复运行几遍命令即可。当你不需要这个白分界符了,将它从程序栏拖走即可删除。

为程序栏加分界符

为程序栏加分界符

重置程序栏:当你想要重新整理底部程序栏时,有时候从默认状态开始整理也许是个好办法。这是你可以使用 defaults delete comappledock; killall Dock 命令将程序栏恢复为电脑刚刚激活时的状态。

恢复后的状态

恢复后的状态

打印机械感十足的文字:当你想要打出机械感十足的文字时,可以玩玩banner -w 80 legolasme这句命令,只需要将代码结尾处的文字替换为你想打印的字即可。

打印文字

打印文字

进阶教程

上面讲了不少指令,你也许会好奇,这些指令到底修改的是什么?可以修改什么?若我想改别的,应该去哪里找?

默认设置 defaults

上面这些 defaults 开始的指令,实际修改的是系统默认的 Plist 表单,这些表单管理着系统中全部程序的默认设置,上面所做的修改无非是改了某些程序的默认设置罢了。

若你想查看还有哪些可以修改,可以在访达中按下键盘 ⌥Option,点击「前往 - 资源库」,找到 Perference 文件夹,你会发现所有的 Plist 文件均在这里,你也可以根据便好手动修改。

Perference 文件夹

Perference 文件夹

文件格式转换 textutil

textutil 是一个系统自带的,用于处理文稿的命令,其中我最常用的功能是其下属功能 convert,这句指令允许你将任何文件,在以下文件格式中互相转换 txt, html, rtf, rtfd, doc, docx, wordml, odt, webarchive。

若你手头有一篇 DOCX 文件需要被转换成 TXT,则可以输入 textutil -convert txt 文件路径,这句代码中的 txt 处,可以替换为任何你需要转换到的文件格式,文件路径则可以采用拖拽文件到终端的方法自动填充。

textutil -convert

textutil -convert

磁盘处理 diskutil

磁盘处理也是常用的命令行 *** 作之一,因为其命令需要根据具体情况具体对待,所以我只简单介绍其中无风险的两个,下方列举的其余 *** 作均会直接处理磁盘内容,请务必清楚你在做什么,然后再输入命令。

若你的电脑采用的是 APFS 磁盘分区,则应使用 diskutil apfs 开头的命令;若你的电脑采用的是 HFS,HFS+ 磁盘分区,则应使用 diskutil 开头的命令;若你的电脑采用的是 coreStorage 磁盘分区,则应使用 diskutil cs开头的命令。

diskutil list 命令会将你的现有磁盘状况显示出来,如下图所示。

diskutil list

diskutil list

diskutil cs list 命令会将你的现有的 Core Storage 逻辑分区状况显示出来,如下图所示。

diskutil cs list

diskutil cs list

常用但有风险的命令 diskutil

查看分区上限:sudo diskutil resizeVolume /dev/disk1s3 limits

重置空间大小:sudo diskutil resizeVolume /dev/disk1s2 100GB

断开驱动器:sudo diskutil unmountDisk force /dev/disk1

彻底移除逻辑磁盘: diskutil unmount /Volumes/Macintosh\ HD

显示 GUID 分区结构: gpt -r show /dev/disk1

删除 EFI NO NAME:gpt remove -I 4 /dev/disk1

新增存储区块:gpt add -I 3 -b 1362424032 -s 1269536 -t 426F6F74-0000-11AA- AA11-00306543ECAC

新增分区:newfs_hfs -J -v “Recovery HD” /dev/disk0s3

物理 Core Storage 扩容: diskutil cs resizeDisk 11111111-2222-3333-4444-555555555555 980g

逻辑 Core Storage 扩容: diskutil cs resizeVolume 11111111-2222-3333-4444-555555555555 980g

自动安装 brew

Mac 有个很方便的包管理器,名叫 Homebrew,它允许你自动安装许多应用程序。Homebrew 不是 terminal 的自带内容,需要运行这串命令来进行安装:

/usr/bin/ruby -e "$(curl -fsSL >

如果你想推流一个文件夹里的所有视频,你可以使用通配符(wildcard)来匹配文件夹中的所有视频。例如,你可以使用 -i /path/to/folder/mp4 来匹配文件夹中所有的 MP4 视频文件。

如果你想推流多个视频,你可以使用 -i 参数多次指定视频文件的路径。例如,你可以使用 ffmpeg -re -i video1mp4 -i video2mp4 -vcodec libx264 -acodec aac -f flv rtmp://localhost:1935/rtmplive/home 来推流 video1mp4 和 video2mp4 这两个视频。

你也可以使用 -f concat 参数来将多个视频文件合并成一个输入源,然后使用 -i 参数指定合并后的视频文件。这样,你就可以使用单个命令推流多个视频。例如:

ffmpeg -f concat -safe 0 -i listtxt -c copy outputmp4

ffmpeg -re -i outputmp4 -vcodec libx264 -acodec aac -f flv rtmp://localhost:1935/rtmplive/home

其中,listtxt 是一个文本文件,其中包含了要合并的视频文件的列表。每一行的格式为 file '/path/to/videomp4'。例如:

file '/path/to/video1mp4'

file '/path/to/video2mp4'

file '/path/to/video3mp4'

这样,你就可以使用两条命令推流多个视频了。

看看这个,我昨天刚写的: import javaioBufferedOutputStream;

import javaioFile;

import javaioFileNotFoundException;

import javaioFileOutputStream;

import javaioFileReader;

import javaioIOException;

import javaioPrintWriter;

import javautilScanner;public class AddList {

private String filePath = "";

private String bakPath = "";

private String content = "";

Scanner sc = new Scanner(Systemin);

public String readFile(){

content = "";

if (isNull(filePath)) {

Systemoutprintln("文件存储路径:");

filePath = scnextLine();

}

File file = new File(filePath);

FileReader fr = null;

try {

if (fileexists()) {

fr = new FileReader(file);

char[] chars = new char[1024];

int n = 0;

while((n = frread(chars)) != -1){

String string = new String(chars, 0, n);

content = content + string;

}

} else {

Systemoutprintln("文件不存在");

}

} catch (Exception e) {

eprintStackTrace();

} finally {

if (fr != null) {

try {

frclose();

} catch (IOException e) {

eprintStackTrace();

}

}

}

return content;

}

public void writeFile(String path){

File file = new File(path);

FileOutputStream fos = null;

mkDirs(path);

try {

fos = new FileOutputStream(file);

BufferedOutputStream bos = new BufferedOutputStream(fos);

PrintWriter pw = new PrintWriter(bos, true);

pwprint(content);

pwflush();

} catch (FileNotFoundException e) {

eprintStackTrace();

} finally {

if (fos != null) {

try {

fosclose();

} catch (IOException e) {

eprintStackTrace();

}

}

}

}

public void writeFile(){

if (isNull(filePath)) {

Systemoutprintln("文件存储路径:");

filePath = scnextLine();

}

File file = new File(filePath);

FileOutputStream fos = null;

mkDirs(filePath);

try {

fos = new FileOutputStream(file);

BufferedOutputStream bos = new BufferedOutputStream(fos);

PrintWriter pw = new PrintWriter(bos, true);

pwprint(content);

pwflush();

} catch (FileNotFoundException e) {

eprintStackTrace();

} finally {

if (fos != null) {

try {

fosclose();

} catch (IOException e) {

eprintStackTrace();

}

}

}

}

public void mkDirs(String filepath){

if (filepathindexOf("\\") != -1) {

filepath = filepathreplaceAll("\\", "/");

}

int n = filepathindexOf("//");

String path = filepathsubstring(0, n) + "//";

filepath = filepathsubstring(filepathindexOf("//") + 1, filepathlength());

String[] files = filepathsplit("/");

for (int i = 0; i < fileslength - 1; i++) {

path = path + files[i];

File file = new File(path);

if (!fileexists()) {

filemkdir();

}

}

}

public void addImfor(){

Systemoutprintln("--------增加记录---------");

String name = "";

String tel = "";

String email = "";

content = readFile();

while(true){

Systemoutprintln("姓名:");

name = scnext();

Systemoutprintln("电话:");

tel = scnext();

Systemoutprintln("Email:");

email = scnext();

content = content + name + "<>" + tel + "<>" + email +"<==>";

Systemoutprintln("0、Exit 1、继续");

int i = scnextInt();

if (i == 0) {

break;

}

}

writeFile();

}

public void deleteImfor(){

Systemoutprintln("---------删除记录---------");

String name = "";

String[] imfors = null;

content = readFile();

while(true){

Systemoutprintln("你要删除的姓名是:");

name = scnext();

if (contentindexOf(name) != -1) {

imfors = contentsplit("<==>");

for (int i = 0; i < imforslength; i++) {

if (imfors[i]indexOf(name) != -1) {

imfors[i] = "";

}

}

content = "";

for (int i = 0; i < imforslength; i++) {

if (!isNull(imfors[i])) {

content = content + imfors[i] + "<==>";

}

}

writeFile();

Systemoutprintln("删除成功");

} else {

Systemoutprintln("此人不存在");

}

Systemoutprintln("0、Exit 1、继续");

int i = scnextInt();

if (i == 0) {

break;

}

}

}

public void viewAll(){

Systemoutprintln("----------显示所有------------");

content = readFile();

if (!isNull(content)) {

String[] imfors = contentsplit("<==>");

Systemoutprintln("姓名\t电话\tEmail");

for (int i = 0; i < imforslength; i++) {

String[] imfor = imfors[i]split("<>");

for (int j = 0; j < imforlength; j++) {

Systemoutprint(imfor[j] + "\t");

}

Systemoutprintln();

}

} else {

Systemoutprintln("暂时还没有记录");

}

}

public void queryImfor(){

Systemoutprintln("----------查找记录-----------");

content = readFile();

if (!isNull(content)) {

String result = "";

String[] imfors = null;

String[] imfor = null;

String name = "";

boolean bool = false;

while(true){

result = "";

Systemoutprintln("请输入关键字(按姓名查找):");

name = scnext();

bool = false;

if (contentindexOf(name) != -1) {

imfors = contentsplit("<==>");

for (int i = 0; i < imforslength; i++) {

if (imfors[i]indexOf(name) != -1) {

imfor = imfors[i]split("<>");

if (imfor[0]equals(name)) {

bool = true;

result = result + imfors[i] + "<==>";

}

}

}

if (bool) {

imfors = resultsplit("<==>");

Systemoutprintln("姓名\t电话\tEmail");

for (int i = 0; i < imforslength; i++) {

imfor = imfors[i]split("<>");

for (int j = 0; j < imforlength; j++) {

Systemoutprint(imfor[j] + "\t");

}

Systemoutprintln();

}

} else {

Systemoutprintln("无此人信息");

}

} else {

Systemoutprintln("无此人信息");

}

Systemoutprintln("0、Exit 1、继续");

int i = scnextInt();

if (i == 0) {

break;

}

}

} else {

Systemoutprintln("文件还没有记录");

}

}

public void copy(){

Systemoutprintln("----------备份-----------");

content = readFile();

if (isNull(bakPath)) {

Systemoutprintln("备份全路径:");

bakPath = scnext();

}

writeFile(bakPath);

Systemoutprintln("备份成功");

}

public boolean isNull(String string){

if (null == string || "" == string || 0 == stringlength()) {

return true;

} else {

return false;

}

}

public static void main(String[] args) {

AddList add = new AddList();

Scanner sc = new Scanner(Systemin);

int operater = 0;

while(true){

Systemoutprintln("选择功能:\n1、增加记录 2、删除记录 3、显示所有 4、查询记录 5、备份 6、退出");

operater = scnextInt();

if (1 == operater) {

addaddImfor();

} else if (2 == operater) {

adddeleteImfor();

} else if (3 == operater) {

addviewAll();

} else if (4 == operater) {

addqueryImfor();

} else if (5 == operater) {

addcopy();

} else if (6 == operater) {

Systemoutprintln("谢谢使用");

break;

}

}

}

}

查看q7的时间文件位置方法如下:

1、按CAR按钮,打开MMI系统,按STEPU按钮,在按旋转按钮右上方的按钮,左右旋转即可调整时间,调整好后按下保存。

2、双击脚本,会d出如下对话框,点击在终端中运行,d出:将q7文件拖拽到终端窗口后放开,这样终端窗口就会获取到文件完整的路径和名称。

模式:

当打开终端,第一行所见的就叫命令行提示符。我的是这样的:

命令行提示符,顾名思义就是提示在其后面输入命令。在你输入新的一行命令前,这个命令提示符都会出现。分别解析一下上边代表什么意思:

oscar 这是当前用户的名字。Linux是一个多用户的 *** 作系统,Windows也可以。不过Linux的多用户管理更方便。我们一般建议每个使用Linux系统的用户都创建一个属于自己的账户,便于隐私管理。

@ 这个符号我们应该不陌生,我们的电子邮件一般都是 name@domaincom 这样的不是吗。这个@就表示英语里的at,是“在里面,落户在的,在其中”的意思。@前面是用户名,后面是所在的域。

oscar-laptop 这是当前电脑/ *** 作系统的名字。上面说了在@后面的是一个域,所以 oscar@oscar-laptop 就表示oscar-laptop这台电脑的oscar这个用户。oscar-laptop这个名称在安装此Linux系统时可以任意指定。

: 这是分隔符,没有什么特别的涵义。

~ 这是当前所在目录的名字,会随着用户进入不同目录而改变。~表示当前用户的家目录,有点类似Windows系统的“我的文档”这个目录。

$ 指示你所具有的权限的字符。在Linux系统中有两种可能:

因此, oscar@oscar-laptop:~$ 的意思就是:

你目前是以oscar这个用户登录;你的电脑名称为oscar-laptop;你目前位于 ~ 目录下,就是你的用户家目录。你是普通用户,拥有有限的权限。

参数里可以包含多个参数,由空格隔开,也可以包含数字,字母,等等。可以说,参数没有固定的格式,但是一般来说还是遵循一定的规范的。

如果我们要一次加好几个短参数,可以用空格隔开,例如:

多个短参数也可以合并在一起,例如上面的命令等价于:

请注意:参数的字母的大小写是有区别的,大写的T和小写的t通常表示不同意思。

如果有多个长参数,是不能像多个短参数那样合并写的。而是只能以空格隔开,例如:

当然我们也可以组合使用短参数和长参数,例如:

有时候,同一个意义的参数有短参数和长参数两种形式,效果是一样的,可以任选哪一种。

有一些参数你还需要给它赋一个值才行。而且短参数和长参数的赋值的方式不尽相同。

例如,短参数赋值,通常是这样的:

表示把10赋值给p参数。

如果是长参数,则一般是这样赋值:

长参数的方式更加容易理解,但是不如短参数那么简洁。

正如我们说过的,参数的形式没有绝对的准则。我们上面给出的规则是一般的,有些命令的参数格式可能是我们没怎么见过的。

有些参数就不一样,而且取决于命令。例如对于 ls 这个命令,假如后面带了一个参数,这个参数是一个目录的路径名的话,那么就会列出此目录下的文件。

两种类型的文件

简单起见,我们把Linux下的文件分为两大类:

在一个文件系统中,我们总有一个被称为根目录的东西,这个根目录里包含了所有其他目录和文件。Linux中有且只有一个根目录,就是

是的,就是用一个斜杠表示。没有比根目录再高一阶的目录了,因为没有目录包含根目录,根目录就是Linux最顶层的目录。

Linux系统安装后,包含了很多的文件和目录(虽然其实都是文件),我们很容易迷失在“茫茫文海”中。

当然我们不可能一下子列出Linux中的所有文件,那不现实。但是我们可以向你展示如何在Linux的目录树中来回穿梭,你可以知道此刻你位于哪个目录下。就好比能看懂Linux这个很大的“地图”。

pwd 是英语Print Working Directory的缩写,表示“打印当前工作目录”。

which 命令:获取命令的可执行文件的位置,which命令用于显示一个命令的对应的可执行程序的位置。可能听起来有点拗口。

在Linux下,每一条命令其实对应了一个可执行程序。我们在终端中输入命令,再按回车的时候,其实就是执行了对应的那个程序。比如说,pwd命令对应的pwd程序就是存在于Linux中的。

which命令接受一个参数,也就是你想要知道其可执行程序位于哪里的那个命令。

我们来测试一下,就拿pwd命令来测试好了:

得到:

因此,pwd命令对应的pwd这个可执行程序位于/bin目录中。

我们也可以注意到Linux中的可执行程序和Windows中不太一样,在Windows中可执行程序一般以exe结尾,而Linux中一般是没有后缀名的。

Linux中的可执行程序也不是都位于相同目录的。我们可以来测试一下which命令本身对应的可执行程序位于哪里:

我们可以看到,which命令对应的可执行程序which并不位于/bin中,而是在/usr/bin中。

Ubuntu的终端默认是有颜色标注的,一般来说:

如果在你的终端里没有标明颜色,那么你可以加上参数 --color=auto 来开启颜色标注。如下:

如果你不需要颜色标注,那么可以用 --color=none 来关闭颜色标注。如下:

当然,为了避免每次都输入这么一串额外的参数,其实我们可以在一个配置文件里修改,使得永久显示颜色或不显示颜色。

在Linux,以点( )开头的文件是隐藏文件,不过这里不包括开头的两个 和 ,这两个的含义如下:

- (一个点)表示当前目录。在当前情况下,就是 /home/oscar 。

- (两个点)表示上一级目录。因为当前目录是/home/oscar,所以上一级目录就是 /home 。

我们有一个大写的参数 -A,它的作用和小写的-a几乎一样,唯一不同就是-A不列出 和 这两个文件。

-l 这个参数算是ls命令最常用的了。加上-l参数使得ls命令列出一个显示文件和目录的详细信息的列表。

当我们仅用ls -l时,列出的文件详细信息中,文件的大小是以字节为单位的。有时这不是太直观。我们可以再加一个参数-h,h是humain readable的缩写,表示“适合人类阅读的”。所以我们的命令变成了:

t是time的缩写。

du命令也是很有用的,因为它可以让我们知道文件和目录所占的空间大小。

虽然ls -l命令也可以显示文件和目录的大小,但是du命令统计的才是真正的文件大小。du命令会深入遍历每个目录的子目录,把所有文件的大小都做一个统计。

du是英语disk usage的缩写,表示“磁盘使用/占用”。

我们的du命令也可以使用参数。

cat命令和less命令:显示文件内容,这两个命令只能显示文件内容,并不能对文件内容进行修改。

一次性显示文件的所有内容,如果你想要在显示的文件内容上加上行号,那么你可以加上 -n 这个参数。

分页显示文件内容

head命令和tail命令:显示文件的开头和结尾。

显示文件开头,默认情况下,head会显示文件的头10行。我们也可以指定显示的行数,用 -n 这个参数:

就会显示文件的头5行。

显示文件结尾。默认情况下,tail会显示文件的尾10行。

我们也可以指定显示的行数,用 -n 这个参数:

就会显示文件的尾5行。

tail命令还可以配合 -f 参数来实时追踪文件的更新:

这样,就会检查文件是否有追加内容,如果有,就显示新增内容。

默认地,tail -f会每过1秒检查一下文件是否有新内容。你也可以指定间隔检查的秒数,用 -s 参数:

可以用快捷键 Ctrl + c 来终止tail -f 命令。

touch命令和mkdir命令:创建文件和目录

创建一个空白文件。事实上,Linux没有一个命令是专门用来创建一个空白文件的。touch命令其实一开始的设计初衷是修改文件的时间戳,就是可以修改文件的创建时间或修改时间,让电脑以为文件是在那个时候被修改或创建的。但是touch命令如果后面跟着的文件名是不存在的,那么它就会新建一个。

事实上,我们可以用touch命令同时创建多个文件:

如果我所要创建的文件的名字里有空格怎么办呢?

很简单,加上双引号:

创建一个目录。

mkdir也可以同时创建好几个目录:

如果我所要创建的目录的名字里有空格怎么办呢?

很简单,加上双引号:

我们还可以用 -p 参数来递归创建目录结构。

比如:

cp命令和mv命令:拷贝文件和移动文件

拷贝文件或目录

cp是英语copy的缩写,表示“拷贝”。所以,顾名思义,此命令用于拷贝。cp命令不仅可以拷贝单个文件,还可以拷贝多个文件,也可以拷贝目录。

复制文件到另一个目录只需要把cp命令的第二个参数换成目录名。

拷贝目录

要拷贝目录,只要在cp命令之后加上-R参数(注意是大写的R)。拷贝的时候,目录中的所有内容(子目录和文件)都会被拷贝。

使用通配符

号(星号)是很常用的正则表达式的符号,被称为“通配符”,

所以如果我们用如下命令:

那么就会把当前目录下所有txt文件拷贝到folder这个子目录当中。

又如:

那么就会把当前目录下凡是以ha开头的文件都拷贝到folder目录中。

移动文件

mv是英语move的缩写,表示“移动”。mv命令有两个功能:

用mv命令来移动目录很简单,不需要额外的参数,就跟移动文件一样:

当然,我们也可以使用通配符。

除了移动文件,mv命令还可以用于重命名文件。

事实上,Linux中没有一个专门的命令用于重命名文件。之所以mv命令可以重命名文件,其实还是归因于它的机制:移动文件。经过mv移动之后,原始文件变成了新的名字的文件,文件内容是不变的,这不就相当于重命名了吗?

以上命令会将new_file重命名为renamed_file。

删除文件和目录

rm命令可以删除一个文件,多个文件,目录,甚至你的整个Linux系统(如果你愿意的话)。

以上命令删除当前目录下的new_file_copy这个文件。

我们也可以同时删除多个文件,只要用空格隔开每个文件即可。例如:

保险起见,用rm命令删除文件时,可以加上 -i 参数,这样对于每一个要删除的文件,终端都会询问我们是否确定删除。i是英语inform的缩写,表示“告知,通知”。

有两种回答:

y:是英语yes的缩写,表示“是”。那么回车确认后,文件就删除了。

n:是英语no的缩写,表示“否”。那么回车确认后,文件不会删除。

如果在rm命令后加上-f参数,那么终端不会询问用户是否确定删除文件,不论如何,文件会立刻被强制删除。

f是英语force的缩写。

以上命令会强制删除file文件。

r是英语recursive的缩写,表示“递归的”。所以使用-r参数,可以使rm命令删除目录,并且递归删除其包含的子目录和文件。

这个命令也挺危险的,用得不好可能你的子目录和文件都没了。

以上命令会删除one这个目录,包括其子目录和文件。

其实,也存在一个命令

看着和 rm -r 挺像的。但是这个命令有个局限性:只能删除空的目录。

创建链接

事实上,Linux下有两种链接类型:

为了区分这两种链接类型的不同,我们首先来谈一谈如Linux这样的 *** 作系统中文件在硬盘上的存放。

文件在硬盘上存储时,大致来说(请注意我用了“大致来说”),每个文件有两部分:

文件名的列表是储存在硬盘的其他地方的,和文件内容分开存放,这样方便Linux管理。

注意:为什么我上面要用“大致说来”呢?因为此处我们简化了描述,其实每个文件有三部分:

我们这里简化地将文件分为两部分:文件名和文件内容。因为我们不想把事情复杂化,我们想要理解两种链接类型的区别,暂时只要知道这些就够了。

每个文件的文件内容被分配到一个标示号码,就是inode。因此每个文件名都绑定到它的文件内容(用inode标识)。原理如下图:

下面我们学习如何创建硬链接和软连接。

比之软链接,硬链接的使用几率小很多。但是我们还是要学习一下,毕竟可能会用到。

硬链接的原理:使链接的两个文件共享同样的文件内容,也就是同样的inode。

所以一旦文件1和文件2之间有了硬链接,那么你修改文件1或文件2,其实修改的是相同的一块内容。只不过我们可以用两个文件名来取到文件内容。

硬链接有一个缺陷:只能创建指向文件的硬链接,不能创建指向目录的硬链接。但是软链接可以指向文件或目录。当然了,事实上,通过一些参数的修改,也可以创建指向目录的硬链接,但是比较复杂,这里不再详述。所以对于目录的链接,我们一般都是用软链接。

硬链接原理图:

要创建硬链接,直接用ln命令,不加任何参数:

我们可以用ls -i命令查看一下(-i参数可以显示文件的inode)。对于硬链接来说,删除任意一方的文件,共同指向的文件内容并不会从硬盘上被删除。

我们用ls -l命令查看文件信息的时候,第二列的那个2,其实是表示拥有相同inode号的文件数。不难理解,因为它们指向相同的文件内容,所以共享一个inode。

这个第二列的数字,一般来说对于普通文件,都是1,因为不同文件inode不同嘛。对于目录来说,这第二列的数字标明目录内所含文件数目。

其实,软链接才是真正像我们在Windows下的快捷方式的,其原理很相似。

创建硬链接是ln不带任何参数,但是要创建软链接需要加上-s参数。s是symbolic(符号的)的缩写。

file2指向的不再是file1的文件内容(和硬链接不同),而是指向file1的文件名。

软链接原理图:

用ls -l命令查看一下,会发现形式和之前的硬链接不一样噢,file2的信息是这样的: file2->file1,表示file2指向file1。

而且file2前面的权限那里的第一个字母变成了l,表示link(链接)。之前硬链接的时候是没有l的,硬链接外表看起来就和普通文件类似。

我们用ls -l命令查看文件信息的时候,第二列的那个1,表示拥有相同inode号的文件数。不难理解,因为file2指向file1,它们并没有指向同一块文件内容,所以它们的inode号不相同。

软链接的特点:

从入行至今,使用Terminal的次数并不多,现用现查是常态,平时开发中 Git 也是使用图形界面工具,所以对Terminal非常陌生,直到最近自己搭了一个***才真正意识到命令行的便捷,而搭建博客的过程中命令行更是不可缺少的工具。

Mac上很多功能不提供图形界面,只能通过命令行来实现,例如说 ssh ,Windows下需要使用 XShell 之类的软件来 *** 作,而nix系统直接使用终端命令就可以直接链接:

通过Terminal可以访问所有目录,包括 Finder 隐藏的目录,而 Finder 的隐藏文件功能也只能通过 Terminal 开关,当然在系统 1012 中可以使用 Shift + Command + 来快速开启与关闭:

Terminal可以做界面图形App能做的绝大多数 *** 作,因为界面图形App背后使用的就是Command Line,例如在你安装 Xcode 之后,你就可以通过命令行进行编译和打包 *** 作:

虽然学习Command Line需要一个记忆和熟练的过程,但其强大且广泛的功能带给我们的便利快捷要远大于其学习成本,所以说使用Terminal,学会Command Line是一个程序员必备的素质之一。

Terminal里面成百上千条命令,每一条命令还有其具体的参数方法,谁也不能全都记住,那么怎么办?推荐学习Command Line的人们最先掌握的命令 man 。通过 man CommandName 来获取你想知道的命令的使用指南:

包括命令的名称、参数意义、使用描述等等,足够你理解使用这个命令了,在浏览期间可以通过 Space 翻页、 ↑ 和 ↓ 来滚动、输入 / SearchKeyword 来搜索,使用 Q 退出页面。如果你不清楚这个命令的名字,可以使用 man -K Keyword 来搜索,Terminal会询问你搜索的结果是否是你想要的。

虽然平时使用Finder管理文件已经很方便了,但是某些时候使用Terminal来进行路径和文件的 *** 作也会非常便捷。

路径分为绝对路径和相对路径。

绝对路径总是以 / 开头,例如 /Users/xuhaoran/blog 。

相对路径是根据你的Terminal当前的路径位置有关,Terminal默认路径为 Home Folder ,就是 ⌘ + ⇧ + H 的Folder,相对路径可以使用 / 来表示上一级路径,使用 / 表示本级路径,通常可以省略,使用 ~/ 则表示你的 Home Folder 。

绝对路径的第一个 / 代表根目录,而 /Users/UserName 即是 HomeFolder 。

如何获取绝对路径?有两个方法:1、打开Terminal后,直接拖拽Folder或File进来;2、使用 pwd 命令:

跳转到指定路径使用 cd 命令:

cd - 命令可以后退目录:

查看当前路径下的所有Folder和File使用 ls 命令,值得一提的是使用 Tab 可以进行匹配输入,注意Terminal大小写敏感。通常情况 ls 命令是不显示隐藏文件的,可以使用 ls -A 来显示所有隐藏文件,即 Name 形式的文件:

pwd 、 cd 、 ls 三条命令搭配使用可以完成绝大多数的路径查询跳转工作,至于这三个命令的其他参数可以使用 man 来自行查询。

而创建与删除路径使用 mkdir 与 rmdir 两个命令:

使用 mkdir 命令时,如果想创建多层目录的话可以添加参数 p :

通过Command Line检视文件,可以使用命令 cat 将文件内容输出到Terminal中:

面对较长的文本直接输出到Terminal中显然并不合理,那么可以使用 less 命令,在 less 命令进入文件后按 V 进入vim编辑器。

如果想查看文件类型信息,特别是在文件扩展名丢失的情况下,可以使用 file 命令:

可以使用 touch 命令创建文件和指定文件扩展名:

创建之后可以直接进入编辑器进行编辑,可以使用 vim 命令进去vim编辑器或者 nano 命令进入nano编辑器:

可以使用 open 命令打开一个文件或者使用Finder打开一个Folder,使用 open 命令来打开当前的Folder:

对于基本的复制剪切 *** 作可以分别使用 cp 、 mv 命令:

查看当前目录下的文件权限可以使用 ls -alh 命令:

其中权限部分详细的分为 d rwx rwx rwx 四部分。

第一部分中 d 表示为Directory,而 - 则表示File。

后面三部分分别表示“对所有者”、“对同组人”、“对其他人”的权限, r 读取权限、 w 写入权限、 x 执行权限, - 表示无权限。

以其中 AlamofireDemo 为例,表示为目录、所有者可读可写可执行、同组人可读可执行、其他人可读可执行。

而三部分的权限可使用数字表示,其中 r 权限为2², w 权限为2¹, x 权限为2º,例如: AlamofireDemo 目录的全校可以表示为 755 ,而 cerSigningRequest 文件的权限为 644 。

权限是可以变更的,使用 chmod 命令:

这是通常情况下的标准命令,为文件添加 rwxr-xr-x 权限, -R 参数表示改变目录结构下所有子目录文件的权限而并非目录本身。 chmod 777 FileName 则是非常危险的命令,赋予了其他人与root相同的权限。

chmod 还有一种改变权限的形式,使用运算符 + (增加)、 - (去除)、 = (覆盖设定)配合用户类型 u (所有者)、 g (同组人)、 o (其他人)、 a (全部):

上面这条命令是为 AlamofireDemo 这个目录的同组人添加执行权限。

同样,拥有者和群组也是可以改变的,使用 chown 命令:

sudo 命令的作用在于会用root账户权限来执行后面的命令,通常在执行一条命令提示 Permission denied 时使用。使用 sudo !! 再次执行:

如果执行多条需要root权限的命令,可以使用 sudo -s 获取root权限,注意 # 代替了 $ 表示使用root权限 *** 作, *** 作结束可以使用 Control + D 或者输入 exit 命令来退出环境:

在网络通信之前,最常用的 *** 作就是 ping 命令,它会给网络主机发送一个回应请求,进而验证可否进行通信:

可使用 Control + C 停止发送请求。

ssh 是一种远程登录和其他安全服务的协议,远程登录相比较于 telnet 和 rlogin 两种协议,有其特有的优势,例如加密传输、数据压缩等。

Mac的Terminal自带SSH,使用 ssh 就可以登录远程服务器:

之后就可以在远程服务器进行一些常规 *** 作或者一些逗逼的命令:

网络通信命令还有很多,这里限于能力就不献丑了。

bash 命令是用来执行一段脚本命令的命令,通常可以用来执行本地写好的脚本,例如:

who 命令可以列出当前登录的所有用户, who am i 显而易见是回答“我是谁?”的问题:

console 是电脑的底层控制台,伴随着电脑开机而启动; ttys (Teletypewriter的缩写)则是Terminal的类型名称,随着Terminal数量增加而增加计数。使用 Command + N 来新建Terminal。

至于 Console 、 Terminal 、 tty 和 Shell 的关系这里就不叙述了。

使用 ps 命令来查看进程状态,可以确定哪些进程僵死或过多占用资源等。通常使用 ps aux 来查看具体进程:

PID 表示进程的id, %CPU 、 %MEM 分别表示进程占用CPU和内存的比重, VSZ 表示使用掉的虚拟内存(KB), RSS 表示占用的固定内存(KB), TT 表示在哪个Terminal上执行, STAT 表示该进程目前的状态。

关于 STAT 的状态码:

查询到进程之后可以使用 kill 命令用来终止进程:

至于 SignalNumber 可以通过命令 kill l 获取:

其中常用的为9(SIGKILL),对付大多数程序可以 kill -9 PID 直接干掉。

其他常用的系统命令有查看时间的命令 date :

查看日历的命令 cal :

cal 命令后面可接年份,例如 cal 2017 ,也可以接月份+年份,例如 cal 8 2018 表示展现2018年8月的日历。

对于常用的命令可以使用 alias 为其添加别名,例如:

删除别名可以使用 unalias :

使用 control + C 可以终止持续进行的命令,例如 ping 命令。

使用 control + D 或者 exit 命令可以结束当前状态,例如结束 ssh 的远程链接。

使用 control + L 或者 clear 命令可以清屏,与 reset 命令不同的是, clear 可以滚动查看之前的内容,而 reset 则是完全清除内容。

使用 history 命令可以查询执行命令的历史记录 history PageCnt :

连续写了两天时间,期间不断的去查询和完善内容,感觉这个过程又收获了很多知识。

Terminal的强大只有真正融入进去才能感受得到,以上这些都只是本人在工作中遇到的最基本的内容,说成冰山一角毫不为过,所以日后遇到新的内容还会继续进行补充更新。

最后,很多命令下的参数都有不同的用法,当遇到问题了请熟练地使用 man 命令,希望对您有所帮助。

以上就是关于mac终端只显示目录全部的内容,包括:mac终端只显示目录、terminal终端怎么调到下面、关于ffmpeg推流,如何推流一个文件夹里的所有视频或者多个视频等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9809156.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存