PageSourceSearch

https://xstarcd.github.io/wiki/cygwin/index.html

html xstarcd.github.io collected 2026-10-03 10:11:58 UTC 27,327 bytes, 1,038 lines download raw bytes

1<!DOCTYPE html>
2<html>
3<head>
4    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5    <link rel="Stylesheet" type="text/css" href="../styles/style.css" />
6    <title>Cygwin使用</title>
7</head>
8<body>
9<div id="header">
10    <ul id="top-nav">
11    <li><a href="../index.html">首页</a></li>
12    <li><a href="index.html">分类首页</a></li>
13    </ul>
14</div>
15<div id="cse"></div>
16<div id="main">
17
18<div class="toc">
19<ul>
20<li><a href="#toc_1">Cygwin使用</a>
21<ul>
22<li><a href="#toc_1.1">常用软件安装</a>
23<ul>
24<li><a href="#toc_1.1.1">安装apt-cyg</a>
25<li><a href="#toc_1.1.2">安装常用工具</a>
26<li><a href="#toc_1.1.3">安装python环境</a>
27</ul>
28<li><a href="#toc_1.2">常用工具设置</a>
29<ul>
30<li><a href="#toc_1.2.1">Cygwin终端</a>
31<li><a href="#toc_1.2.2">bashrc</a>
32<li><a href="#toc_1.2.3">screen/tmux设置</a>
33<li><a href="#toc_1.2.4">~/.vimrc</a>
34<li><a href="#toc_1.2.5">~/.ssh/config</a>
35</ul>
36<li><a href="#toc_1.3">其他设置</a>
37<ul>
38<li><a href="#toc_1.3.1">SSH Server</a>
39<li><a href="#toc_1.3.2">crontab</a>
40<li><a href="#toc_1.3.3">nontsec</a>
41</ul>
42<li><a href="#toc_1.4">中文乱码设置</a>
43<li><a href="#toc_1.5">技巧收集</a>
44<li><a href="#toc_1.6">SSH Agent on Cygwin</a>
45<li><a href="#toc_1.7">Windows Terminal</a>
46<li><a href="#toc_1.8">conEmu</a>
47<li><a href="#toc_1.9">脚本添加ssh主机名自动完成</a>
48<ul>
49<li><a href="#toc_1.9.1">在etc中添加</a>
50<li><a href="#toc_1.9.2">在~/.bashrc中添加</a>
51</ul>
52</ul>
53</ul>
54</div>
55
56<h1 id="toc_1">Cygwin使用</h1>
57
58<p>
59Update: 2013-01-04
60</p>
61
62<ul>
63<li>
64<a href="http://www.cygwin.com/">Cygwin</a>
65
66<li>
67<a href="http://www.redhat.com/services/custom/cygwin/">RedHat Cygwin</a>
68
69<li>
70<a href="KeepassX_SecureCRT.html">KeepassX_SecureCRT</a>
71
72</ul>
73
74<h2 id="toc_1.1">常用软件安装</h2>
75
76<ul>
77<li>
78安装Cygwin时,应安装上:wget, tar, gawk, bzip2, nc, xz, openssh
79
80</ul>
81
82<h3 id="toc_1.1.1">安装apt-cyg</h3>
83
84<ul>
85<li>
86修改x86/x86_64源、xz压缩包支持、sha512sum的apt-cyg:<a href="../files/shell/apt-cyg">apt-cyg</a>
87<pre class="brush: bash">
88#wget http://apt-cyg.googlecode.com/svn/trunk/apt-cyg
89wget http://xstarcd.github.io/wiki/files/shell/apt-cyg -O /usr/local/bin/apt-cyg
90chmod +x /usr/local/bin/apt-cyg
91apt-cyg --help
92cygcheck --help
93# 修改软件源
94#apt-cyg --mirror http://mirrors.163.com/cygwin
95#apt-cyg --mirror http://mirrors.aliyun.com/cygwin
96apt-cyg --mirror https://mirrors.kernel.org/sourceware/cygwin/
97
98# ftp://mirror.mcs.anl.gov/pub/cygwin
99# http://mirrors.163.com/cygwin
100# ftp://ftp.ges.redhat.com/private/releng/cygwin-1.8
101</pre>
102
103<li>
104201308后Cygwin版本变更,需修改apt-cyg
105
106<ul>
107<li>
108软件源路径变更
109
110<ul>
111<li>
1122013-08-08后Cygwin分为x86、x86_64两个安装包,源路径也改不同路径(x86、x86_64),因此apt-cyg下载setup.bz2和setup.ini时发生404错误。
113
114<li>
115在apt-cyg增加MPath来支持x86、x86_64版本。
116
117</ul>
118<li>
119添加xz压缩包支持:修改apt-cyg根据包文件扩展名选择binzip2或xz来进行解压。
120
121</ul>
122<li>
123cygwin 2.0.0中改用sha512sum替代md5校验,执行报<code>cygwin64 MD5 sum did not match, exiting</code>错误
124
125<ul>
126<li>
127修改apt-cyg,将md5sum 换成 sha512sum
128
129</ul>
130</ul>
131
132<h3 id="toc_1.1.2">安装常用工具</h3>
133<pre class="brush: bash">
134# apt-cyg install mandoc cygwin-doc
135apt-cyg install vim screen tmux wget subversion openssh pwgen gzip bzip3 curl rsync bash-completion \
136 lftp nc tree p7zip connect-proxy util-linux bind-utils inetutils
137</pre>
138
139<h3 id="toc_1.1.3">安装python环境</h3>
140<pre class="brush: bash">
141apt-cyg install python python-crypto
142</pre>
143
144<ul>
145<li>
146安装easy_install
147
148<ul>
149<li>
150参考:<a href="http://atbrox.com/2009/09/21/how-to-get-pipvirtualenvfabric-working-on-cygwin/">http://atbrox.com/2009/09/21/how-to-get-pipvirtualenvfabric-working-on-cygwin/</a>
151<pre class="brush: bash">
152#wget http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg
153#sh setuptools-0.6c11-py2.6.egg
154
155apt-cyg install python-setuptools
156easy_install pip
157
158pip install pssh
159# ansible
160apt-cyg python-crypto
161pip install ansible
162#pip install moin
163</pre>
164
165</ul>
166</ul>
167
168<h2 id="toc_1.2">常用工具设置</h2>
169
170<h3 id="toc_1.2.1">Cygwin终端</h3>
171<ul>
172<li>
173~/.minttyrc
174<pre class="brush:bash">
175BoldAsFont=no
176Font=YaHei Consolas hybrid
177FontHeight=12
178#BackgroundColour=0,43,53
179BackgroundColour=11,22,33
180ForegroundColour=191,191,191
181FontSmoothing=full
182# 关闭CTRL_+/-/0放大缩小功能,避免与vim窗口调整冲突
183ZoomShortcuts=no
184</pre>
185
186<li>
187颜色、字体选择参数
188<pre>
189背景颜色:(RGB)0,40,51;或11,22,33(就是这个Wiki页面的背景色)
190字体颜色:(RGB)31,148,150(较暗);或191,191,191
191目录颜色:(RGB)255,128,128
192压缩文件颜色:(RGB)128,128,0
193
194字体:Consolas,Courier New,Fixedsys,YaHei Consolas hybrid
195</pre>
196
197<li>
198YaHei Consolas hybrid.1.12字体下载:
199
200<ul>
201<li>
202<a href="../files/YaHei.Consolas.1.12.7z">YaHei.Consolas.1.12.7z</a>
203
204<li>
205<a href="http://pan.baidu.com/s/1jHu9aHw">百度网盘下载:YaHei.Consolas.1.12.7z</a>
206
207</ul>
208</ul>
209
210<h3 id="toc_1.2.2">bashrc</h3>
211<ul>
212<li>
213~/.bashrc
214<pre class="brush:bash">
215alias grep='grep --color'                     # show differences in colour
216alias egrep='egrep --color=auto'              # show differences in colour
217alias fgrep='fgrep --color=auto'              # show differences in colour
218alias ls='ls -hF --color=tty'                 # classify files in colour
219alias ll='ls -la'                             # long list
220alias la='ls -A'                              # all but . and ..
221alias l='ls -CF'                              #
222
223# 关闭ControlMaster auto,避免ssh连接时因不支持unix-socket报如下错误问题:
224# mm_receive_fd: no message header
225# process_mux_new_session: failed to receive fd 0 from slave
226alias ssh="ssh -S none"
227
228# 将常用Windows命令输出转换为utf8,解决Windows自有命令显示乱码问题
229# 安装iconv工具: apt-cyg install libiconv
230_runiconv () { _cmd=$1;shift;$_cmd $* 2&gt;&amp;1|iconv -f gbk -t utf8; }
231alias ping='_runiconv ping'
232alias ifconfig='_runiconv ipconfig'
233alias netstat='_runiconv netstat'
234alias tracert='_runiconv tracert'
235alias route='_runiconv route'
236</pre>
237
238</ul>
239
240<ul>
241<li>
242~/.bash_profile
243<pre class="brush:bash">
244PS1="[\w]$"
245#彩色的PS1会造成命令编辑时光标定位错误
246#PS1="\e[0;32m[\u@\h \W]\$ \e[m"
247</pre>
248
249</ul>
250
251<h3 id="toc_1.2.3">screen/tmux设置</h3>
252
253<pre class="brush: bash">
254#
255# ~/.screenrc
256#
257# 启动时不显示欢迎屏幕
258startup_message off
259
260# 定义screen的功能键为Ctrl-A。向终端输入Ctrl-A时应按 Ctrl-A a。
261#escape ^Aa
262
263# 屏幕缓冲区 1024 行。
264defscrollback 1024
265
266# 显示窗口列表
267caption always "%-w%{= BW}%50&gt;%n %t%{-}%+w%&lt;"
268
269# 按 Ctrl-A w 或 Ctrl-A Ctrl-W 显示窗口列表
270bind w windowlist -b
271#bind ^w windowlist -b
272
273#在使用screen过程中,经常会遇到“闪屏”的问题,这是可以关掉的。
274#快速关掉:也就是先输入CTRL + a,再输入CTRL + g。
275#永久关闭:修改/etc/screenrc 加入
276vbell off
277
278</pre>
279
280<ul>
281<li>
282~/.tmux.conf
283<pre class="brush:bash">
284# ~/.tmux.conf
285
286# prefix key (Ctrl+a)
287set -g prefix ^a     #set -g prefix C-a
288unbind ^b            #unbind C-b
289bind a send-prefix   # prefix key (Ctrl+a)
290
291# split window
292unbind '"'
293unbind %
294bind - splitw -v # vertical split (prefix -)
295bind | splitw -h # horizontal split (prefix |)
296
297# select pane
298bind k selectp -U # above (prefix k) bind-key k select-pane -U
299bind j selectp -D # below (prefix j)
300bind h selectp -L # left (prefix h)
301bind l selectp -R # right (prefix l)
302
303# copy mode
304# enter copy mode (prefix Escape)
305bind Escape copy-mode
306# paste buffer (prefix Ctrl+p)
307bind ^p pasteb
308#bind-key -T copy-mode C-Space send-keys -X begin-selection
309
310# reload config (prefix r)
311bind r source ~/.tmux.conf \; display "Configuration reloaded!"
312
313#-- statusbar --#
314set -g status-interval 1
315set -g status-keys vi
316
317setw -g mode-keys vi
318setw -g automatic-rename off
319
320#set-option -g status-style bg=cyan
321
322# statusbar
323#set-window-option -g window-status-current-style fg=colour166,bg=#c0c0c0
324set-window-option -g window-status-current-style fg=colour166,bg=colour222
325</pre>
326
327</ul>
328
329<h3 id="toc_1.2.4">~/.vimrc</h3>
330
331<ul>
332<li>
333vim没有语法高亮,需加载基本设置
334<pre class="brush: bash">
335cd /usr/share/vim &amp;&amp; cp vim74/vimrc_example.vim vimrc
336</pre>
337
338</ul>
339
340<ul>
341<li>
342.vimrc设置
343
344</ul>
345
346<p>
347详见:<a href="../vim/vimrc.html">vimrc</a>
348</p>
349<pre class="brush: bash">
350" ~/.vimrc
351set mouse=c
352set nobackup
353
354" set paste
355
356set fileformats=unix,dos,mac
357set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
358set encoding=utf-8
359" set termencoding=cp936
360let &amp;termencoding = &amp;encoding
361language messages en_US.UTF-8
362"language messages zh_CN.UTF-8
363
364" colo murphy
365
366" tab
367set tabstop=4
368set cindent shiftwidth=4
369set autoindent shiftwidth=4
370" TAB -&gt; Space
371set expandtab
372
373</pre>
374
375<h3 id="toc_1.2.5">~/.ssh/config</h3>
376<pre class="brush: bash">
377#ssh_config
378#~/.ssh/config
379IdentitiesOnly yes
380ServerAliveInterval 60
381GSSAPIAuthentication no
382
383Host m*
384    Port 22
385    User root
386    ControlMaster auto
387    ControlPath ~/.ssh/master-%r@%h:%p
388    #ProxyCommand connect-proxy -S 127.0.0.1:2223 %h %p
389Host mNagios
390    Hostname 172.16.16.150
391
392</pre>
393
394
395<h2 id="toc_1.3">其他设置</h2>
396
397<h3 id="toc_1.3.1">SSH Server</h3>
398
399<ul>
400<li>
401OS修改环境变量:path增加c:/cygwin/bin
402
403<li>
404OS增加环境变量:CYGWIN=ntsec tty
405
406<li>
407Cygwin安裝必要的套件:OpenSSH,cygrunsrv
408
409<li>
410Change permissions and ownership on some files:
411<pre class="brush: bash">
412# 以下代码没测试过,慎用
413cd /; chmod -R og-w . 
414chmod og+w /tmp 
415touch /var/log/sshd.log 
416chown system:system /var/log/sshd.log /var/empty /etc/ssh_h* 
417chmod 755 /var/empty
418</pre>
419
420<li>
421Cygwin設定OpenSSH:
422<pre class="brush: bash">
423    ssh-host-config
424</pre>
425<pre>
426    Should privilege separation be used? (yes/no) :yes
427    Should this script create a local user 'sshd' on this machine? (yes/no) :yes
428    Do you want to install sshd as service? (yes/no) :yes
429    Default is "ntsec" . CYGWIN=ntsec tty
430</pre>
431
432<li>
433启动OpenSSH:net start sshd
434<pre class="brush: bash">
435cygrunsrv -S sshd
436</pre>
437
438<li>
439停止OpenSSH:net stop sshd 
440
441</ul>
442
443
444<h3 id="toc_1.3.2">crontab</h3>
445
446<ul>
447<li>
448在Windows上安装系统服务 cron,开机即运行。
449<pre class="brush: bash">
450cygrunsrv -I cron -p /usr/sbin/cron -a -D
451</pre>
452
453<li>
454启动服务
455<pre class="brush: bash">
456cygrunsrv -S cron
457</pre>
458
459</ul>
460
461<h3 id="toc_1.3.3">nontsec</h3>
462<p>
463这在 Cygwin 下创建的文件,其他管理员不可写,是所谓的 ntsec 在起作用。通过 NTFS 的权限设置,模拟 UNIX 的权限。可以通过 CYGWIN 环境变量修改。如:
464</p>
465<pre class="brush: bash">
466export CYGWIN="nontsec nosmbntsec"
467</pre>
468
469<h2 id="toc_1.4">中文乱码设置</h2>
470
471<p>
472**<strong>若存在中文问题才进行以下设置。</strong>**
473</p>
474
475<ul>
476<li>
477Rethat Cygwin安装后目录中文即正常,以下设置不一定需要。
478
479<li>
480git log命令中出现乱码,可以通过以下设置解决
481
482<li>
483~/.bashrc
484<pre class="brush: bash">
485export SVN_EDITOR=vim
486
487# Redhat Cygwin中未做以下设置,中文正常
488alias ls='ls --color --show-control-chars'
489# git log修改这个设置后可显示中文commit log
490#export LESSCHARSET=latin1
491export LESSCHARSET=UTF-8
492alias less='/bin/less -r'
493#export LC_ALL=zh_CN.UTF-8
494#export LC_CTYPE=zh_CN.UTF-8
495#export LANG=zh_CN.UTF-8
496#export OUTPUT_CHARSET="GBK"
497
498#stty cs8 -istrip
499#stty pass8
500
501export CYGWIN="nontsec nosmbntsec"
502
503</pre>
504
505</ul>
506
507<ul>
508<li>
509~/.inputrc
510<pre class="brush: bash">
511# Allow 8-bit input/output
512set meta-flag on
513set convert-meta off
514set input-meta on
515set output-meta on
516</pre>
517
518</ul>
519
520<h2 id="toc_1.5">技巧收集</h2>
521
522<ul>
523<li>
524Howto get version info? 
525<pre class="brush: bash">
526cygcheck -c cygwin
527</pre>
528
529<li>
530查看系统信息、软件包
531<pre class="brush:bash">
532cygcheck -h #帮助
533cygcheck -s #sysinfo
534cygcheck -l #已安装包列表
535cygcheck -c #列出并校验已安装的包
536cygcheck -p vim #从cygwin.com源查询包
537</pre>
538
539<li>
540给curl安装CA Certificates
541<pre class="brush: bash">
542curl http://curl.haxx.se/ca/cacert.pem &gt; /usr/ssl/certs/ca-bundle.crt
543</pre>
544
545<li>
546同步Windows用户和组
547<pre class="brush:bash">
548mkpasswd -l &gt; /etc/passwd
549mkgroup -l &gt; /etc/group
550
551# 如果有Domain的话,需要加上-d domainname 
552</pre>
553
554<li>
555设置Cygwin/mintty字体和大小
556
557<ul>
558<li>
559界面中设置:右键菜单-&gt;Options-&gt;Text,然后选择你喜欢的字体和大小。
560
561<li>
562Windows中有些字体不会列出,可在配置文件:<code>~/.minttyrc</code>中直接指定:
563<pre>
564BoldAsFont=no
565#Font=Courier New
566Font=YaHei Consolas hybrid
567FontHeight=12
568</pre>
569
570</ul>
571<li>
572给Cygwin添加more/col/whereis等命令:安装util-linux包:<code>apt-cyg install util-linux</code>
573
574<li>
575给Cygwin安装dig、iconv、telnet/ftp:<code>apt-cyg install bind-utils libiconv inetutils</code>
576
577<ul>
578<li>
579检查系统中已设置好DNS: <code>ipconfig /all</code>
580
581</ul>
582<li>
583得到Windows格式的路径名?
584<pre class="brush: bash">
585cygpath -d -m "`pwd`"
586</pre>
587
588<li>
589用Explorer打开当前目录:open.sh
590<pre class="brush:bash">
591#!/bin/sh
592#/usr/local/bin/open
593d=$1;[ -z "$d" ] &amp;&amp; d=$(pwd)
594d=$(cd "$d" &gt; /dev/null 2&gt;&amp;1;pwd)
595Explorer /e,"$(cygpath -d -w $d)"
596</pre>
597
598<li>
599Cygwin error: <code>-bash: fork: retry: Resource temporarily unavailable</code>
600
601<ul>
602<li>
603<a href="http://stackoverflow.com/questions/9300722/cygwin-error-bash-fork-retry-resource-temporarily-unavailable">http://stackoverflow.com/questions/9300722/cygwin-error-bash-fork-retry-resource-temporarily-unavailable</a>
604
605<li>
606<a href="http://cygwin.wikia.com/wiki/Rebaseall">http://cygwin.wikia.com/wiki/Rebaseall</a>
607
608<li>
609错误现象
610<pre>
611-bash-4.1$ wc m1.txt
612      3 [main] bash 2216 child_info_fork::abort: data segment start: parent(0x26D000) !=     child(0x38D000)
613      -bash: fork: retry: Resource temporarily unavailable
614      2013930  4027950 74968256 m1.txt
615</pre>
616
617<li>
618处理办法
619<pre>
620rkosegi's Answer seems to be working for everyone (myself included). But, just so you don't have to follow the daisy chain of links:
621
622(assuming Cygwin is installed at C:\cygwin):
623
6241.Open Task Manager and close any processes that look to be Cygwin related.
6252.Open C:\Cygwin\bin in Windows Explorer
6263.Verify that dash.exe, ash.exe, rebase.exe, and rebaseall exist in this folder
627    - If any of them are missing, re-run Cygwin setup and select the dash, ash, and rebase packages
6284.right-click your C:\Cygwin folder, uncheck Read-only (if its checked), and press OK.
629    - When an error about not being able to switch some files comes up, select "Ignore All". Wait for this process to complete.
6305.Browse to C:\Cygwin\bin in Windows Explorer
6316.Right click dash.exe and click "Run as Administrator". A command Prompt should appear with nothing but a $
6327.Type /usr/bin/rebaseall -v, hit enter, and wait for the process to complete.
633    - If you get errors about Cygwin processes running, try Step 1 again. If that still doesn't work, Restart your computer into safe mode and try these steps again.
6348.Try opening Cygwin again.
635
636This process worked for me. I hope it works for you guys too.
637
638Source: http://cygwin.wikia.com/wiki/Rebaseall
639</pre>
640
641</ul>
642</ul>
643
644<h2 id="toc_1.6">SSH Agent on Cygwin</h2>
645
646<p>
647ssh-agent 启动后,会设置 SSH_AUTH_SOCK 和 SSH_AGENT_PID 两个环境变量。
648</p>
649
650<p>
651ssh 通过检测 SSH_AUTH_SOCK 和 SSH_AGENT_PID 两个环境变量判断是否存在 ssh-agent 后台进程,如果存在则使用 ssh-agent 完成自动认证,否则提示用户输入密码。
652</p>
653
654<p>
655ssh-agent启动输出内容为环境参数设置脚本,需以eval或source方式执行来加入环境参数。
656</p>
657<pre>
658ssh-agent.exe -s
659SSH_AUTH_SOCK=/tmp/ssh-GYP4AmeZ5LP6/agent.1272; export SSH_AUTH_SOCK;
660SSH_AGENT_PID=4536; export SSH_AGENT_PID;
661echo Agent pid 4536;
662</pre>
663
664<ul>
665<li>
666在~/.bash_profile中添加自动启动、停止ssh-agent代码
667
668</ul>
669<p>
670实现如下功能:
671</p>
672<ol>
673<li>
674打开Cygwin时若没有ssh-agent进程,则自动启动,若已有ssh-agent进程,则不再重复启动;
675
676<li>
677关闭Cygwin时,检查若是最后一个Cygwin窗口则自动关闭ssh-agent,若还有其它Cygwin窗口则不关闭。
678
679<li>
680关闭所有Cygwin窗口,之前保存的key将不再有效。
681
682<li>
683多个窗口均共用同ssh-agent。
684<pre class="brush:bash">
685# Add to ~/.bash_profile
686# start_stop_ssh_agent
687SSH_ENV=$HOME/.ssh/ssh-agent-env
688function stop_ssh_agent {
689    local bash_proccess_num
690    bash_proccess_num=$(ps ef|grep /usr/bin/bash|grep -v grep|wc -l)
691    echo "bash process number=$bash_proccess_num"
692    if [ "$bash_proccess_num" -lt 3 ];then
693      echo "Stop all ssh-agent process."
694      ps ef|grep '/usr/bin/ssh-agent'|grep -v grep|awk '{print $1}'|xargs -r kill
695    else
696      echo "keep ssh-agent process."
697    fi
698    read test
699}
700function start_ssh_agent {
701    if [ -f "${SSH_ENV}" ]; then
702         . ${SSH_ENV} &gt; /dev/null
703         ps ef|grep '/usr/bin/ssh-agent'|grep -v grep &gt;/dev/null
704         if [ "$?" = "0" ];then
705           echo "ssh-agent(pid:$SSH_AGENT_PID) is running."
706           return 0
707         fi
708    fi
709    echo "Initialising new SSH agent..."
710    #$TMPDIR/ssh‐XXXXXXXXXX/agent.&lt;ppid&gt;
711    /usr/bin/ssh-agent -s -a /tmp/ssh-agent.sock | sed 's/^echo/#echo/' &gt; ${SSH_ENV} \
712    &amp;&amp; echo "start ssh-agent succeeded." \
713    &amp;&amp; chmod 600 ${SSH_ENV} \
714    &amp;&amp; . ${SSH_ENV} &gt; /dev/null
715    #&amp;&amp; /usr/bin/ssh-add \
716}
717start_ssh_agent
718#trap "[ \$(ps -ef|grep mintty\$|wc -l) -lt 2 ] &amp;&amp; kill $SSH_AGENT_PID" 0
719#trap "stop_ssh_agent" 0
720</pre>
721
722</ol>
723
724<ul>
725<li>
726MAC OS版本
727<pre class="brush:bash">
728# Add to ~/.bash_profile
729# start_stop_ssh_agent
730SSH_ENV="$HOME/.ssh/ssh-agent-env"
731SSH_SOCK="/tmp/ssh-agent-$(id -un).sock"
732function stop_ssh_agent {
733    local bash_proccess_num
734    bash_proccess_num=$(ps ef|grep /usr/bin/bash|grep -v grep|wc -l)
735    echo "bash process number=$bash_proccess_num"
736    if [ "$bash_proccess_num" -lt 3 ];then
737      echo "Stop all ssh-agent process."
738      ps ef|grep '/usr/bin/ssh-agent'|grep -v grep|awk '{print $1}'|xargs -r kill
739      read prompt
740    else
741      echo "keep ssh-agent process."
742    fi
743}
744function start_ssh_agent {
745    if [ -f "$SSH_ENV" ]; then
746         . $SSH_ENV &gt; /dev/null
747         ps ef|grep "$SSH_AGENT_PID .* /usr/bin/ssh-agent" &gt;/dev/null
748         if [ "$?" = "0" ];then
749           echo "ssh-agent(pid:$SSH_AGENT_PID) is running."
750           return 0
751         fi
752    fi
753    echo "Initialising new SSH agent..."
754    #$TMPDIR/ssh‐XXXXXXXXXX/agent.&lt;ppid&gt;
755    rm -f "$SSH_SOCK"
756    /usr/bin/ssh-agent -s -t 3600 -a "$SSH_SOCK" | sed 's/^echo/#echo/' &gt; $SSH_ENV \
757    &amp;&amp; chmod 600 ${SSH_ENV} \
758    &amp;&amp; . ${SSH_ENV} &gt; /dev/null
759    #&amp;&amp; /usr/bin/ssh-add \
760}
761start_ssh_agent
762#trap "[ \$(ps -ef|grep mintty\$|wc -l) -lt 2 ] &amp;&amp; kill $SSH_AGENT_PID" 0
763trap "stop_ssh_agent" 0
764</pre>
765
766</ul>
767
768
769<ul>
770<li>
771ssh-add
772
773</ul>
774
775<p>
776ssh-add的作用是把指定的私钥添加到 ssh-agent 所管理的一个 session 当中。
777</p>
778
779<p>
780ssh-agent 是一个用于存储私钥的临时性的 session 服务,也就是说当你重启之后,ssh-agent 服务也就重置了。
781</p>
782
783<pre class="brush:bash">
784ssh-add ~/.ssh/id_rsa
785[enter your password]
786</pre>
787
788<ul>
789<li>
790keychain
791
792<ul>
793<li>
794<a href="http://www.funtoo.org/Keychain">http://www.funtoo.org/Keychain</a>
795<pre>
796sdesc: "Key manager for OpenSSH"
797ldesc: "Keychain is an OpenSSH key manager, typically run from
798~/.bash_profile. When keychain is run, it checks for a running
799ssh-agent, otherwise it starts one. It saves the ssh-agent environment
800variables to ~/.keychain/$HOSTNAME-sh, so that subsequent logins
801and non-interactive shells such as cron jobs can source the file and
802make passwordless ssh connections. In addition, when keychain runs, it
803verifies that the key files specified on the command-line are known to
804ssh-agent, otherwise it loads them, prompting you for a password if
805necessary"
806</pre>
807
808<li>
809~/.bash_profile: 
810<pre>
811eval `keychain --eval --agents ssh id_dsa`
812</pre>
813
814</ul>
815</ul>
816
817<h2 id="toc_1.7">Windows Terminal</h2>
818
819<ul>
820<li>
821Windows Terminal热键及设置:<a href="https://cloud.tencent.com/developer/article/1746621">https://cloud.tencent.com/developer/article/1746621</a>
822
823<li>
824<a href="https://learn.microsoft.com/zh-cn/windows/terminal/">https://learn.microsoft.com/zh-cn/windows/terminal/</a>
825<pre>
826Ctrl + Shift + T/N:新建标签/窗口
827
828Windows Terminal拆分窗格:
829Alt + Shift + D:复制并拆分(按最长边)
830Alt + Shift + +:左右拆分
831Alt + Shift + -:上下拆分
832Alt + Shift + 上下左右:调整窗格大小
833Alt + 上下左右:切换窗格
834Alt + Shift + W:关闭当前窗格
835
836搜索:Ctrl + Shift + F
837滚屏:Ctrl + Shift + 上下
838缩放:Ctrl + +/-,Ctrl + 鼠标滚轮
839
840复制:Ctrl + Shift + C
841粘贴:Ctrl + Shift + V
842
843设置:Ctrl + ,
844</pre>
845
846<li>
847在 Windows Terminal 中使用 Cygwin 命令行或 Git Bash:<a href="https://leo3418.github.io/zh/2020/05/24/cygwin-git-bash-in-wt.html">https://leo3418.github.io/zh/2020/05/24/cygwin-git-bash-in-wt.html</a>
848
849<li>
850安装Windows Terminal:在Microsoft Store搜索“Terminal”安装(不要安装Preview版本)。
851
852<li>
853Windows 终端提示与技巧: <a href="https://learn.microsoft.com/zh-cn/windows/terminal/tips-and-tricks">https://learn.microsoft.com/zh-cn/windows/terminal/tips-and-tricks</a>
854
855<li>
856Windows Terminal配置文件说明:<a href="https://learn.microsoft.com/zh-cn/windows/terminal/customize-settings/startup#default-terminal-application">https://learn.microsoft.com/zh-cn/windows/terminal/customize-settings/startup#default-terminal-application</a>
857
858<li>
859在Windows Terminal中设置Cygwin:
860
861<ul>
862<li>
863设置-&gt;添加新配置文件:
864
865<ul>
866<li>
867命令行方式一:<code>C:\cygwin64\bin\bash.exe -i -l</code>
868
869<li>
870命令行方式二:<code>C:\cygwin64\Cygwin.bat</code>
871
872<li>
873bash在登录状态才会加载profile、bashrc,需要使用<code>-i -l</code>参数,启动命令行:
874
875</ul>
876<li>
877删除crtl+v、ctrl+c热键设置:设置-&gt;操作中删除(终端中需要使用这两个组合键)。
878
879<li>
880开启鼠标右键菜单(不开启右键直接为粘贴)
881
882<ul>
883<li>
884按住Shift键单击下拉菜单中的设置,会用编辑器打开settings.json文件,在profiles-&gt;deflaults中添加<code>"experimental.rightClickContextMenu": true</code>:
885<pre class=brush:bash>
886...
887    "profiles": 
888    {
889        "defaults": {
890			"experimental.rightClickContextMenu": true,
891	},
892...
893    - 按住 Alt 并单击下拉菜单中的“设置”按钮,查看默认设置
894</pre>
895
896</ul>
897</ul>
898</ul>
899
900<h2 id="toc_1.8">conEmu</h2>
901
902<ul>
903<li>
904<a href="https://conemu.github.io/">https://conemu.github.io/</a>
905
906<li>
907Cygwin系列(十):折腾终端1:<a href="https://zhuanlan.zhihu.com/p/99963508">https://zhuanlan.zhihu.com/p/99963508</a>
908
909</ul>
910
911<p>
912ConEmu是一款优秀的开源终端,项目地址<a href="https://conemu.github.io">https://conemu.github.io</a>
913</p>
914
915<p>
916它是混合型的,首要支持Windows Console功能,可看作是conhost的增强版本,同时也部分地支持pty,具备ANSI转义序列直接解析能力,总体上是conhost+Mintty的全能选手。
917</p>
918
919<p>
920主要功能特性包括:
921</p>
922<pre>
923多标签页、多标签页、多标签页,重要事情说3遍,并且支持多种布局方式;
924不同标签页独立配置Task,也就是运行不同的命令行程序,特别是shell,Task支持名字分组和分配快捷键;
925界面现代化,有标签页、快捷菜单、控制台区、状态栏、滚动条;
926支持连接到多种类型命令行程序环境,Cygwin、msys、WSL都不在话下;
927图形化配置方式,每一部分都支持个性化配置,所有配置项保存到文件ConEmu.xml;
928支持集成到其他程序界面中,比如文件管理器Explorer;
929支持字符加粗、斜体、下划线、闪烁、前后景色等风格;
930全面支持Unicode,支持ANSI X3.64标准和xterm256色;
931附带字符界面的文本管理器Far Manager及其插件;
932能运行在Windows 2000及以上版本的Windows系统,开箱即用。
933</pre>
934
935<h2 id="toc_1.9">脚本添加ssh主机名自动完成</h2>
936
937<h3 id="toc_1.9.1">在etc中添加</h3>
938
939<ul>
940<li>
941/etc/bash_completion.d/ssh
942<pre class="brush:bash">
943_ssh() 
944{
945    local cur prev opts
946    COMPREPLY=()
947    cur="${COMP_WORDS[COMP_CWORD]}"
948    prev="${COMP_WORDS[COMP_CWORD-1]}"
949    opts=$(grep '^Host' ~/.ssh/config ~/.ssh/config.d/* 2&gt;/dev/null | grep -v '[?*]' | cut -d ' ' -f 2-)
950
951    COMPREPLY=( $(compgen -W "$opts" -- ${cur}) )
952    return 0
953}
954complete -F _ssh ssh scp sftp rsync
955</pre>
956
957</ul>
958
959<pre>
960. /etc/bash_completion.d/ssh
961</pre>
962
963<h3 id="toc_1.9.2">在~/.bashrc中添加</h3>
964
965<pre class="brush:bash">
966# SSH/SCP主机名自动补全
967# ----------------------------------------------------------------------------
968_complete_ssh_hosts() {
969  local cur prev config_hosts known_hosts
970  local ssh_hosts_ts ssh_config_ts
971  COMPREPLY=()
972  cur="${COMP_WORDS[COMP_CWORD]}"
973  prev="${COMP_WORDS[COMP_CWORD-1]}"
974  ssh_config=$(readlink -f "$HOME/.ssh/config")
975  ssh_hosts_file="$HOME/.ssh/ssh_hosts"
976  # 判断config更新
977  if [ -f "$ssh_hosts_file" ];then
978    ssh_hosts_ts=$(stat -c %Y "$ssh_hosts_file")
979    ssh_config_ts=$(stat -c %Y "$ssh_config")
980    if [ $ssh_config_ts -gt $ssh_hosts_ts ];then
981      ssh_hosts=
982      rm -f "$ssh_hosts_file"
983    fi
984  fi
985  # 更新ssh_hosts
986  if [ -z "$ssh_hosts" ];then 
987    if [ -f "$ssh_hosts_file" ];then
988      ssh_hosts=$(cat "$ssh_hosts_file")
989    else
990      if [[ -f "$ssh_config" ]]; then
991        config_hosts=$(grep -i '^Host' "$ssh_config" | grep -v '[*?]' | cut -d ' ' -f 2-)
992      else
993        config_hosts=""
994      fi
995      if [[ -f "$HOME/.ssh/known_hosts" ]]; then
996        known_hosts=$(cut -d ' ' -f 1 "$HOME/.ssh/known_hosts" | cut -d ',' -f 1 | sed -e 's/\[\(.*\)\]:.*/\1/')
997      else
998        known_hosts=""
999      fi
1000      ssh_hosts="${config_hosts} ${known_hosts}"
1001      export ssh_hosts="$ssh_hosts"
1002      echo "$ssh_hosts" &gt; "$ssh_hosts_file"
1003    fi
1004 fi
1005 
1006 # 如果当前词以@开头,补全用户名后的主机名
1007 if [[ ${cur} == *@* ]]; then
1008   local userhost=${cur%%@*}
1009   local curhost=${cur#*@}
1010   COMPREPLY=( $(compgen -W "${ssh_hosts}" -P "${userhost}@" -- "${curhost}") )
1011 else
1012   COMPREPLY=( $(compgen -W "${ssh_hosts}" -- "${cur}") )
1013 fi
1014 return 0
1015}
1016
1017# 为ssh和scp命令注册补全函数
1018complete -F _complete_ssh_hosts ssh scp sftp rsync
1019# ----------------------------------------------------------------------------
1020</pre>
1021
1022</div>
1023<div id="footer">
1024<p>
1025&copy; 2012 - 2021 XStar
1026&nbsp;|&nbsp;<a href="http://code.google.com/p/vimwiki/" title="vimwiki">Powerby:Vimwiki</a>
1027&nbsp;|&nbsp;<a href="http://kwiki.github.io" title="丘迟">Style:丘迟</a>
1028&nbsp;|&nbsp;<a href="../index.html">首页</a>
1029&nbsp;|&nbsp;<a href="index.html">分类首页</a>
1030&nbsp;|&nbsp;<a href="../SiteMap.html">站点地图</a>
1031</p>
1032</div>
1033<script type="text/javascript">var vimwiki_rootpath="../";</script>
vendor: 1 bytes, line 1033
1033
1034<script type="text/javascript" src="https://cdn.staticfile.org/jquery/2.0.0/jquery.min.js"></script>
vendor: 1 bytes, line 1034
1034
1035<script type="text/javascript" src="../scripts/vimwiki.js"></script>
1035
1036</body>
1037</html>
1038

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.