当前位置: 首页 > 编程日记 > 正文

14 款命令行常用工具的替代品!

0127f70d95c61b3adf15f1a6227ff66b.gif

作者 | JackTian

来源 | 杰哥的IT之旅

在 Linux 操作系统下,ls (list) 可以说是我们日常使用率较高的命令了,它主要用来显示目标列表,输出信息可以进行彩色加亮显示,以分区不同类型的文件。关于 ls[1] 的语法、选项、实例、扩展知识,这里就不详细介绍了。

一、lsd

lsd[2]是一个基于 Rust 语言编写的 ls 命令替代品,增加了颜色、图标、树视图、更多格式选项等。可以在 Archlinux、Fedora、macOS、FreeBSD、Windows、Android、Ubuntu、Debian 等多种操作系统上安装。

# curl -LO https://github.com/Peltoche/lsd/releases/download/0.21.0/lsd_0.21.0_amd64.deb
# dpkg -i lsd_0.21.0_amd64.deb

94efea504ae253110b0f6df874fab0ed.png

二、broot

broot[3]也是一个基于 Rust 语言编写的 ls 命令替代品。相比 lsd 来说,它是一种查看和导航目录树的新方法,也可以理解为 broot 就是终端里的文件管理器。

broot 的特征:

  • 获得一个目录的概览、甚至是一个大目录

  • 找到一个目录然后 cd

  • 搜索时永远不会丢失文件层次的结构

  • 操作文件、管理文件、预览文件

  • 将标准或个人快捷方式应用于文件

  • 替代 ls

  • 排序看看占用空间

  • 检查 Git 状态

broot 的使用:

使用 broot 时,可以先列出当前目录下的文件信息。

# br -sdph
  • -s:显示文件大小

  • -d:显示文件时间

  • -p:显示文件权限

  • -h:显示隐藏文件

8501ee693b5b653eed3002953f721b74.png

从上述结果可以看出,broot 默认是以树状结构展开子目录,在该界面中,可以完成搜索(输入关键词)、复制(cp <复制后的文件名>)、删除 rm更改文件名(mv <新文件名>)、退出 q基本文件操作。

三、zoxide

zoxide[5]是 cd 命令的替代品,主要用来切换用户当前工作目录,相比 cd 命令来说,zoxide 更智能些,它会记住您最常使用的目录,因此您只需按几下键即可“跳转”到指定的目录。

zoxide 可以在 Linux、macOS、Windows、BSD、Android 等操作系统上运行,用法与 cd 一样。

# zoxide /etc

如果您经常用 zoxide 进入 /etc 目录,您可以只写路径的一部分,从而将自动找到您经常使用的匹配项,只需输入命令:z e,就会自动将e匹配为 /etc,从而进入该目录中。

# z e

四、fzf

fzf[6]是一个通用的交互式命令行模糊查找器,便捷、无依赖、速度极快可用于任何列表、文件、历史命令、进程、主机名、书签、git 提交等。可以在 Debian 9+、Ubuntu 19.10+、Fedora、Arch Linux、FreeBSD、OpenBSD、openSUSE 等多种 Linux 发行版中安装。

# curl -LO http://cn.archive.ubuntu.com/ubuntu/pool/universe/f/fzf/fzf_0.24.3-1_amd64.deb
# dpkg -i fzf_0.24.3-1_amd64.deb

使用 fzf 可以结合 find 的替代品 fd[7]工具。

如果使用模糊查找,找出包含 debug 的文件名,可执行如下命令后,输入debug即可。

# find . -type f | fzf

d9221a51673a6e73847d30b708618b99.png

五、ripgrep (rg)

ripgrep (rg)[8]是 grep 命令的替代品,它是一种面向行的搜索工具,递归地在当前目录中搜索正则表达式模式,支持在 Windows、Linux 和 macOS 上安装。

9e9f6e6120f6ab755c4465c56bd63722.png

43a6c4075bc1c3988d82d8917f90de41.png

ripgrep GitHub 存储库也对相同文件、单个大文件通过 ripgrep、git grep、ugrep、The Silver Searcher、ack、GNU grep 的方式做了鲜明的基准测试对比。从时间上来看 ripgrep 搜索时间相比是最快的。

除此之外,ripgrep 默认过滤、更少的错误、Unicode 支持、带有行号和搜索词高亮。

c205035514f0620869671e790feea46f.png

# apt install ripgrep

ripgrep 跟 grep 用法类似,比如:我要搜索所有内容包含字符串 yum 的 sh 文件,可执行如下命令:

# rg yum *.sh
9:cd /etc/yum.repos.d/
22:yum clean all
23:yum makecache
25:echo "本地yum仓库已经创建完成!"

六、procs

procs[10]是基于 Rust 语言编写的一个 ps 命令的替代品,它支持彩色高亮、多栏关键词搜索等特征的显示进程相关信息,可在 Linux、macOS、Windows 操作系统上进行安装。

ac8dd48336fd5fbe0c159ade006dfbee.png

procs 的安装:

Arch Linux

# sudo pacman -S procs

Fedora

# sudo dnf install procs

RPM

# sudo rpm -i https://github.com/dalance/procs/releases/download/v0.12.1/procs-0.12.1-1.x86_64.rpm

使用 procs 可执行如下命令,将显示所有进程的信息。

# procs

使用非数字 / 关键字进行搜索,添加任何关键字作为参数选项,默认情况下将会自动匹配 USER 到 COMMAND 中,添加与非数字关键字匹配的列,nonnumeric_search可以在配置文件中使用选项。

使用数字作为关键字进行搜索,默认匹配PID,默认情况下,数值被视为完全匹配,非数值被视为部分匹配,添加与数字关键字匹配的列,numeric_search可以在配置文件中使用选项。

如有一些关键字,可通过命令行选项指定关键字之间的逻辑运算。

  • --and:显示与所有关键字匹配的进程

  • --or:显示与任何关键字匹配的进程

  • --nand:除非这些过程与所有关键字匹配,否则将显示这些过程

  • --nor:除非与任何关键字匹配,否则将显示进程

七、diff-so-fancy

diff-so-fancy[11]是 git diff 的替代品,它是基于 node 实现的一款命令行工具,可以为您的终端呈现漂亮的差异,有助于提高代码质量并帮助更快发现缺陷。

4ed7ca7d37778b0ea4b69894f7bba540.png

diff-so-fancy 的安装:

# npm install -g diff-so-fancy

diff-so-fancy 的使用:

直接可以在命令行调用

# git diff --color | diff-so-fancy

通过上述方式使用 diff-so-fancy 虽简单,但会把所有结果全部输出,并没显得差异化。我们可以通过设置 pager 对结果进行分页配置 git 以 diff-so-fancy 用于所有差异输出:

# git config --global core.pager " diff-so-fancy | less --tabs=4 -RFX " 
# git config --global interactive.diffFilter " diff-so-fancy --patch "

将 diff-so-fancy 配置为 Git 的默认 diff 工具就可以了,每次执行 git diff,就会输出它的执行结果。

八、delta

delta[12]是用于 git、diff 和 grep 输出的语法高亮分页器,它允许对 diff 的布局和样式进行大量的更改。

5a5f98b1f095dd9952b669a79bf8d98b.png

delta 的特征:

  • 使用颜色主题突出显示语言的语法

  • 语法高亮从 rg、git grep、grep 等的 grep 输出

  • 带换行的并排视图

  • 支持显示行号

  • 支持合并冲突显示

  • 支持 Git 的 --color-moved 功能

  • n 和 N 键绑定在大差异中的文件之间移动

  • 代码可以直接从差异中复制

delta 的安装:

delta 支持在 Arch Linux、Fedora、FreeBSD、OpenSUSE、Debian / Ubuntu、Windows 等多种操作系统上安装,具体可参考 delta[13] 用户手册的安装部分。

九、mcfly

Mcfly[14]ctrl+r的替代品,主要用来搜索 Shell 操作记录。

9592e331baa9ad249327191271b3acdb.png

mcfly 的特征:

  • 绑定ctrl+r以启动全屏反向历史搜索

  • 基于 Rust 编写,快速、安全

  • 搜索时键入%以匹配任意数量的字符

  • 维护正常 Shell 历史文件,以便可随时停止使用 McFly

  • 支持从 McFly 数据库和 Shell 历史文件中清除任何历史项目的操作

十、choose

choose[15] 是 cut[16]命令的替代品,用来显示行中的指定部分,删除文件中指定字段。cut 经常用来显示文件的内容,类似于 type 命令。

36509dc796d18143724f40bc56ee31d4.png

choose 的特征:

  • 简洁字段、语法简单、类似于 Python 的列表切片

  • 负索引从行尾开始

  • 可选的开始 / 结束索引

  • 零索引

  • 反向范围

  • 对于足够长的输入,略快于cut,远快于awk

  • 使用 Rust 的正则表达式语法的正则表达式字段分隔符

cut 的案例写法:

# cat 2022.txt | cut -d " " -f 1
or
# cut -d " " -f 1 2022.txt

choose 的案例写法:

# cat 2022.txt | choose 1
or
# choose 1 -i 2022.txt

十一、httpie

httpie[17]是 curl 的替代品,一个命令行 HTTP 客户端。httpie 的目标是使 CLI 与 Web 服务的交互尽可能的人性化,用于测试、调试以及通常与 API 和 HTTP 服务器交互,允许 http 和 https 命令创建和发送任意 HTTP 请求,从而使用简单的语法,并能够提供格式化和彩色输出。

75de900905f707bc8f28ff042766a9f0.png

curl  PUT 请求案例写法:

# curl -X PUT -d hello=world example.com

httpie PUT 请求案例写法:

# http PUT example.com hello=world

自定义 HTTP 方法、HTTP 标头和 JSON 数据:

# http PUT pie.dev/put X-API-Token:123 name=John

在不使用离线模式发送的情况下构建和打印请求:

# http --offline pie.dev/post hello=offline

十二、curlie

curlie[18]跟 httpie 是同类项目,curlie 增加了 httpie 的易用性,而不影响它的特性和性能,所有 curl 选项的语法和输出格式都来自 httpie,如果您喜欢 httpie 的界面,但不喜欢 curl 的特性,那 curlie 是最佳的选择。

8cfb3b97db3e0f1785d18b90a355ca4b.png

curlie 与 httpie 的区别:

  • curlie 像 curl,但不像 httpie,文件头是写在 stderr,而不是写在 stdout;

  • 输出没缓冲,所有格式化均动态完成,可轻松调试流数据;

  • 使用 curl 选项打印执行的 curl 命令;

curlie 的语法:

# curlie [CURL_OPTIONS...] [METHOD] URL [ITEM [ITEM]]

curlie 的简单获取:

# curlie httpbin.org/headers

自定义方法、标头和 JSON 数据:

# curlie -v PUT httpbin.org/status/201 X-API-Token:123 name=John

十三、xh

xh[19]是一个用于发送 HTTP 请求的友好且快速的工具,相比 httpie 来说,主要是提高了性能、可作为单个静态链接的二进制文件,易于安装、支持 HTTP / 2、使用 curl 标志内置对 curl 命令的转换、简短的帮助信息可通过备忘单样式进行输出。

b35667ba31dda33a3f4339c7e1e32a63.gif

xh 的语法:

# xh [OPTIONS] <[METHOD] URL> [--] [REQUEST_ITEM]...

xh 的例子:

# 发送 GET 请求
xh httpbin.org/json# 发送一个 POST 请求,请求体{"name": "ahmed", "age": 24}
xh httpbin.org/post name=ahmed age:=24# 发送一个 querystring id=5 & sort=true 的 GET 请求
xh get httpbin.org/json id==5 sort==true# 发送一个 GET 请求,并包含一个名为 x-api-key 的头,值为:66666
xh get httpbin.org/json x-api-key:66666# 发送一个 PUT 请求,并将结果管道到 less
xh put httpbin.org/put id:=49 age:=24 | less# 下载并保存到 test.json
xh -d httpbin.org/json -o test.json# 请求与自定义用户代理
xh httpbin.org/get user-agent:foobar

十四、dog

dog[20]是一个命令行开源 DNS 客户端,dig 命令的替代品,有丰富多彩的输出,理解命令行参数语法,支持 UDP、TCP、DNS-over-TLS 和 DNS-over-HTTPS 协议的网络传输,并且可以发出 DNS 查询。

dog 可以在 Windows、MacOS 和 Linux 操作系统上运行,支持 16 种记录类型,包括:A、AAAA、CAA、CNAME、HINFO、LOC、MX、NAPTR、NS、OPT、PTR、SOA、SRV、SSHFP、TLSA 和 TXT。

dog 的例子:

# 使用默认设置查询域
dog example.net# 查看 MX 记录
dog example.net MX# 使用特定的命名服务器
dog example.net MX @IP地址 x.x.x.x# 使用 TCP 而不是 UDP
dog example.net MX @IP地址 x.x.x.x -T

更多关于 dog 的安装、查询选项、发送选项、协议选项、输出选项可参考 dog 文档。

ca72a5626e8de996333f0996c2b5bf40.png

References

[1] ls:https://wangchujiang.com/linux-command/c/ls.html
[2] lsd:https://github.com/Peltoche/lsd
[3] broot:https://github.com/Canop/broot
[4] exa:https://github.com/ogham/exa
[5] zoxide:https://github.com/ajeetdsouza/zoxide
[6] fzf:https://github.com/junegunn/fzf
[7] fd:https://github.com/sharkdp/fd/
[8] ripgrep (rg):https://github.com/BurntSushi/ripgrep
[9] ag:https://github.com/ggreer/the_silver_searcher
[10] procs:https://github.com/dalance/procs
[11] diff-so-fancy:https://github.com/so-fancy/diff-so-fancy
[12] delta:https://github.com/dandavison/delta
[13] delta:https://dandavison.github.io/delta/installation.html
[14] mcfly:https://github.com/cantino/mcfly
[15] choose:https://github.com/theryangeary/choose
[16] cut:https://wangchujiang.com/linux-command/c/cut.html
[17] httpie:https://github.com/httpie/httpie
[18] curlie:https://github.com/rs/curlie
[19] xh:https://github.com/ducaale/xh
[20] dog:https://github.com/ogham/dog

34d3fad0fd91066f4bfd80884d0ba3fc.gif

b18c4abd517462b957a71315d790d043.png

技术

Python实现一个电影订票系统

资讯

红帽、Docker、SUSE在俄停服

技术

快速实现Resnet残差模型实战

技术

10行Python代码可以做哪些?

c7defac1718b37a0a0c3beaeeca778fc.png

分享

807cd28013aa05c5b48eb0e10b22b805.png

点收藏

51ce4fad9d2f017822eae12e6fc7fbbd.png

点点赞

55d490d2b3d0411b926f15881848975b.png

点在看

相关文章:

C#编码实践:使用委托和特性调用指定函数

2019独角兽企业重金招聘Python工程师标准>>> 建立一个C#控制台应用程序AttributeTest。 建立一个类Operations&#xff0c;代码如下&#xff1a; namespace AttributeTest {public class Operations{public static int Add(int a, int b) { return a b; }public st…

HTTP响应头不缓存

Cache-Control:nocache Pragma:no-cache Expires&#xff1a;-1 <meta http-equivCache-Control content-1/>

CSS面试复习(三):预处理器、工程化方案、三大框架中的CSS

一、预处理器 1、介绍 基于CSS的另一种语言、通过工具编译成CSS、添加了很多CSS不具备的特性、能提升CSS文件的组织 2、less嵌套 3 、sass嵌套 4、 less变量 5、sass变量 6、less mixin 7、sass mixin 8、less extend 9、sass extend 10、less loop 11、sass loop 12、less imp…

用了这么久的 Python,居然没注意到这个操作

作者 | luanhz来源 | 小数志导读Python语言近年来的火热程度自不必说&#xff0c;这一方面得益于其庞大的第三方库的加持&#xff0c;使得其堪称万金油般的存在&#xff1b;另一方面也在于其简洁的语法和易用的函数。是的&#xff0c;Python语法之简洁和函数之丰富&#xff0c;…

apache的keepalive和keepalivetimeout(apache优化)

在APACHE的httpd.conf中&#xff0c;KeepAlive指的是保持连接活跃&#xff0c;类似于Mysql的永久连接。换一句话说&#xff0c;如果将KeepAlive设置为On&#xff0c;那么来自同一客户端的请求就不需要再一次连接&#xff0c;避免每次请求都要新建一个连接而加重服务器的负担。 …

讨论JDK的File.equal()

我们一般比较两个文件中的对象是相同的文件&#xff0c;通常使用java.io.File.equal()。这里&#xff0c;equal()是不是文件内容的比较结果为。象是否指向同一个文件。File的equal()方法。实际上调用了当前文件系统FileSystem的compareTo()。public boolean equals(Object obj)…

百度云满速下载(转)

BaiduPCS-GO下载完毕后可以存放到任何位置&#xff0c;建议存放到无中文目录内。然后打开我的电脑→属性→高级系统设置→环境变量→系统变量→Path→编辑→新建&#xff0c;输入你的BaiduPCS-Go存放目录。注意&#xff1a;是存放目录。 这样CMD才可以正确识别到程序。做好所有…

内容协商 (Content Negotiation)

大多数响应包含一个实体&#xff0c;此实体包含人类用户能理解的信息。通常&#xff0c;希望提供给用户相应于请求最容易得到的实体。对服务器和缓存来说&#xff0c;不幸的是&#xff0c;并不是所有的用户都对这个最容易得到的实体有喜好&#xff0c;并且并不是所有的用户代理…

[经验]无线鼠标和无线键盘真的不能用了?——雷柏的重生之路~

逆天大二的时候托朋友买了个雷柏的无线键盘鼠标&#xff1a; 用了很多年&#xff0c;不仅外观好而且键盘鼠标本身也很好用&#xff0c;可前些日子就光荣牺牲了。。。。 逆天百思不得其"姐"&#xff0c;试着把电池换了&#xff0c;发现还是不行&#xff0c;&#xff0…

数字化探索:建立学习型组织,HR 也能驱动业务营收?

本篇文章暨 CSDN《中国 101 计划》系列数字化转型场景之一。 《中国 101 计划——探索企业数字化发展新生态》为 CSDN 联合《新程序员》、GitCode.net 开源代码仓共同策划推出的系列活动&#xff0c;寻访一百零一个数字化转型场景&#xff0c;聚合呈现并开通评选通道&#xff0…

26期20180716 iptables规则备份恢复 firewalld zone

7月16日任务10.19 iptables规则备份和恢复10.20 firewalld的9个zone10.21 firewalld关于zone的操作10.22 firewalld关于service的操作iptables的规则备份和恢复service iptables save会把配置保存到配置文件中 /etc/sysconfig/iptables如果不想保存在这 可以使用iptables-save …

一口气用 Python 写了13个小游戏,摸鱼达人!

来源 | Python小二1、吃金币源码分享&#xff1a;import os import cfg import sys import pygame import random from modules import *游戏初始化 def initGame():# 初始化pygame, 设置展示窗口pygame.init()screen pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.…

关于URL编码

参考&#xff1a;前端工程师的编码遭遇战http://ued.taobao.com/blog/2011/08/26/encode-war/細 談 URL 編碼关于URL编码作者&#xff1a; 阮一峰日期&#xff1a; 2010年2月11日一、问题的由来URL就是网址&#xff0c;只要上网&#xff0c;就一定会用到。一般来说&#xff0c;…

【设计模式】享元模式

上周代码评审&#xff0c;看到同事使用了“享元模式”。想起自己也不懂&#xff0c;着手学习之。 参考的优秀的文章&#xff1a; Java的享元模式 这篇博文为学习之理解、感悟&#xff0c;如理解不真确&#xff0c;请慷慨指出。 本文只讨论单纯享元模式。 Flyweight&#xff0c;…

用D3.js 十分钟实现字符跳动效果

用D3.js 十分钟实现字符跳动效果 注 本文基于 D3.js 作者 Mike Bostock 的 例子原文分为三部分, 在这里笔者将其整合为了一篇方便阅读. 该效果基于 D3.js, 主要使用到了 d3-selection. 如果对d3-selection的基本使用逻辑不太清楚可以参见 这篇文章. 效果图 Step1 首先代码会随机…

HTTP中的缓存

HTTP典型应用于能通过采用缓存技术而提高性能的分布式信息系统。HTTP/1.1协议包括的许多使缓存尽可能的工作的元素。因为这些元素与协议的其他方面有着千丝万缕的联系&#xff0c;而且他们相互作用、影响&#xff0c;因此有必要单独的来介绍基本的缓存设计。如果缓存不能改善性…

Pandas 多层级索引的数据分析案例,超干货!

作者 | 俊欣来源 | 关于数据分析与可视化今天我们来聊一下Pandas当中的数据集中带有多重索引的数据分析实战通常我们接触比较多的是单层索引&#xff08;左图&#xff09;&#xff0c;而多级索引也就意味着数据集当中的行索引有多个层级&#xff08;右图&#xff09;&#xff0…

Angular - - $sce 和 $sceDelegate

$sce $sce 服务是AngularJs提供的一种严格上下文转义服务。 严格的上下文转义服务 严格的上下文转义(SCE)是一种需要在一定的语境中导致AngularJS绑定值被标记为安全使用语境的模式。由用户通过ng-bind-html绑定任意HTML语句就是这方面的一个例子。我们称这些上下文转义为特权或…

Varnish 和 Squid比较到底强多少

对于坊间流传的:1.varnish的性能比squid高10~20倍2.squid 3.0的性能比2.6有提高本次测试将会揭示结果,是否varnish的架构真的能提升那么多的性能是否squid的新版本在性能上有所提升测试中将不对平台.软件.等等进行优化由于优化水平的关系将极大的影响结果.此次测试中的数据可以…

太强了,Python 开发桌面小工具,让代码替我们干重复的工作~

作者 | Cherish 来源 | 杰哥的IT之旅 决定写这篇文章的初衷是来源于一位小伙伴的问题&#xff0c;关于"如何根据数据源用 Python 自动生成透视表"&#xff0c;这个问题背后有个非常好的解决思路&#xff0c;让代码替我们做重复的工作&#xff0c;从而减轻工作量&…

Windows 2008

Windows2008系统实现多用户登录 https://help.aliyun.com/knowledge_detail/6530052.html?spm5176.7618386.5.1.RTfIVT#Windows2008系统实现多用户登录 ECS Windows2008如何支持用户多会话登入 https://help.aliyun.com/knowledge_detail/6511066.html?spm5176.7618386.5.1.f…

java 复制对象有哪些方式

2019独角兽企业重金招聘Python工程师标准>>> java 复制对象有哪些方式 Apache的 Common beanutils库 org.apache.commons.beanutils.BeanUtils.copyProperties(dest,origin);Springframework 的BeanUtil 依赖: <dependency><groupId>org.springframewor…

mysql常用语句集锦

mysql UNIX时间戳与日期的相互转换 UNIX时间戳转换为日期用函数&#xff1a; FROM_UNIXTIME() select FROM_UNIXTIME(1156219870); 日期转换为UNIX时间戳用函数&#xff1a; UNIX_TIMESTAMP() Select UNIX_TIMESTAMP(’2006-11-04 12:23:00′); 例&#xff1a;mysql查询当天的记…

iOS15.4 来袭:新增“男妈妈”表情及口罩面容解锁、AirTags 反跟踪等新功能

整理 | 章雨铭 责编 | 屠敏出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;今日&#xff0c;苹果发布了iOS/iPadOS 15.4正式版。该版本带来了一些重大新功能的更新&#xff0c;包括在戴口罩时使用Face ID功能&#xff0c;以及一些新的表情符号和Siri语音更新…

symfony2项目访问app_dev.php不显示debug工具栏的问题

2019独角兽企业重金招聘Python工程师标准>>> 当在symfony2中比如添加一个bundle后&#xff0c;访问app_dev.php时不会显示底部debug工具栏&#xff0c;一种情况是模板中没有包含有效的html标签 参考&#xff1a;http://stackoverflow.com/questions/10399089/symfon…

PHP的Smarty

原理&#xff1a;把模板文件编译成php文件&#xff0c;然后每次都去读取下模板的修改时间&#xff0c;没有修改就不编译。然后include这个“编译”后的PHP文件。所谓编译也就是模板用正则替换成含PHP代码的过程。实际上并不会每次请求都编译&#xff0c;所以性能尚可。而SMARTY…

真香!精心整理了 100+Python 字符串常用操作

来源丨萝卜大杂烩作者丨周萝卜字符串作为平时使用最多的数据类型&#xff0c;其常用的操作我们还是很有必要熟记于心的&#xff0c;本文整理了多种字符串的操作的案例&#xff0c;还是非常用心&#xff0c;记得点赞收藏~字符串切片操作test "Python Programming" pr…

IOS版添加phonegap-视频播放插件教程

2019独角兽企业重金招聘Python工程师标准>>> 插件集成过程&#xff1a;1.配置Target链接参数选择 Build Settings | Linking | Other Linker Flags, 将该选项的 Debug/Release 键都配置为-ObjC。2.Vitamio SDK 依赖的系统框架和系统库如下:– AVFoundation.framwork…

C#线程同步的几种方法

在网上也看过一些关于线程同步的文章&#xff0c;其实线程同步有好几种方法&#xff0c;下面我就简单的做一下归纳。 一、volatile关键字 volatile是最简单的一种同步方法&#xff0c;当然简单是要付出代价的。它只能在变量一级做同步&#xff0c;volatile的含义就是告诉处理器…

ecshop模板的原理分析

模板的原理 类似Smarty/ECShop这类模板的原理如下图所示。1.首先是编译模板ECShop/Smart是利用PHP引擎&#xff0c;所以编译的结果是一个PHP文件&#xff0c;其编译过程就是将分隔符{}替换成PHP的标准分隔符<?PHP ?>&#xff0c;将$var替换成 echo $var; 或者print $va…