分类 软件开发 下的文章

在 Git Bash 中使用 tree 命令

关于 tree 命令 tree 命令可以以 ASCII 树状图的方式列出目录的结构。 $ tree ./tree-1.5.2.2-bin -A ./tree-1.5.2.2-bin ├── bin │ └── tree.exe ├── contrib │ └── tree │ └── 1.5.2.2 │ ├── tree-1.5.2.2 │ ├── tree-1.5.2.2-GnuWin32.README │ └── tree-1.5.2.2-src │ ├── CHANGES │ ├── INSTALL │ ├── LICENSE │ └── README ├── man │ └── cat1 │ └── tree.1.txt └── manifest ├── tree-1.5.2.2-bin.mft └── tree-1.5.2.2-bin.ver 9 directories, 9 files 注:-A 参数在绘制线条时使用 ASCII 扩展字符,这会更好看一些。 这对我们在命令行中查看目录的组织方式还是很有作用的。但 git bash 默认并没有集成该命令。我们可以自行安装一下。 安装 tree 命令 下载: 到 https://gnuwin32.sourceforge.net/packages/tree.htm 下载 Windows 版预编译二进制文件: 从下载到的压缩包中解压出可执行程序 tree.exe (单独一个文件即可),放置于 git 的安装目录 /usr/bin/(默认安装情况下绝对路径通常是 C:\Program Files\Git\usr\bin)。 这时打开 Git Bash 就可以用 tree 命令了。 $ tree --help usage: tree [-adfghilnpqrstuvxACDFNS] [-H baseHREF] [-T title ] [-L level [-R]] [-P pattern] [-I pattern] [-o filename] [--version] [--help] [--inodes] [--device] [--noreport] [--nolinks] [--dirsfirst] [--charset charset] [--filelimit #] [<directory list>] -a All files are listed. -d List directories only. -l Follow symbolic links like directories. -f Print the full path prefix for each file. -i Don't print indentation lines. -q Print non-printable characters as '?'. -N Print non-printable characters as is. -p Print the protections for each file. -u Displays file owner or UID number. -g Displays file group owner or GID number. -s Print the size in bytes of each file. -h Print the size in a more human readable way. -D Print the date of last modification. -F Appends '/', '=', '*', or '|' as per ls -F. -v Sort files alphanumerically by version. -r Sort files in reverse alphanumeric order. -t Sort files by last modification time. -x Stay on current filesystem only. -L level Descend only level directories deep. -A Print ANSI lines graphic indentation lines. -S Print with ASCII graphics indentation lines. -n Turn colorization off always (-C overrides). -C Turn colorization on always. -P pattern List only those files that match the pattern given. -I pattern Do not list files that match the given pattern. -H baseHREF Prints out HTML format with baseHREF as top directory. -T string Replace the default HTML title and H1 header with string. -R Rerun tree when max dir level reached. -o file Output to file instead of stdout. --inodes Print inode number of each file. --device Print device ID number to which each file belongs. --noreport Turn off file/directory count at end of tree listing. --nolinks Turn off hyperlinks in HTML output. --dirsfirst List directories before files. --charset X Use charset X for HTML and indentation line output. --filelimit # Do not descend dirs with more than # files in them. 通常命令跟文件夹即可,文件夹可以是相对路径也可以是绝对路径,并且可以指定多个文件夹。 使用 Windows 自带的 tree 命令 我们要知道 Windows 的命令行工具自带了 tree 命令,展示细节上差点意思,将就一下也还行。 PS D:\root> tree tree-1.5.2.2-bin /F 卷 Data 的文件夹 PATH 列表 卷序列号为 6EDF-788C D:\ROOT\TREE-1.5.2.2-BIN ├─bin │ tree.exe │ ├─contrib │ └─tree │ └─1.5.2.2 │ │ tree-1.5.2.2-GnuWin32.README │ │ │ ├─tree-1.5.2.2 │ └─tree-1.5.2.2-src │ CHANGES │ INSTALL │ LICENSE │ README │ ├─man │ └─cat1 │ tree.1.txt │ └─manifest tree-1.5.2.2-bin.mft tree-1.5.2.2-bin.ver 不过由于该命令是集成在命令行程序的,所以不能被 git bash 调用。不过我想了一个注意,在 git bash 中先执行 cmd,进入 Windows 命令行环境后再执行 tree 命令,怎么样,这招是不是很高明 ...

修改 Nginx 附件大小的限制

Nginx 默认限制请求附件大小为 1MB。即:默认当你通过 Nginx 代理上传附件,大于 1M 的文件时,浏览器会抛出异常。 可以通过设置 nginx.conf 中的 http 块,添加或修改 client_max_body_size 参数来更改默认的附件大小限制。例如,将 client_max_body_size 设置为 8m,即可将附件大小限制更改为 8MB。这将影响到所有站点。当然也可以只修改某一个站点的配置,在站点的 server 块中添加或修改 client_max_body_size 即可。 修改后检查配置文件的语法是否正确:sudo nginx -t。如果没有显示语法错误,继续下一步;如果有错误,请检查配置文件并修复错误。 然后重新加载 Nginx 配置:sudo service nginx reload 或者 sudo systemctl reload ngi...

PHP 附件大小限制的修改

在 PHP 中设置附件大小限制,可以通过以下两种方式实现: 修改 php.ini 文件 在 php.ini 配置文件中,可以修改 post_max_size 和 upload_max_filesize 两个参数来分别限制 POST 数据和上传文件的大小。 这两个参数的区别: post_max_size: 这个参数定义了通过 POST 方法(例如表单提交)可以上传到服务器的数据的最大大小。 如果上传的文件大于这个值,服务器会返回一个错误。 这个限制包括了所有的 POST 数据,不仅仅是文件上传。例如,如果你在表单中填写了一些文本字段,这些数据也会被计入 post_max_size 的限制。 upload_max_filesize: 这个参数定义了通过 HTTP POST 方法上传的单个文件的最大大小。 这是对文件上传的限制,不包括其他非文件数据。 如果上传的文件超过了此限制,服务器会返回一个错误。 总结: post_max_size 是对整个 POST 数据(包括文件和其他表单字段)的限制。 upload_max_filesize 是对单个上传文件的限制。 为了确保文件上传的正常工作,通常建议: post_max_size 应该大于或等于 upload_max_filesize。 post_max_size 可以设置为更大的值以允许更多的其他 POST 数据。 例如: post_max_size = 64M upload_max_filesize = 32M 这里将 POST 数据限制为 64MB,上传文件限制为 32MB。 需要注意的是,修改 php.ini 文件需要重启 Web 服务器才能生效。 使用 ini_set 函数 在 PHP 脚本中,也可以使用 ini_set 函数动态地修改上传文件大小限制。例如: ini_set('post_max_size', '64M'); ini_set('upload_max_filesize', '32M'); 这里同样将 POST 数据限制为 64MB,上传文件限制为 32MB。 需要注意的是,在使用 ini_set 函数时,必须在 PHP 脚本执行的早期调用该函数,否则可能无法生效。这些设置只对当前脚本有效,并不会影响 PHP 的全局设置或其它脚本。另外,某些操作系统和 Web 服务器可能会对 ini_set 函数进行限制,需要进行相应的配置或授...

在 Hugo PaperMod 主题中加入数学支持的最简方式

目的:在不修改主题的情况下支持数学公式。 在当前的写作仓库内创建 layouts/partials/math.html 文件,写入以下内容: <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/katex.min.css" integrity="sha384-bYdxxUwYipFNohQlHt0bjN/LCpueqWz13HufFEV1SUatKs1cm4L6fFgCi1jT643X" crossorigin="anonymous"> <script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/katex.min.js" integrity="sha384-Qsn9KnoKISj6dI8g7p1HBlNpVx0I8p1SvlwOldgi3IorMle61nQy4zEahWYtljaz" crossorigin="anonymous"></script> <script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/contrib/auto-render.min.js" integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous"></script> <script> document.addEventListener("DOMContentLoaded", function() { renderMathInElement(document.body, { // customised options // • auto-render specific keys, e.g.: delimiters: [ {left: '$$', right: '$$', display: true}, {left: '$', right: '$', display: false} ], // • rendering keys, e.g.: throwOnError : false }); }); </script> 其中的 display 属性指是否显示为块级元素, $ ... $ 用于行内公式,所以为 false。 然后创建 layouts/partials/extend_head.html 文件,写入以下内容: {{ if or .Params.math .Site.Params.math }} {{ partial "math.html" . }} {{ end }} 这样可以通过在文章 front matter 中设置 math 属性 true/false 来按需加载数学公式资源。 --- title: 文章标题 date: tags: math: true --- 在使用某些主题时,比如 PaperMod,会自动从站点的 layouts/partials/extend_head.html 调用局部模...

时间造成的 Hugo 页面无法渲染问题

使用 Hugo 写博客,凌晨发布文章的时候总发不出来,什么原因呢?难道半夜见鬼了?👻 --- title: 文章标题 date: "2023-12-27" draft: false --- Hugo 默认采用的是 UTC,比北京时间 (UTC+8) 晚了 8 个小时。hugo 命令在生成静态页面的时候,默认不会生成超过当前时间的文章。所以,有三个方法可以解决问题: 可以在命令行加 --buildFuture 来生成未来的文章; 文章的 date 采用更标准的写法,采用 ISO 8601 日期时间表示法,带上时区信息; 例如:2023-12-27T17:52:08+08:00,其中的 +08:00 表示的就是北京时间了。 配置文件中增加配置 timeZone: Asia/Shangha...

ISO 8601 日期格式与持续时间格式

国际标准 ISO 8601,是国际标准化组织的日期和时间的表示方法,全称为《数据存储和交换形式·信息交换·日期和时间的表示方法》。目前是 2004 年 12 月 1 日发行的第三版“ISO8601:2004”以替代 1998 年的第一版“ISO8601:1998”与 2000 年的第二版“ISO8601:2000”。 ISO 8601 日期格式 YYYY-MM-DDThh:mm:ss[.mmm]TZD 其中: YYYY表示四位数的年份 MM表示两位数的月份 DD表示两位数的天(day of the month),从 01 到 31 T是用来指示时间元素的开始字符 hh表示两位数的小时,从 00 到 23 mm表示两位数的分钟,从 00 到 59 ss表示两位数的秒,从 00 到 59 mmm表示三位数的毫秒数,从 000 到 999 TZD表示时区指示符:Z或+hh:mm或-hh:mm,Z 表示 UTC(Coordinated Universal Time,协调世界时) 时间,+和-表示与 UTC 的差。例如: CST(中国标准时间):UTC +08:00,EST(东部标准时间):UTC -05:00,CST(中部标准时间):UTC -06:00。 举例: 2023-12-27T13:37:50.238Z 表示 UTC 时间:2023年12月27日 13:37:50 2023-12-27T13:37:50.238+08:00 表示北京时间:2023年12月27日 21:37:50 ISO 8601 持续时间格式 P(n)Y(n)M(n)DT(n)H(n)M(n)S 其中: P 是持续时间指示符,始终放置在持续时间的开头位置 T 是表示时间元素开始的指示符 (n)为时间值 符号 含义 Y 年 M 月 D 日 W 星期 H 时 M 分 S 秒 举例: P1Y2M3DT4H5M6S 表示的持续时间为:1年2月3天4小时5分钟6秒 UTC 与 GMT 协调世界时,又称世界标准时间或世界协调时间,简称 UTC(Coordinated Universal Time),是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间(GMT)。理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。由于地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能与实际的太阳时有误差,最大误差达 16 分钟。由于地球每天的自转是有些不规则的,而且正在缓慢减速,因此格林尼治时间已经不再被作为标准时间使用。现在的标准时间,是由原子钟报时的协调世界时(UTC...

git 推送报错 [remote rejected] shallow update not allowed

新建远程仓库,并将本地仓库的远程仓库改为新的地址后,执行 push 报错: [remote rejected] master -> master (shallow update not allowed) 原因是之前使用了 git clone --depth< number> 命令进行了浅层克隆。这样一个克隆的一个限制是你不能将它推送到一个新的存储库中。 先加回旧仓库的地址: git remote add old <path-to-old-remote> 然后执行: git fetch --unshallow old 这个命令是认为当前本地的这个目录下面是 shallow(不完整的),比较远端库和本地库,然后把没有的下载补齐。然后就可以推到新库了。 当然了,也可以抛弃历史包袱,改成新库再推送到新远程...

Nginx 的 root 与 alias 的区别

Nginx 指定文件路径有两种方式 root 和 alias,指令的使用方法和作用域: root 语法:root path 配置段:http、server、location、if alias 语法:alias path 配置段:location alias 是一个目录别名的定义,root 则是根目录(父目录)的定义。关于别名,我的理解是 alias 指定的是物理路径,location 指定的则是该物理路径的别名,一个物理路径可以存在多个别...

Chrome 报错:ERR_UNSAFE_PORT

问题 在使用一个自定义端口 6000 提供网络服务时,总是无法访问。一开始没有留意具体的报错信息,觉得是不是服务程序没有打开端口,是不是路由器没有映射端口,是不是防火墙屏蔽了端口……,直到看到一行小字:ERR_UNSAFE_PORT 无法访问此网站 网址为 http://test:6000/ 的网页可能暂时无法连接,或者它已永久性地移动到了新网址。 ERR_UNSAFE_PORT 用 IE 浏览器试了一下确实能正常打开,看来就是 Chrome 的问题了。查了一下资料,我用的这个 6000 端口确实是个特殊端口。看来不止 Chrome,Edge 也有同样的问题喽。Firefox 的端口略有不同,也有所限...

如何修改 Visual Studio 中 Windows SDK 路径的宏定义

Visual Studio 2022 有时候莫名其妙地在不能正常编译(可能是装多个 SDK 造成的),找不到 ctype.h 等头文件。在项目的 VC++ 目录定义中发现是 SDK 宏定义出错了,比如正常路径是 C:\Program Files (x86)\Windows Kits,但变成了 C:\Program Files \Windows Kits 或 D:\Windows Kits 等。但是这些宏定义在 IDE 中是不能修改的,需要在系统注册表中修改...