brew 更新

为什么要定期更新
我发现不少人都不会经常更新,或者只在必须用某个工具的新版本的时候才更新。他们的看法是,更新有可能产生一些意外的问题,反正当前环境足够稳定可以用,干嘛自找麻烦呢?

这个看法对也不对。对是因为,更新产生的潜在问题不可避免。不对是因为总有一天你需要升级的,也许是为了某个工具的新特性,也许是为了修复软件的漏洞,也许你安装的包非要依赖另一个包的新版本,等等。如果隔了很长一段时间才升级,那潜在的小问题可能就会变成大问题。

另一个有意思的现象是,当碰到比较破坏性的事情,比如 Mac OS 大版本更新后,很多人会选择重装 Homebrew 然后顺带安装最新版的包。很少人会去装一个指定的旧版本(除了特殊项目需要)。这说明他们不是不想用新版本,而是不想痛苦地更新。

既然总有一天需要更新,而更新带来问题不可避免,那为什么不更新得频繁点呢?这个道理跟 Git 的冲突解决有相似性。长时间不 pull/push 的代码更容易产生冲突,一个解决方法就是频繁地 commit & merge 。

我现在试着一个月更新一次,两次下来发现这些好处:
每次更新的包很少,更新风险也小。
更容易发现不需要的包,便于清理,不为不需要的东西买单。
定期清理旧版本,释放空间。
更新流程其实都差不多,下面列一下我常用的命令。

更新 Homebrew
要获取最新的包的列表,首先得更新 Homebrew 自己。这可以用 brew update 办到。

brew update

完后会显示可以更新的包列表,其中打钩的是已经安装的包。输出类似下面这样:

Updated Homebrew from fe93aa3 to 6ae64c3.
Updated 1 tap (homebrew/versions).
==> Updated Formulae
awscli cmake ✔ homebrew/versions/libmongoclient-legacy

更新包 (formula)
更新之前,我会用 brew outdated 查看哪些包可以更新。

brew outdated

然后就可以用 brew upgrade 去更新了。Homebrew 会安装新版本的包,但旧版本仍然会保留。

brew upgrade # 更新所有的包
brew upgrade $FORMULA # 更新指定的包

清理旧版本
一般情况下,新版本安装了,旧版本就不需要了。我会用 brew cleanup 清理旧版本和缓存文件。Homebrew 只会清除比当前安装的包更老的版本,所以不用担心有些包没更新但被删了。

brew cleanup # 清理所有包的旧版本
brew cleanup $FORMULA # 清理指定包的旧版本
brew cleanup -n # 查看可清理的旧版本包,不执行实际操作

这样一套下来,该更新的都更新了,旧版本也被清理了。

锁定不想更新的包
如果经常更新的话,brew update 一次更新所有的包是非常方便的。但我们有时候会担心自动升级把一些不希望更新的包更新了。数据库就属于这一类,尤其是 PostgreSQL 跨 minor 版本升级都要迁移数据库的。我们更希望找个时间单独处理它。这时可用 brew pin 去锁定这个包,然后 brew update 就会略过它了。

brew pin FORMULA   # 锁定某个包  
brew unpin FORMULA # 取消锁定

其他几个常用命令
brew info 可以查看包的相关信息,最有用的应该是包依赖和相应的命令。比如 Nginx 会提醒你怎么加 launchctl ,PostgreSQL 会告诉你如何迁移数据库。这些信息会在包安装完成后自动显示,如果忘了的话可以用这个命令很方便地查看。

brew info $FORMULA # 显示某个包的信息
brew info # 显示安装了包数量,文件数量,和总占用空间
brew deps 可以显示包的依赖关系,我常用它来查看已安装的包的依赖,然后判断哪些包是可以安全删除的。

brew deps –installed –tree # 查看已安装的包的依赖,树形显示

输出如下:

elixir (required dependencies)
└── :erlang

wxmac (required dependencies)
├── jpeg
├── libpng
│ └── xz
└── libtiff
└── jpeg

还有很多有用的命令和参数,没事 man brew 一下可以涨不少知识。

小结
不想更新 Homebrew 往往有两个原因,害怕潜在的风险和对工具的不熟悉,我之前也是这样。写这篇文章最开始是为了帮我记录常用的命令方便以后查阅的。希望它也能帮到你。

Windows 平台使用自带工具进行端口转发

原文:Windows 平台使用自带工具进行端口转发

一、前言

   系统:Windows 10 或 Windows Server

二、应用场景

    在不能直接访问计算机某些端口的时候,我们可以使用 Windows 系统自带的端口转发工具转发到能够直接访问的计算机端口,以便进行网络访问。

三、操作步骤

   注意:以下操作需要在【以管理员身份运行】【命令提示符】进行。

   1、建立端口转发规则:192.168.1.100:33890 <=> 192.168.1.101:3389

   在 192.168.1.100 上执行:
netsh interface portproxy add v4tov4 listenaddress=192.168.1.100 listenport=33890 connectaddress=192.168.1.101 connectport=3389
# listenaddress 监听地址,如果本机有多个地址,且需要监听所有地址,此参数可以省略。
# listenport    监听端口,用于监听网络请求的端口。
# connectaddress连接地址,用于转发网络请求的地址。
# connectport   连接端口,用于转发网络请求的端口。
# 可以简写为:
netsh interface portproxy add v4tov4 listenport=33890 connectaddress=192.168.1.101 connectport=3389

执行完毕后,我们可以通过访问 192.168.1.100:33890 来访问 192.168.1.101:3389 了。如果192.168.1.100 开启了防火墙,需要在防火墙放行 33890 端口。

   2、显示端口转发规则:

   在192.168.1.100 上执行:
# 显示所有转发规则
netsh interface portproxy show all
 
# 仅显示 IPv4ToIPv4 的转发规则
netsh interface portproxy show v4tov4
 
# 仅显示 IPv6ToIPv6 的转发规则
netsh interface portproxy show v6tov6
 
# 仅显示 IPv4ToIPv6 的转发规则
netsh interface portproxy show v4tov6
 
# 仅显示 IPv6ToIPv4 的转发规则
netsh interface portproxy show v6tov4

3、删除端口转发规则

       在192.168.1.100 上执行

# 如果在创建端口转发规则的时候有 listenaddress ,在删除的时候需要加上 listenaddress
netsh interface portproxy delete v4tov4 listenaddress=192.168.1.100 listenport=33890
 
# 如果在创建端口转发规则的时候没有 listenaddress ,在删除的时候不用加 listenaddress
netsh interface portproxy delete v4tov4 listenport=33890

lftp命令 非常详细的lftp指令

lftp命令_非常详细的lftp指令_weixin_39828457的博客-CSDN博客

lftp的意思是用lftp登录到ftp服务器上

lftp ip -p port -u user,’password’ -e’commands ; bye’

下面介绍下ftp里面常用的指令

1、登录ftp

代码:lftp 用户名:密码@ftp地址:传送端口(默认21)

用法

(1)lftp username:password@127.0.0.1:21 回车

(2)lftp username@127.0.0.1 回车 ##默认21端口 回车后输入密码

(3)lftp 127.0.0.1 回车 ##回车后 login 登录

(4)lftp 回车 –> open 127.0.0.1 –> login 登录


2、lftp中文乱码问题

如果登录后看到的都是中文乱码(因为一般本地都是utf-8的编码),怎么半呢?可以用 set 命令来解决:

set ftp:charset gbk(或者 gb2312 或 utf-8) ##设置ftp端的编码格式

set file:charset utf-8 (…同上) ##设置本地编码格式

附:set命令的技巧

(1)输入set 查看已经设置好的命令

(2)set -a 查看所有可以设置的命令


3、查找ftp端文件

ls *.txt ##查找当前目录下的所有txt文件

ls ./123/ ##列出123目录下所有文件

find . -name “*.txt” ##递归查找站点上所有的txt文件

find ./xx -name “*.txt” ##查找xx目录下所有的txt文件

附1:

ls第二次读取的是本地缓存,可以用 rels 代替 ls

或者catch off / catch on 来开关catch,catch flush清空本地catch

附2: 浏览本地目录的命令可用!ls, 如 !ls /usr/local/bin/

4、下载文件下载文件之前要先设置好本地的目录,用来存放下载的文件

lcd /home/123/web ##设置本地存放目录 默认为 /home/usr

get 123.txt ##下载123.txt文件到 /home/123/web 中

get -c 123.txt ##断点续传下载

mget *.txt ##批量下载所有txt文件

mget -c *.txt ##断点续传

mget -c ./123/aaa/*.txt ##断点续传、批量下载ftp端aaa目录下的所有txt文件

pget -c -n 10 file.dat

##以最多10个线程以允许断点续传的方式下载file.dat

##可以通过设置 set pget:default-n 5 的值而使用默认值。

mirror aaa/

##将aaa目录整个的下载下来,子目录也会自动复制 本地自动建立目录

5、上传文件put 123.txt ##同下载

mput *.txt ##同下载

mirror -R aaa/ ##同下载

6、设置被动/非被动模式set ftp:passive-mode 1 ## 1 被动 0非主动

多任务处理ctrl+z ##将当前进行的任务移交后台处理

wait ##将后台处理任务调至前台查看

jobs ##查看后台进行的任务列表

kill all 或者 job_no ##删除所有任务 或 指定的任务

##将任务加入任务列表

queue get 123.txt

queue put 234.txt

queue mirror aaa/

queue ##查看任务列表j

obs ##查看后台任务列表

queue start ##开始任务列表

queue stop ##停止任务列表


7、其他命令

定义别名:alias []

alias less more

alias reconnect “close; cd .”

直接输入 alias 即可看到目前定义了那些别名。如果只输入 alias name 的话, 则是取消 name 这个别名。

bookmark SUBCMD

设定书签, 可将目前站台及所在目录设成书签, 下次可直接进来, 不用再 cd 来 cd 去的

bookmark add name 用来新增名称为 name 的书签

bookmark del name 删除名称为 name 的书签

bookmark list 显示目前有设定那些书签(另外直接打 bookmark 和 bookmark list 的结果一样)

bookmark edit 呼叫编辑器修改书签 (~/.lftp/bookmarks)

cd 切换远端目录

cache SUBCMD

管理 lftp 的 cache

rels []

从 cache 中显示远端档案列表

rels 则不会从 cache 中读取

recls opts [path/]pattern

从 cache 中显示远端的档案列表, 应该算是 ls 的加强版, 有很多参数可用,应该是可用来产生各种不同>的档案列表以供其他程式使用。

recls 则不会从 cache 中读取

du options

计算远端整个目录占用容量

get OPTS -o

抓取远端档案

get rfile -o lfile

抓 rfile 到本地改名为 lfile

-c 为续传

-E 抓档完成后, 将远端的档案砍了

-a 为 ascii mode, 预设为 binary mode

-O 设定 base directory 为本地端放档案的目录

mget OPTS

下载远端档案(可用 wildcard expansion 也就是 *)

pget OPTS -o

使用多个连结来下载档案, 预设为五个。

-n 3 为叁个连结

jobs -v

显示目前有那些程序在背景执行

-v 显示详细的资讯(-v 可多加几个来显示更详细的资讯)

lcd

切换本地端的目录

mirror OPTS remote [local]

下载整个目录(楼上的 get 只能用来抓档案)

-c 续传

-e 这个要小心一些, 比较远端和本地端的档案, 假如远端没有的, 就将本地端的档案删除, 也就是将本地端和远端资料同步。

-R 上传整个目录

-n 只下载较新的档案

-r 不用递回到目录中

–parallel=n 同时下载 n 个档案(预设一次只下载一个)

How rdp passwords are encrypted

Ever wondered how mstsc saves passwords? If you open an RDP file with a text editor like Notepad you can see the encrypted password. In this article I will show you how to encrypt and decrypt these passwords. Besides password recovery this enables you to create rpd files programmatically or perhaps update the password in many rdp files with a batch file.

So if we save a password with mstsc what does it look like? To see that open an rdp file with a text editor (eg Notepad) and you will see something like this:

screen mode id:i:1 
desktopwidth:i:1280 
desktopheight:i:750 
session bpp:i:24 
winposstr:s:2,3,188,8,1062,721 
full address:s:MyServer 
compression:i:1 
keyboardhook:i:2 
audiomode:i:0 
redirectdrives:i:0 
redirectprinters:i:0 
redirectcomports:i:0 
redirectsmartcards:i:0 
displayconnectionbar:i:1 
autoreconnection enabled:i:1 
username:s:MyUserName 
domain:s:MyDomain 
alternate shell:s: 
shell working directory:s: 
password 51:b:01000000D08C9DDF0115D1118C7A00C04FC297EB0100000052A9E191EA75A948B359790578C9371A0000000008000000700073007700000003660000A8000000100000000A1DCCD2E50775CA25EC3857164B34DC0000000004800000A000000010000000FCE1A645B9B61AA450946BB6F955058108020000D83591CA47562D6DDAA689F050AE145039EBE22E00D1D3AEAA98373C7B63C3E8E7149072DF989EA43EFCE20513AD3D27B11BE7F17066A688E1DCE828AF85460AAC327B38E90776DB962888E4393D19637578984B19A187AAD95F6D2726ADE7DD315FF56C15FF5B3031014EDDCC3C24D1B81779AFDB006EE575F5BEFB8D2D2138D9D9D642BBB251CC5ED7226968764856EC660A646BACE748A13D6002A9A537AA70710615650B9387EED66DE28BD57B304BBDD7B581B943DA628EB0289E30A8BA784B76F7885BECCAB4FEF7820E97EE3C6E036EEAF6EAA669288DF2FCACC9BEC045C907EBBDE87AFB8CC6B07A600BD63AC891B61D95C2265DD9FD5E635D61BFBF5EDC28311375066611C610FB533D64515B643C82F57D9B183B05C156D91BC0974D38E546022B139E82452E6F1EDF76E52F732C3904E5E433F8F3D488DB0698427DBB0791A9F207F8CB6654CB8410BAF4A59C4F9E821E589ABC1E6E6E1D432181B690408F6884FE1007895A4D26D4A5A2C7458EE747DA35D44AC9FB08AB5477EA3E7CCDB3E37EE20FAFD0D0CF9584E420598B7003B347943AC28048F45E0FD21AD08148FFADCE0E7877219259A7BE722FFAE845A429BA2CF0A71F2D19EA7495530FABDB5106E8D404A38A7E6394C38457640EA7398C5D55F0C4D342CC6A39C77E10A2A5145AEA40B14F5C7C3760334D83C9BE748383FADE231248537353817D51F7B44F61B406ABC61400000071C354139F458B02D978015F785B97F7F6B307380 
disable wallpaper:i:1 
disable full window drag:i:1 
disable menu anims:i:1 
disable themes:i:0 
disable cursor setting:i:0 
bitmapcachepersistenable:i:1

As you can see the password is somehow encrypted before it was saved and automatically decrypted when you open the file with mstsc. .

I did some analysis on mstsc.exe and mstsc uses the functions CryptProtectData and CryptUnProtectData which are both exported by crypt32.dll. Since those API calls are documented let’s try to encrypt a password with mstsc and one ourselves and compare the output:

function CryptRDPPassword(sPassword: string): string; 
var DataIn: DATA_BLOB; 
    DataOut: DATA_BLOB; 
    pwDescription: PWideChar; 
    PwdHash: string; 
begin 
  PwdHash := '';                                      

  DataOut.cbData := 0; 
  DataOut.pbData := nil;                                      

  // RDP uses UniCode 
  DataIn.pbData := Pointer(WideString(sPassword)); 
  DataIn.cbData := Length(sPassword) * SizeOf(WChar);                                      

  // RDP always sets description to psw 
  pwDescription := WideString('psw');                                      

  if CryptProtectData(@DataIn, 
                      pwDescription, 
                      nil, 
                      nil, 
                      nil, 
                      CRYPTPROTECT_UI_FORBIDDEN,  // Never show interface 
                      @DataOut) then 
  begin 
    PwdHash := BlobDataToHexStr(DataOut.pbData, DataOut.cbData); 
  end; 
  Result := PwdHash;                                      

  // Cleanup 
  LocalFree(Cardinal(DataOut.pbData)); 
  LocalFree(Cardinal(DataIn.pbData));                                      

end;

So we encrypt the password “secret” and compare this with the same password saved by mstsc
MSTSC:

01000000D08C9DDF0115D1118C7A00C04FC297EB0100000052A9E191EA75A948B359790578C9371A0000000008000000700073007700000003660000A8000000100000000A1DCCD2E50775CA25EC3857164B34DC0000000004800000A000000010000000FCE1A645B9B61AA450946BB6F955058108020000D83591CA47562D6DDAA689F050AE145039EBE22E00D1D3AEAA98373C7B63C3E8E7149072DF989EA43EFCE20513AD3D27B11BE7F17066A688E1DCE828AF85460AAC327B38E90776DB962888E4393D19637578984B19A187AAD95F6D2726ADE7DD315FF56C15FF5B3031014EDDCC3C24D1B81779AFDB006EE575F5BEFB8D2D2138D9D9D642BBB251CC5ED7226968764856EC660A646BACE748A13D6002A9A537AA70710615650B9387EED66DE28BD57B304BBDD7B581B943DA628EB0289E30A8BA784B76F7885BECCAB4FEF7820E97EE3C6E036EEAF6EAA669288DF2FCACC9BEC045C907EBBDE87AFB8CC6B07A600BD63AC891B61D95C2265DD9FD5E635D61BFBF5EDC28311375066611C610FB533D64515B643C82F57D9B183B05C156D91BC0974D38E546022B139E82452E6F1EDF76E52F732C3904E5E433F8F3D488DB0698427DBB0791A9F207F8CB6654CB8410BAF4A59C4F9E821E589ABC1E6E6E1D432181B690408F6884FE1007895A4D26D4A5A2C7458EE747DA35D44AC9FB08AB5477EA3E7CCDB3E37EE20FAFD0D0CF9584E420598B7003B347943AC28048F45E0FD21AD08148FFADCE0E7877219259A7BE722FFAE845A429BA2CF0A71F2D19EA7495530FABDB5106E8D404A38A7E6394C38457640EA7398C5D55F0C4D342CC6A39C77E10A2A5145AEA40B14F5C7C3760334D83C9BE748383FADE231248537353817D51F7B44F61B406ABC61400000071C354139F458B02D978015F785B97F7F6B307380

CryptRDPPassword:

01000000D08C9DDF0115D1118C7A00C04FC297EB0100000052A9E191EA75A948B359790578C9371A0000000008000000700073007700000003660000A800000010000000F68F88DF66E436846C077BF402E46EB90000000004800000A000000010000000FE8CEBCF943F9CEC9F3C3A1E0710BEC510000000A647D6ADB728E51F071C854F0BFFF66F140000003B271D41D3D256BCCC4DD255701C14B7489A081D

As you can see the length of a password encrypted by mstsc is 1329 bytes and the one from CryptRDPPassword is smaller. Actually mstsc generates fixed length passwords and our function’s length is based upon the password. Even more strange is that mstsc password is always 1329 bytes because the input password is unicode which should produce an even size length. It doesn’t really matter though because mstsc.exe accepts the smaller sized passwords without any problems.
For now I will leave with a demo tool I wrote to encrypt and decrypt rdp passwords. But in a followup article I will show you how te encrypt the passwords to the full length 1329 bytes the same way mstsc does.

Remote Desktop Password Encryption & Decryption Tool
Do you find this article usefull, why not leave a comment?

原文:https://www.remkoweijnen.nl/blog/2007/10/18/how-rdp-passwords-are-encrypted

欢迎使用 MWeb

MWeb 是专业的 Markdown 写作、记笔记、静态博客生成软件,目前已支持 Mac,iPad 和 iPhone。MWeb 有以下特色:

软件本身:

  • 使用原生的 macOS 技术打造,追求与系统的完美结合。
  • 原则上,首先是追求界面简洁和高性能,然后才是强大易用,功能全面。

Markdown 语法:

  • 使用 GitHub Flavored Markdown 语法,简称 GFM 语法。
  • 支持表格、TOC、LaTeX、代码块、任务列表、脚注等。
  • 画图库支持 mermaid, viz, ECharts, PlantUML, Sequence, Flow。

Markdown 辅助:

  • 支持截图并粘贴、复制并粘贴、拖拽等方式插入图片并直接显示在编辑器内。
  • 在兼容 Markdown 语法的情况下支持设置图片宽度。
  • 好用的表格插入和 LaTeX 书写辅助。

Markdown 输出:

  • 支持导出为图片、HTML、Epub、PDF、RTF、Docx。
  • 支持发布到 WordPress、支持 Metaweblog API 协议的服务、Wordpress.com、印象笔记(Evernote)、Blogger、Medium、Tumblr、语雀、Ghost、少数派 Matrix。
  • 图片上传服务(图床)支持 Imgur、七牛云、又拍云、腾讯云 COS、阿里云 OSS、SM.MS和自定义的图床服务。

Markdown 笔记:

  • 强大的文档库支持分类树和标签管理文档,文档可归类于多个分类,可以把分类整个导出为 Epub、PDF 和生成静态网站。非常合适用于笔记、个人知识收集、管理和输出。
  • 快速笔记:随意增加笔记及图片等素材,支持以天为单位把增加的素材组合在一个文档内,方便整理及记录历史收集情况。
  • 快速搜索:目前已支持全局快捷键调出搜索。

外部 Markdown 文档:

  • 外部 Markdown 文档使用外部模式管理。外部模式使用目录树的方式编辑和管理你的 Markdown 文档,还能很好的支持 GitBook、Jekyll、Hexo 等等编辑和图片插入。

MWeb 文档:

如果要更详细了解 MWeb,建议你一定要去看一下官网的帮助文档,网址为:https://zh.mweb.im/help.html。我们建议在使用文档库之前,一定要阅读一下 MWeb 文档库详细介绍 这篇文章,以便更好的使用文档库。

帮助我们改进 MWeb

如果你喜欢 MWeb,想让它变得更好,你可以:

  1. 推荐 MWeb,让更多的人知道。
  2. 给我们发反馈和建议:coderforart+2333@gmail.com
  3. 在 Mac App Store 上评价 (如果是在 MAS 上购买的话)。

Piwigo Sylvia theme专辑图片垂直居中

修改 themes/Sylvia/theme.css

.thumbnailCategory .illustration {
    background: transparent url(images/cat_top-left.gif) no-repeat scroll left top;
    padding: 0 5px 0 10px;
    margin: 0 !important;
    text-align: center;
    line-height:145px;
}

.thumbnailCategory .illustration a {
    display: block;
    margin: 0 auto;
    padding: 20px 4px 0;
    border: 0;
}

.thumbnailCategory .illustration a img {
    display: inline-block;
    vertical-align: middle;
}

centOS7下SVN的安装和使用

转载:du_xian_sheng@CSDN

1. 安装

CentOS通过yum安装subversion。

# yum install subversion

subversion安装在/bin目录,查看目录命令:

# which svnserve
/usr/bin/svnserve

检查一下subversion是否安装成功。不要使用1.8版本

# svnserve --version
svnserve, version 1.7.14 (r1542130)

2. 建立版本库

subversion默认以/var/svn作为数据根目录,可以通过/etc/sysconfig/svnserve修改这个默认位置。

# vim /etc/sysconfig/svnserve

文件内容 OPTIONS=”-r /var/svn” 可修改

使用svnadmin建立版本库svntest。

# mkdir -p /var/svn/svntest //递归创建多个目录
# svnadmin create /var/svn/svntest
# ll /data/svn/svntest //查看目录中内容
drwxr-xr-x. 2 root root  51 Nov 10 14:42 conf
drwxr-sr-x. 6 root root 4096 Nov 10 14:42 db
-r--r--r--. 1 root root    2 Nov 10 14:42 format
drwxr-xr-x. 2 root root 4096 Nov 10 14:42 hooks
drwxr-xr-x. 2 root root  39 Nov 10 14:42 locks
-rw-r--r--. 1 root root  229 Nov 10 14:42 README.txt

3. 配置

#cd /var/svn/svntest

a、编辑用户文件passwd,新增两个用户:admin和guest。

# vim conf/passwd
[users]
admin = admin
guest = guest

b、编辑权限文件authz,用户admin设置可读写权限,guest设置只读权限。

# vim conf/authz
[/]
admin = rw
guest = r

c、编辑svnserve.conf:

# vim conf/svnserve.conf
[general]
anon-access = none #控制非鉴权用户访问版本库的权限
auth-access = write #控制鉴权用户访问版本库的权限
password-db = passwd #指定用户名口令文件名
authz-db = authz #指定权限配置文件名
//realm = svntest #指定版本库的认证域,即在登录时提示的认证域名称 //测试不需要

 4. SVN服务

启动SVN服务。

# systemctl start svnserve.service

检查服务是否启动成功。

# ps aux | grep svn
root 16349 0.0 0.1 162180 900 ? Ss 15:01 0:00 /usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid -r /opt/svn

通过netstat可以看到SVN打开了3690端口。

# netstat -tnlp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 16349/svnserve

设置成开机启动。

# systemctl enable svnserve.service

5. 更改防火墙设置大坑,注意阿里云要开相应端口3690

# vim /etc/sysconfig/iptables

添加一下两行 vim操作 yy p

-A INPUT -m state –state NEW -m tcp -p tcp –dport 3690 -j ACCEPT
-A OUTPUT -m state –state NEW -m tcp -p tcp –dport 3690 -j ACCEPT //不需要

然后退出编辑,重启防火墙

查看 

# iptables -L -n
# service iptables restart //这是centOS6 的命令
# /bin/systemctl restart iptables.service

6. 客户端测试

客户端可以通过TortoriseSVN测试。

Linux下客户端使用SVN

将文件checkout到本地目录svn666

svn checkout svn://127.0.0.1 ./svn666

有修改的时候

# svn add * //添加文件
# svn commit -m '这是注释内容' //提交
# svn update //更新

网段划分例子

将172.17.0.0划分为14个子网(实际是16个),请计算出子网的子网掩码,以及在每个子网中主机IP地址的子网如下:

172.17.0.0/20
有效的地址范围是:172.17.0.1-172.17.15.254
172.17.16.0/20
有效的地址范围是:172.17.16.1-172.17.31.254
172.17.32.0/20
有效的地址范围是:172.17.32.1-172.17.47.254
172.17.48.0/20
有效的地址范围是:172.17.48.1-172.17.63.254
172.17.64.0/20
有效的地址范围是:172.17.64.1-172.17.79.254
172.17.80.0/20
有效的地址范围是:172.17.80.1-172.17.95.254
172.17.96.0/20
有效的地址范围是:172.17.96.1-172.17.111.254
172.17.112.0/20
有效的地址范围是:172.17.112.1-172.17.127.254
172.17.128.0/20
有效的地址范围是:172.17.128.1-172.17.143.254
172.17.144.0/20
有效的地址范围是:172.17.144.1-172.17.159.254
172.17.160.0/20
有效的地址范围是:172.17.160.1-172.17.175.254
172.17.176.0/20
有效的地址范围是:172.17.176.1-172.17.191.254
172.17.192.0/20
有效的地址范围是:172.17.192.1-172.17.207.254
172.17.208.0/20
有效的地址范围是:172.17.208.1-172.17.223.254
172.17.224.0/20
有效的地址范围是:172.17.224.1-172.17.239.254
172.17.240.0/20
有效的地址范围是:172.17.240.1-172.17.255.254

Mac 终端里神秘的 bogon 及解决方法

如题,Mac 下的终端经常有时候前面的计算机名会错误的显示成 bogon. 这是因为终端会先向 DNS 请求查询当前 IP 的反向域名解析的结果,如果查询不到再显示我们设置的计算机名。而由于我们的 DNS 错误地将保留地址反向的 NS 查询结果返回了 bogon. 其中 bogon 本应该用来指虚假的 IP 地址,而非保留 IP 地址。因此就出现了会时不时地打印 bogon 这种奇怪名字作为计算机名的现象了。那么如何让终端只显示我们想要的计算机名而不总是从 DNS 返回结果呢?

解决方案:在终端中执行以下命令即可(需要输入一次管理员密码)

sudo hostname your-desired-host-name
sudo scutil --set LocalHostName $(hostname)
sudo scutil --set HostName $(hostname)

Linux下DNS查询

一般来说linux下查询域名解析有两种选择,nslookup或者dig,而在使用上我觉得dig更加方便顺手。

如果是在debian下的话,只要装上dnsutils这个包就可以使用dig命令了。最基本的使用方式就是

dig www.oolec.com

即查询域名的A记录,查询的dns服务器将采用系统配置的服务器,即/etc/resovle.conf 中的。如果要查询其他类型的记录,比如MX,CNAME,NS,PTR等,只需将类型加在命令后面即可

dig www.oolec.com mx
dig www.oolec.com ns

此外,如果你是一个系统管理员,部署好了一台dns服务器之后想对它进行解析测试,就必须要显式指定待测试的dns服务器地址了,例如

dig @202.106.0.20 www.oolec.com a

默认情况下dig将采用udp协议进行查询,如果要采用tcp方式,可以加上 +tcp参数

dig www.oolec.com a +tcp

另外一个重要的功能是+trace参数,使用这个参数之后将显示从根域逐级查询的过程

dig www.oolec.com a +trace

比如,对域名www.linuxers.cn A记录的trace查询可以看到根域.,顶级域.cn,以及linuxers.cn的域名权威服务器的地址及其各自的返回结果,这样对于追踪dns解析中的问题有很大的帮助。

dig www.linuxers.cn a +trace