Mac 批量关闭finder

一不留神经常开了很多个 Finder 窗口。可以用osascript命令行批量关闭。

  1. 打开 Terminal 应用程序。
  2. 在 Terminal 中输入以下命令并按下回车键:
osascript -e 'quit app "Finder"'

nginx 在图片请求出现 404 时返回自定义默认图片的方法

使用 NGINX 的error_page指令。下面是一个简单的配置示例:

server {
    listen 80;
    server_name example.com;

    root /path/to/your/images;

    # Define a location block for handling image requests
    location /images/ {
        try_files $uri @fallback;
    }

    # Define a location block for the fallback image
    location @fallback {
        error_page 404 = /images/default.jpg;
        return 404;
    }
}

这个配置中:

  • try_files $uri @fallback; 尝试查找请求的图片文件,如果文件存在则返回,否则转到 @fallback 定义的位置。
  • error_page 404 = /images/default.jpg; 当发生404错误时,NGINX会将请求重定向到指定的图片,这里是 /images/default.jpg
  • return 404; 返回404状态码。

以我本地的 blog 为例,我的配置如下:

  location /blog/tags/ {
        try_files $uri @fallback;
    }

  # Define a location block for the fallback image
  location @fallback {
      error_page 404 = /blog/tags/zzz.jpg;
      return 404;
  }

要注意的是,如果在配置中也有关于图片的操作配置,要注意一下他们的先后顺序,NGINX 会使用首先匹配到的配置块来处理请求。


AWK 在 Debian 11 上的表现与 Debian 10 有差异

在Linux环境下,AWK是一种强大的文本处理工具,被广泛应用于数据处理和文本分析。然而,在不同的Linux发行版中,我们可能会遇到不同的AWK实现,其中两个主要的是mawk和gawk。其中Debian 11从 gawk 改为了 mawk。我的脚本在 Debian 11 中也出现了一些问题。

AWK简介

AWK 是一种用于处理文本数据的编程语言,通常用于按行处理结构化文本文件。它由Alfred Aho、Peter Weinberger和Brian Kernighan于1977年开发,其名称来源于他们的姓氏首字母。AWK通过执行一系列的模式匹配和动作来对文本进行处理。

mawk与gawk的差异

mawk(Mike’s AWK)和gawk(GNU AWK)是两种不同的AWK实现,它们在性能、特性和兼容性方面有着不同的特点。

性能

mawk被设计成一个轻量级的AWK实现,注重于速度和资源效率。其代码库较小,可能更容易维护。

相比之下,gawk是一个功能更丰富的实现,提供了更多高级功能和选项,但可能在性能上有所开销。在某些情况下,mawk可能比gawk更快。

特性和兼容性

gawk实现了POSIX和大部分AWK的标准,并提供了许多扩展功能。这使得gawk在处理复杂任务时更为方便。

而mawk更注重于遵循标准,可能在某些gawk的扩展功能方面有所不同。

示例:mawk与gawk在命令行上的差异

在不同的AWK实现中,即使是相同的命令,也可能产生不同的结果。比如,下面这个例子:

echo "nginx.kelu.org" | awk '{split($0,arr,"."); tmp=0; for(i in arr) tmp=i; for(j=tmp; j>0;j--) printf("%s/",arr[j]); }'

在Debian 11上输出为 “nginx”,而在Debian 10上输出为 “org/kelu/nginx”。这种差异可能是由于mawk和gawk在数组遍历时的行为不同所导致的,以下解释来自 gpt,我并未验证,谨慎接受:

1. 数组遍历顺序:

在AWK中,数组的遍历顺序并不总是与元素添加的顺序一致。而在mawk和gawk中,对于 for (i in array) 的遍历,遍历顺序可能有所不同。

  • mawk: mawk的数组遍历顺序可能是未定义的。
  • gawk: gawk通常会按照元素添加的顺序遍历数组。

2. 数组索引:

在AWK中,数组的索引通常是整数或者字符串。在您的例子中,您使用 split() 函数将字符串分割成数组,并且使用数组的索引来访问元素。

  • mawk: mawk可能对数组索引的处理有所不同,可能更加严格,不允许将字符串作为索引?
  • gawk: gawk在处理数组索引时可能更加宽松,允许字符串作为索引。这意味使用 for (i in array) 遍历数组时,索引可能是字符串类型。

切换 Debian 11 使用 gwak

  1. 安装 gawk:首先,确保系统已经安装了 gawk

    sudo apt-get update
    sudo apt-get install gawk
    
  2. 更新 alternatives 系统:Debian 使用 alternatives 系统来管理多版本的程序。你可以将 awk 的默认实现更改为 gawk

    首先,检查当前 awk 使用的是哪个实现:

    update-alternatives --display awk
    

    image-20240607下午50036169

    发现已经默认使用gawk了。如果不是,可以这么设置:

    sudo update-alternatives --set awk /usr/bin/gawk
    
  3. 验证更改:最后,确认 awk 已经切换到 gawk

    awk --version
    

    输出应该显示 gawk 版本信息。

    image-20240607下午52030201


使用 systemd override 自定义服务配置,修改 systemd 服务依赖顺序

在 Linux 系统中,systemd 是一种系统和服务管理器,用于管理系统启动时的进程以及运行中的服务。systemd 允许用户通过 systemd unit 文件来配置服务的行为。

当我们需要修改系统提供的服务的行为,而不希望直接编辑原始的 systemd unit 文件时,可以使用 systemd 的 override 文件来实现自定义配置,可以添加、修改或删除 systemd unit 文件中的选项,以满足其特定需求。

创建 override 文件

a.service为例 :

sudo systemctl edit a.service

这将用nano编辑器中打开一个新的 override 文件,你可以在其中添加你想要修改的配置选项。

由于我习惯使用vim,就手动创建了:

sudo mkdir -p /etc/systemd/system/a.service.d/
sudo vim /etc/systemd/system/a.service.d/override.conf

编辑 override 文件

可以添加、修改或删除配置选项以满足你的需求。例如我修改服务的 After 参数,添加以下内容:

[Unit]
After=network-online.target nss-lookup.target flanneld.service

重新启动相关的服务,以应用新的配置

sudo systemctl daemon-reload
sudo systemctl restart a.service

参考资料


Xcode 下载模拟器报错 Could not download iOS 17.4 Simulator (21E213).

刚升级了 Xcode 15.3,死活无法下载模拟器,也就无法编译代码:

image-20240415下午22232752

太恼人了,我觉得问题的关键在于无法断点续传,每次都下载了好几个G就断了。

image-20240415下午14837455

姑且按照官网的教程:Installing and managing Simulator runtimes,就是开发者官网的这个文章层级:

Documentation / Xcode / Devices and Simulator / Installing and managing Simulator runtimes

执行如下命令,用命令行下载:

sudo xcode-select -s /Applications/Xcode.app
xcodebuild -runFirstLaunch
xcodebuild -downloadAllPlatforms
# xcodebuild -downloadPlatform iOS

image-20240415下午14901189

等得焦急:

image-20240415下午20011254

它报错了,说我磁盘空间不够!之前下载失败,原来是这个原因啊,再回去看截图,确实报了这个报错,当时也没有仔细看。还是命令行童叟无欺:

image-20240415下午20356998

弄清楚原因了就简单了,清理之后再下载一次。

不容易:

image-20240415下午24011475

image-20240415下午23955946

不过看到最后,该断还是断,我从watchOS 、tvOS 到 visionOS 全都是网络断开。不过没所谓了,iOS ok已经可以先用着了。

image-20240415下午34537571

ps: 找到临时目录,刚才下载到一半的在这个位置,可以手动删掉,重启后也会自动删除:

/private/var/folders/sl/j0g8fv0d5h97tc_xxsy3fkyr0000gn/T

image-20240415下午40555976


xcode 清理存储空间

编译用的 Mac 存储已经不堪重负。这一篇整理一下清理内容。

  1. DerivedData 目录:全部清除

    Xcode的缓存文件,曾经在Xcode跑过的所有项目的索引、build的信息等都会保存在这里。删除后在下次打开项目编译的时候将会重新生成。

     ~/Library/Developer/Xcode/DerivedData
    
  2. iOS设备符号表目录:按需删除

    当插入一个新版本的 iOS 设备时,Xcode都会将该设备对应系统的符号表download下来,插入设备的版本越多,数据量越大。连接设备会重新生成。

     ~/Library/Developer/Xcode/iOS DeviceSupport
    
  3. 模拟器支持:按需删除不需要的模拟器

     ~/Library/Application Support/iPhone Simulator/
    
  4. 设备日志:全部删除

     ~/Library/Application Support/iOS Device Logs/
    
  5. Archives 产出目录:按需删除

    删除之后 Xcode->Organizer 下的那些打包文件就全被清空了。

    每次打包 App 的 dSYM 等数据就保存在这里,把一些没用的版本删了。如果是上线了的版本就保留。

     ~/Library/Developer/Xcode/Archives
     ~/Library/Developer/Xcode/Products
    
  6. 模拟器的数据/缓存数据: 全部删除

    ~/Library/Developer/CoreSimulator/Devices/
    ~/Library/Developer/CoreSimulator/Caches/
    

    每个文件夹里包含的就是一个特定系统版本的设备的数据。

    每个文件夹对应哪个设备可以在其下device.plist中查看。

  7. 旧版本的模拟器支持:按需删除

    不需要的就删除了

    ~/Library/Developer/CoreSimulator/Profiles/Runtimes/
    
  8. playground的项目缓存: 全部删除

    ~/Library/Developer/XCPGDevices/
    

苹果手机无法连接 App Store

一台搁置多年的iPhone 6s用来测试,iOS 11,发现死活无法登录 app store,显示 无法连接到App Store

img

要知道,我主要是想下载 testflight ,连app store 都无法连接,就真没戏了。(虽然后续才意识到,iOS版本低于14同样无法下载)

我做了以下几个步骤,最后可以访问 app store 了。

  1. 清除 App Store 缓存

    “设置”-“Safari”-“清除历史记录与网站数据”

  2. 重启手机

  3. 使用数据线连接MacBook

然后神奇的就可以访问app store了。