手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:苹果相关

Creating root-level directories and symbolic links on macOS Catalina

 这是一篇引用文章,原文来自:https://derflounder.wordpress.com/2020/01/18/creating-root-level-directories-and-symbolic-links-on-macos-catalina/,可能部分用户打不开,毕竟是wordpress.com。。。

 
我简单的COPY一下:

One of the changes which came with macOS Catalina was the introduction of a read-only root volume for the OS. For users or environments which were used to using adding directories to the root level of the boot drive, this change meant they could no longer do that.

To address this need, Apple added a new method for creating directories at the root level which leverages Apple File System’s new firmlink functionality. Firmlinks are new in macOS Catalina and are similar in function to Unix symbolic links, but instead of only allowing travel one way (from source to destination) firmlinks allow bi-directional travel.

The use of firmlinks is exclusively reserved for the OS’s own use, but Apple has also made available what are called synthetic firmlinks. These synthetic firmlinks are how the OS enables folks to create directories and symbolic links on the read-only boot volume. For more details, please see below the jump.

 

To create a synthetic firmlink, you need to do the following:

1. Create a file in the /etc directory named synthetic.conf.
2. Make sure /etc/synthetic.conf has the following permissions:

  • root: read, write
  • wheel: read
  • everyone: read

3. In /etc/synthetic.conf, define the name(s) of the empty directory or symbolic link you want to have appear at the root level.

4. After all desired entries have been made, save the /etc/synthetic.conf file.

5. Restart the Mac to apply the changes.

For example, /etc/synthetic.conf may look like this:

XML/HTML代码
  1. # create an empty directory named "foo" at / which may be mounted over  
  2. foo  
  3.   
  4. # create a symbolic link named "bar" at / which points to  
  5. # "System/Volumes/Data/bar", a writeable location at the root of the data volume  
  6. bar     System/Volumes/Data/bar  
  7.   
  8. # create a symbolic link named "baz" at / which points to "Users/me/baz"  
  9. baz     Users/me/baz  

 

Note: In those cases where you’re creating a symbolic link and are including a path, the start point for the directory path is not /. Instead, it is the next directory level down.

To show how this works, I’ve created a directory containing installer packages located at /Users/Shared/installers.

Screen Shot 2020 01 17 at 10 46 06 PM

To create a symbolic link at the root level named installers which points to /Users/Shared/installers, I would do the following:

1. Create the /etc/synthetic.conf file if it didn’t already exist.
2. Add the following entry to the /etc/synthetic.conf file:

1
installers  Users/Shared/installers

Screen Shot 2020 01 17 at 10 32 45 PM

3. Reboot the Mac.

Note: Whomever designed this came down on the “tabs” side of the “tabs vs. spaces” debate. When creating the separation between installers and Users/Shared/installers in the /etc/synthetic.conf file, you need to use tabs. If you use spaces instead, the synthetic firmlink won’t be created.

After the reboot, you should see a symbolic link named installers at the root level of the boot volume. When you navigate to it, you should see the contents of /Users/Shared/installers.

Screen Shot 2020 01 17 at 10 33 30 PM

To remove the symbolic link, remove the relevant entry from /etc/synthetic.conf and then restart. After the reboot, the installers symbolic link should be missing from the root level of the boot volume.

Screen Shot 2020 01 17 at 10 46 15 PM

For more information, please see the synthetic.conf man page. This is available by entering the following command in Terminal on macOS Catalina:

man synthetic.conf,可以看到内容大致这样:

XML/HTML代码
  1. SYNTHETIC.CONF(5)           BSD File Formats Manual          SYNTHETIC.CONF(5)  
  2.   
  3. NAME  
  4.      synthetic.conf  
  5.   
  6. SYNOPSIS  
  7.      synthetic.conf -- synthetic symbolic link and directory manifest  
  8.   
  9. DESCRIPTION  
  10.      synthetic.conf describes virtual symbolic links and empty directories to  
  11.      be created at the root mount point. Because the root mount point is read-  
  12.      only as of macOS 10.15, physical files may not be created at this loca-  
  13.      tion. All writeable paths must reside on the data volume, which is  
  14.      mounted at /System/Volumes/Data.  
  15.   
  16.      synthetic.conf provides a mechanism for some limited, user-controlled  
  17.      file-creation at /.  The synthetic entities described in this file are  
  18.      synthesized by the kernel during early system boot. They are not physi-  
  19.      cally present on the disk, but when the system is booted, they behave as  
  20.      if they were within certain parameters.  
  21.   
  22.      synthetic.conf is intended to be used for creating mount points at /  
  23.      (e.g. for use as NFS mount points in enterprise deployments) and symbolic  
  24.      links (e.g. for creating a package manager root without modifying the  
  25.      system volume).  synthetic.conf is read by apfs.util(8) during early sys-  
  26.      tem boot.  
  27.   
  28. FORMAT  
  29.      synthetic.conf specifies a single synthetic entity per line. Each line  
  30.      may have one or two columns, separated by a tab character. If a line has  
  31.      a single column, it denotes a virtual empty directory to be created at /.  
  32.      If a line has two columns, it denotes a symbolic link at / whose link  
  33.      target is given in the second column.  
  34.   
  35.      In either case, the first column denotes the name of the entity to be  
  36.      created at /.  
  37.   
  38.      A line beginning with the # character indicates a comment that is not  
  39.      parsed.  
  40.   
  41. SYNTHETIC ENTITIES  
  42.      Synthetic entities may not be deleted at runtime. In order to delete a  
  43.      synthetic entity, it must be removed from synthetic.conf, and the host  
  44.      must be rebooted.  
  45.   
  46.      New files and directories may not be created within a synthetic empty  
  47.      directory.  
  48.   
  49. EXAMPLES  
  50.            # create an empty directory named "foo" at / which may be mounted over  
  51.            foo  
  52.   
  53.            # create a symbolic link named "bar" at / which points to  
  54.            # "System/Volumes/Data/bar", a writeable location at the root of the data volume  
  55.            bar     System/Volumes/Data/bar  
  56.   
  57.            # create a symbolic link named "baz" at / which points to "Users/me/baz"  
  58.            baz     Users/me/baz  
  59.   
  60. FILES  
  61.      /etc/synthetic.conf  
  62.   
  63. SEE ALSO  
  64.      apfs.util(8) shutdown(8) reboot(2)  
  65.   
  66. Darwin/macOS                      2 July 2019                     Darwin/macOS  

 

 

参考 一下上面的内容,可以简单的试用一下。其实还行吧。(如果图片看不到。。就忍忍吧。)
---------
说白了就是几个事
1、在/etc目录下建一个 synthetic.conf 文件
2、设定的权限是:root 读写 wheel 读 everyone 读 ,权限值为:644
3、每行一条记录,目录名和目标引用的目录 
     比如你要在根目录下映射 一个 server,对应的是 /Users/gouki/Desktop,那就直接: server /Users/gouki/Desktop 就完事了
4、重要:改完得重启。。。。
--EOF
说白了,现在不支持根目录下的ln了。只能通过这个办法。如果有特别需要就试试吧。。。
     
 
 ----
::划重点::
1、权限是644
2、两个目录之间的间隔用tab,不是空格。原例子里用的是nano编辑 ,我用vim编辑的时候,tab居然无法输入(崩溃 )
3、对应的目录前好象不需要 / 
4、多测试几次吧。我重启了三次才搞定
 

用pm2管理frpc

原来我的frpc是用supervisor来管理的。但不得不说的是,mac上面的supervisor真心不稳定。挂了重启还是会失败。

每次一失败,我都得跑上几十公里,去启动一下。。。于是这次尝试了用pm2来管理着看看,还算比较方便:
npm install -g pm2
pm2 start -x './frpc' -n frp -- -c /xxx/frp/frpc.ini
 
-x 是指定运行的文件
-n 是在pm2 status中显示的名称
-- 之后的是 ./frpc的参数 (最好是绝对路径)
 
运行如果没有报错,用pm2 status看一下就知道了。希望这样能够坚持长久一点

mac下为什么没有右键打印?

如题,windows就有这个功能。虽然是快速打开然后关闭。但好歹不需要等来等去的啊

 
因为是PDF,所以上一篇的内容就派上用场了。。。
 
XML/HTML代码
  1. gouki@gouki 第九章学案 % lpr -P`lpstat -v|awk '{print $3}'|head -1|awk 'BEGIN{FS=":"} {print $1}'` 9.1字母表示数学案.pdf  
  2. gouki@gouki 第九章学案 % lpr -P`lpstat -v|awk '{print $3}'|head -1|awk 'BEGIN{FS=":"} {print $1}'` 9.2代数式学案.pdf  
  3. gouki@gouki 第九章学案 % lpr -P`lpstat -v|awk '{print $3}'|head -1|awk 'BEGIN{FS=":"} {print $1}'` 9.3代数式的值学案.pdf  
  4. gouki@gouki 第九章学案 % lpr -P`lpstat -v|awk '{print $3}'|head -1|awk 'BEGIN{FS=":"} {print $1}'` 9.4整式学案.pdf  
  5. gouki@gouki 第九章学案 % lpr -P`lpstat -v|awk '{print $3}'|head -1|awk 'BEGIN{FS=":"} {print $1}'` 9.5合并同类项学案.pdf  
  6. gouki@gouki 第九章学案 % lpr -P`lpstat -v|awk '{print $3}'|head -1|awk 'BEGIN{FS=":"} {print $1}'` 9.6整式的加减学案.pdf  
  7. gouki@gouki 第九章学案 % lpr -P`lpstat -v|awk '{print $3}'|head -1|awk 'BEGIN{FS=":"} {print $1}'` 9.7同底数幂的乘法学案.pdf  
  8. gouki@gouki 第九章学案 % lpr -P`lpstat -v|awk '{print $3}'|head -1|awk 'BEGIN{FS=":"} {print $1}'` 9.8幂的乘方学案.pdf  
  9. gouki@gouki 第九章学案 % lpr -P`lpstat -v|awk '{print $3}'|head -1|awk 'BEGIN{FS=":"} {print $1}'` 9.9积的乘方学案.pdf  
  10. gouki@gouki 第九章学案 % cd ../第九章作业  
  11. gouki@gouki 第九章作业 % lpr -P`lpstat -v|awk '{print $3}'|head -1|awk 'BEGIN{FS=":"} {print $1}'` 9.1字母表示数作业.pdf  
  12. gouki@gouki 第九章作业 % lpr -P`lpstat -v|awk '{print $3}'|head -1|awk 'BEGIN{FS=":"} {print $1}'` 9.2代数式作业.pdf  
  13. gouki@gouki 第九章作业 % lpr -P`lpstat -v|awk '{print $3}'|head -1|awk 'BEGIN{FS=":"} {print $1}'` 9.3代数式的值作业.pdf  
  14. gouki@gouki 第九章作业 % lpr -P`lpstat -v|awk '{print $3}'|head -1|awk 'BEGIN{FS=":"} {print $1}'` 9.4整式作业.pdf  
  15. gouki@gouki 第九章作业 % lpr -P`lpstat -v|awk '{print $3}'|head -1|awk 'BEGIN{FS=":"} {print $1}'` 9.5合并同类项作业.pdf  
  16. gouki@gouki 第九章作业 % lpr -P`lpstat -v|awk '{print $3}'|head -1|awk 'BEGIN{FS=":"} {print $1}'` 9.6整式的加减作业.pdf  
  17. gouki@gouki 第九章作业 % lpr -P`lpstat -v|awk '{print $3}'|head -1|awk 'BEGIN{FS=":"} {print $1}'` 9.7同底数幂的乘法作业.pdf  
  18. gouki@gouki 第九章作业 % lpr -P`lpstat -v|awk '{print $3}'|head -1|awk 'BEGIN{FS=":"} {print $1}'` 9.8幂的乘方作业.pdf  
  19. gouki@gouki 第九章作业 % lpr -P`lpstat -v|awk '{print $3}'|head -1|awk 'BEGIN{FS=":"} {print $1}'` 9.9积的乘方作业.pdf  
嗯。没有用for in ,想着不多。。。其实还是应该可以用一下for in 或者 find . |exec 之类的

mac下实现命令行打印文件

最近全部改成电子上课,老师发课都在微信群里,说实话。真的挺烦。群里 也是各种聊天不止,怎么办?

最无耻的办法,将,只要是老师发的话,全部打印出来(嗯,超过20个字以上的。。。),但我怎么知道谁是老师呢?用wechaty pad版,针对指定群接收消息,或者无所谓,判断是否是群消息,同时发消息的人是谁(这个可以初期就记录下,并存储起来)
    然后将文字的话,存成txt文件。调用命令行打印。
 
    如果老师发的是pdf,嗯。不用担心,也能直接打印。
    如果老师发的是图片,嗯?这个,能够直接打印
    如果老师发的是word?嗯,这个。。。也打不了。。。
 
于是现在命令问题(原来字打错了)来了,只要老师发的是word(其实老师不用苹果,也不会有pages,事实上pages也不能直接打印),就没法打印,怎么办?网上有word2pdf的程序,先将word转成pdf再打印就OK了。
 
OK,那怎么打印呢?在mac下面其实很简单?
 
lpr -P`lpstat -v|awk '{print $3}'|head -1|awk 'BEGIN{FS=":"} {print $1}'` ~/Desktop/xxx.txt
 
上面是两个方法的信合,lpstat是获取当所有的打印机,取第一条默认的。。。然后用【lpr -P打印机名 要打的文件】,直接打印。
------
——EOF——
上面都是理论情况,实际上,我的pad plus已经过期了。
1、因为要200一个月,但我还没有完整的基于他开发,所以就暂废了
2、上面的打印其实浪费了不少纸。更关键的是,其实有些群我没有加,而且老师有时候发作业是通过【晓黑板】等第三方程序。那我基于他开发的意义就失去了
 
所以,做个记录吧。就当记录一下,打印机是怎么调用的吧。。。。
 
    

2年不到,掉了1000的电池容量了

mac下运行ioreg -rn AppleSmartBattery | grep -i capacity

可以得到:
XML/HTML代码
  1. "AppleRawCurrentCapacity" = 6392  
  2.   
  3. "AppleRawMaxCapacity" = 6452  
  4.   
  5. "MaxCapacity" = 6452  
  6.   
  7. "CurrentCapacity" = 6392  
  8.   
  9. "LegacyBatteryInfo" = {"Amperage"=18446744073709551590,"Flags"=5,"Capacity"=6452,"Current"=6392,"Voltage"=12923,"Cycle Count"=94}  
  10.   
  11. "DesignCapacity" = 7336  
  12.   
  13. "BatteryData" = {"StateOfCharge"=100,"PMUConfigured"=0,"Voltage"=12930,"QmaxCell1"=7165,"AdapterPower"=1109165984,"SystemPower"=1108102207,"ResScale"=220,"QmaxCell2"=7161,"QmaxCell0"=7192,"CycleCount"=94,"DesignCapacity"=7336}  
设计容量 7336,现在只有 6392了。。。2年不到,掉了1000了。。。不知道还能再战多久