分页: 1/330
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
[ 显示模式:
摘要 |
列表 ]
引用功能被关闭了。
1. 备份原来的yum源
sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
2.设置aliyun的yum源
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
3.添加EPEL源
EPEL(http://fedoraproject.org/wiki/EPEL)是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上 EPEL后,可以像在 Fedora 上一样,可以通过 yum install package-name,安装更多软件。
sudo wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo
4.清理缓存并生成新的缓存
sudo yum clean all
sudo yum makecache
Last login: Mon Aug 29 19:24:29 2016 from 117.136.0.181
dns得设置一下,记得前面有个nameserver后是空格再是ip:
[root@iZ25dcp92ckZ ~]# cat /etc/resolv.conf
nameserver 114.114.114.114
[root@iZ25dcp92ckZ ~]#
来自:http://m.blog.csdn.net/article/details?id=51953700
引用功能被关闭了。
前置:linux下C include搜索的路径,http://blog.csdn.net/chosen0ne/article/details/7210946
背景:其实之前没有研究过c的静态编译,包括对Linux下的make依赖啥的也不太懂,于是试着用c的头文件组织文件相互调用同时,觉得把生成的项目做成一个静态链接版本可执行文件,以便于在各种啥都不装的linux平台上运行(One file ,run as server ok的个人理想主义思想。),有点像像山寨嵌入式开发。我想简单,链接参数加一个-static不就行了,但接下来解决一系列问题的时间远远超出我的意料linux 静态链接 mysql glibc 库的悲催过程,边学习边扯淡,边记录,最后还是硬给扯到最后一步了给glibc的dlopen给挡住了,我看网上也有兄弟遇到类似的,但都最后妥协成动态编译这个glibc,加上参数:-ldl,我是学习实践,所以就不用了,但记录一下总是好事情。
一)关于Makefile的三个特点:
multipepollserver:multipepollserver.o memcachedclient.o writeFile.o memorypool.o readconf.o multipepollserver.h readconf.h memorypool.h readconf.h memcachedclient.h
/usr/bin/gcc44 -Wall -O0 -g -o multipepollserver multipepollserver.o memorypool.o readconf.o writeFile.o -lrt -lpthread -lmemcached
(1)把上面这个后面的.h去了也能编译过,那这些.h在Makefile里是不是没有用?
回答:.h用于符号链接 ,如果不包进去在运行的时候,或动态库加载时会产生符号表找不到。去掉是没问题,我也没加头文件。加上头文件依赖,修改头文件后,也会引起重新编译。
(2)memcachedClientGet找不到,在代码里都包含了,但是make时说找不到。
你也要依赖memcachedclient.o呀,你的实现在这里面,你不加进去,当然找不到。(这儿是核心:就是上面第二行,说找不到:也就是说第二行才是真正编译时的参数,第一行,主要是以来之用,没有第一行的.o,那么,后面写的这些.oMakefile规则是不会去编译的,所以也得写上涉及到的.o。)
是的,如下,居然说找不到这个函数:
vi multipepollserver.h
#include "memcachedclient.h"
这个我有包含的呀,
vim memcachedclient.c
#include "memcachedclient.h"
ls memcachedclient.h
memcachedclient.h
cat memcachedclient.c|grep memcachedClientGet
int memcachedClientGet(char *getKey,char *value){
二)关于静态编译:
问:如何把memcached由动态编译变为静态编译:
答:把 -lmemcached 改成 /.../libmemcached.a
它不是.a,是.la,要.a的,.la为libtool自动生成的一些共享库,可以用vi编辑查看,主要记录了一些配置信息。
它为何不在:/usr/local/libmemcached/下面,而是在,为何不放一块儿?
出现:undefined reference to `sasl_done'
版本对不对??
估计这些接口是在新版本中新定义的,你链接的可能是旧版本。
我对memcached没研究,不清楚。
静态库版本估计看不出,除非它源代码里有版本信息的字符串,可以抓一抓。
你可以执行
strings libmemcached.a | grep 找不到的接口名称
看有没有打印,没打印什么内容,那就说明该静态库里面没这个接口。
兄弟所说的也就是.h的定义和这个.a不匹配是吧:
1)libmemcached/memcached.h (/usr/local/libmemcached/)
2)/usr/local/lib/libmemcached.a
你这个静态库在编译的时候是不是没有开启sasl支持?导致编译出来的是没带sasl。
[root@test libmemcached-1.0.18]# ./configure --prefix=/usr/local/libmemcached --enable-sasl
[root@test libmemcached-1.0.18]# make clean & make & make install
./libmemcached-1.0/memcached.h:46:23: error: cinttypes: No such file or directory //根据经验,又是gcc的版本不够了。
export CC=/usr/bin/gcc44
export CXX=/usr/bin/g++44
一定要确认是否加成功了,如下:
[root@test libmemcached-1.0.18]# echo $CC
/usr/bin/gcc44
[root@test libmemcached-1.0.18]# echo $CXX
/usr/bin/g++44
于是编译通过了, 编译再次顺利通过,来自:https://jackxiang.com/post/7693/
问题还有:
/usr/local/libmemcached/lib/libmemcached.a(libmemcached_libmemcached_la-delete.o):(.data.DW.ref.__gxx_personality_v0[DW.ref.__gxx_personality_v0]+0x0): undefined reference to `__gxx_personality_v0'
/usr/local/libmemcached/lib/libmemcached.a(libmemcached_libmemcached_la-hosts.o): In function `update_continuum':
/opt/libmemcached-1.0.18/libmemcached/hosts.cc:222: undefined reference to `floorf'
/usr/local/libmemcached/lib/libmemcached.a(libmemcached_libmemcached_la-sasl.o): In function `sasl_startup_function':
/opt/libmemcached-1.0.18/libmemcached/sasl.cc:126: undefined reference to `sasl_client_init'
/usr/local/libmemcached/lib/libmemcached.a(libmemcached_libmemcached_la-sasl.o): In function `memcached_sasl_authenticate_connection(memcached_instance_st*)':
/opt/libmemcached-1.0.18/libmemcached/sasl.cc:210: undefined reference to `sasl_errstring'
/opt/libmemcached-1.0.18/libmemcached/sasl.cc:218: undefined reference to `sasl_client_new'
/opt/libmemcached-1.0.18/libmemcached/sasl.cc:220: undefined reference to `sasl_errstring'
/opt/libmemcached-1.0.18/libmemcached/sasl.cc:222: undefined reference to `sasl_dispose'
/opt/libmemcached-1.0.18/libmemcached/sasl.cc:231: undefined reference to `sasl_client_start'
/opt/libmemcached-1.0.18/libmemcached/sasl.cc:234: undefined reference to `sasl_errstring'
/opt/libmemcached-1.0.18/libmemcached/sasl.cc:236: undefined reference to `sasl_dispose'
/opt/libmemcached-1.0.18/libmemcached/sasl.cc:276: undefined reference to `sasl_client_step'
/opt/libmemcached-1.0.18/libmemcached/sasl.cc:289: undefined reference to `sasl_dispose'
/usr/local/libmemcached/lib/libmemcached.a(libmemcached_libmemcached_la-sasl.o): In function `sasl_shutdown_function':
/opt/libmemcached-1.0.18/libmemcached/sasl.cc:117: undefined reference to `sasl_done'
估计是引入的memcached.h不一致,找了一下,我是安装在/usr/local/libmemcached下,而我看其它地方还有,于是直接把/usr/local/include/libmemcached-1.0/头文件覆盖得了:
[root@test /]# find . -name "memcached.h"
./home/xiangdong/software/gearmand-1.1.12/libtest/memcached.h
./usr/local/libmemcached2/include/libmemcached/memcached.h
./usr/local/libmemcached/include/libmemcached-1.0/struct/memcached.h
./usr/local/libmemcached/include/libmemcached-1.0/memcached.h
./usr/local/libmemcached/include/libmemcached/memcached.h
./usr/local/include/libmemcached-1.0/struct/memcached.h
./usr/local/include/libmemcached-1.0/memcached.h
./usr/local/include/libmemcached/memcached.h
_________________________________________________________________________________
rm -Rf /usr/local/include/libmemcached/*
rm -Rf /usr/local/include/libmemcachedutil-1.0/*
cp -Rf /usr/local/libmemcached/include/libmemcachedutil-1.0/* /usr/local/include/libmemcachedutil-1.0/.
cp -Rf /usr/local/libmemcached/include/libmemcached/* /usr/local/include/libmemcached/.
_________________________________________________________________________________
[root@test multepoolserver]# make clean;make
rm -f memcachedclient.o memorypool.o multipepollserver.o multipepollserver writeFile.o readconf.o
/usr/bin/gcc44 -Wall -O0 -g3 -gdwarf-2 -c -g multipepollserver.c
In file included from multipepollserver.h:27,
from multipepollserver.c:6:
/usr/local/include/libmemcached/memcached.h:39:40: error: libmemcached-1.0/memcached.h: No such file or directory
果然是这儿读取,/usr/local/include/libmemcached-1.0 给我删除了,还是拷贝过去吧:
再一次确认证明,在安装libmemcached时指定目录后,如果在.h里包含(#include <libmemcached/memcached.h>)则加上这个makefile的路径:-I/usr/local/libmemcached/include/ -L/usr/local/libmemcached/lib 否则,默认公位置找不到相关的函数申明及lib库的。【./configure --prefix=/usr/local/libmemcached 这样的,不会放在/usr/local/libmemcached/lib 下的。】
再就是.a的静态文件:/usr/local/libmemcached/lib/libmemcached.a
问题还依旧,怎么办:
[root@test /]# find . -name "libmemcached.a"
./usr/local/lib/libmemcached.a
./usr/local/libmemcached/lib/libmemcached.a
md5对比下是否是一样的,还真不一样,两个同样的文件:
[root@test lib]# md5sum /usr/local/lib/libmemcached.a
d1f93fcf34649c5d72b19e636b2c1b2e /usr/local/lib/libmemcached.a
[root@test lib]# md5sum /usr/local/libmemcached/lib/libmemcached.a
4026e0e061d0692b3a3b7016ee4a6066 /usr/local/libmemcached/lib/libmemcached.a
这个.a是不是也得从我刚编译的路径给覆盖到/usr/local/lib/,比对了一下,都是一样的,直接拷贝过去得了:
cp -Rf /usr/local/libmemcached/lib/* /usr/local/lib/.
yes|cp -Rf /usr/local/libmemcached/lib/* /usr/local/lib/.
依旧不Ok,编译还是遇到问题,显示无法链接到sasl的一些文件。问题显示如下:
undefined reference to `sasl_client_step'
undefined reference to `sasl_dispose'
undefined reference to `sasl_client_start'
undefined reference to `sasl_client_new'
————————————————————这种方法不行————————————————————
/usr/bin/gcc44 -Wall -O0 -g -o multipepollserver multipepollserver.o memcachedclient.o memorypool.o readconf.o writeFile.o -lrt -lpthread /usr/local/lib/libmemcached.a
/usr/local/lib/libmemcached.a(libmemcached_libmemcached_la-delete.o):(.data.DW.ref.__gxx_personality_v0[DW.ref.__gxx_personality_v0]+0x0): undefined reference to `__gxx_personality_v0'
最后加上:-lstdc++
multipepollserver:multipepollserver.o memcachedclient.o writeFile.o memorypool.o readconf.o
/usr/bin/gcc44 -Wall -lstdc++ -O0 -g -o multipepollserver multipepollserver.o memcachedclient.o memorypool.o readconf.o writeFile.o -lrt -lpthread /usr/local/lib/libmemcached.a
好了。
备案在:http://jackxiang.com/post/7981/
————————————————————————————————————————————————————————————————————————————
解决办法是重新执行configure命令,增加相应的参数。sudo执行命令:sudo ./configure --prefix=/usr/local/libmemcached --enable-sasl --without-memcached LDFLAGS=-Wl,--as-neede ;make; make install
遇到问题:fatal error: sasl/sasl.h: No such file or directory. 在网上搜到的解决办法是:
Depending on your operating system, you'll need to install the cyrus-sasl development package.
That would be cyrus-sasl-devel on RedHat based distros and libsasl2-dev on Debian based distros IIRC.
我在ubuntu下直接用sudo apt-get install libsasl2-dev 安装了。
说明果然是有这个libsal2-dev的安装包的,CentOS不一样,但也类似,于是ls下:
[root@test multepoolserver]# ls /usr/lib/libsasl2*
/usr/lib/libsasl2.a /usr/lib/libsasl2.so /usr/lib/libsasl2.so.2 /usr/lib/libsasl2.so.2.0.22
/usr/bin/gcc44 -Wall -lstdc++ -O0 -g -o multipepollserver multipepollserver.o memcachedclient.o memorypool.o readconf.o writeFile.o -lrt -lpthread /usr/local/lib/libmemcached.a /usr/lib/libsasl2.a
于是把:/usr/lib/libsasl2.a 放到makefile里,再编译出现 incompatible with i386:x86-64 output:
rpm -ql cyrus-sasl-devel-2.1.22-5.el5_4.3 发现位置在这儿:
/usr/lib/libsasl2.a 不对,64位的位置在这儿:/usr/lib64/libsasl2.a
/usr/include/sasl/sasl.h
/usr/include/sasl/saslplug.h
/usr/include/sasl/saslutil.h
/usr/lib/libsasl2.a
/usr/lib/libsasl2.so
/usr/include/sasl/prop.h
/usr/include/sasl/sasl.h
/usr/include/sasl/saslplug.h
/usr/include/sasl/saslutil.h
/usr/lib64/libsasl2.a
/usr/lib64/libsasl2.so
修改后,还有错,听说是和openssl有关:
/usr/lib64/libsasl2.a(digestmd5.o): In function `dec_3des':
(.text+0x6c0): undefined reference to `DES_ede3_cbc_encrypt'
/usr/lib64/libsasl2.a(digestmd5.o): In function `init_3des':
(.text+0x3bf2): undefined reference to `DES_key_sched'
/usr/lib64/libsasl2.a(digestmd5.o): In function `init_3des':
[root@test multepoolserver]# rpm -ql openssl-devel-0.9.8e-12.el5_4.6|grep .so
/usr/include/openssl/dso.h
/usr/lib64/libcrypto.so
/usr/lib64/libssl.so
[root@test multepoolserver]# ls /usr/lib64/libssl.a
/usr/lib64/libssl.a
[root@test multepoolserver]# rpm -ql openssl-devel-0.9.8e-12.el5_4.6|grep "ssl.h"
/usr/include/openssl/hmac.h
/usr/include/openssl/kssl.h
/usr/include/openssl/ssl.h
/usr/include/openssl/hmac.h
/usr/include/openssl/kssl.h
/usr/include/openssl/ssl.h
——————————————————————————————————————————
加上:
/usr/lib64/libssl.so
/usr/include/openssl/ssl.h
/usr/include/openssl/ssl.h
/usr/include/sasl/sasl.h
vi memcachedclient.h
#include <sasl/sasl.h>
#include <openssl/ssl.h>
Makefile里加上:
multipepollserver:multipepollserver.o memcachedclient.o writeFile.o memorypool.o readconf.o
/usr/bin/gcc44 -Wall -lstdc++ -O0 -g -o multipepollserver multipepollserver.o memcachedclient.o memorypool.o readconf.o writeFile.o -lrt -lpthread /usr/local/lib/libmemcached.a /usr/lib64/libsasl2.a /usr/lib64/libssl.a
报错:
/usr/lib64/libsasl2.a(gssapi.o): In function `gssapi_client_mech_step':
(.text+0x1263): undefined reference to `GSS_C_NT_HOSTBASED_SERVICE'
于是再查,发现这玩意有关:
libgssapi-0.10-2.i386.rpm
/usr/lib/libgssapi_krb5.so
————————————————yum search libgssapi——————————————————————————
libgssapi.i386 : Generic Security Services Application Programming Interface Library
libgssapi.x86_64 : Generic Security Services Application Programming Interface Library
libgssapi-devel.i386 : Development files for the gssapi library
libgssapi-devel.x86_64 : Development files for the gssapi library
于是64位机器就安装:libgssapi-devel.x86_64 吧 :yum install libgssapi-devel.x86_64
rpm -ql libgssapi-devel.x86_64
/usr/include/gssglue/gssapi/gssapi.h
/usr/lib64/libgssapi.a
/usr/lib64/libgssapi.so
/usr/lib64/pkgconfig/libgssapi.pc
于是有了,上面这个错不报了,有新的错误,如下:
/usr/bin/gcc44 -Wall -lstdc++ -O0 -g -o multipepollserver multipepollserver.o memcachedclient.o memorypool.o readconf.o writeFile.o -lrt -lpthread /usr/local/lib/libmemcached.a /usr/lib64/libsasl2.a /usr/lib64/libssl.a /usr/lib64/libcrypto.a /usr/lib64/libgssapi.a
/usr/lib64/libcrypto.a(fips.o): In function `FIPSCHECK_verify':
(.text+0x7fa): undefined reference to `dlopen'
/usr/lib64/libcrypto.a(fips.o): In function `FIPSCHECK_verify':
(.text+0x80f): undefined reference to `dlsym'
/usr/lib64/libcrypto.a(fips.o): In function `FIPSCHECK_verify':
编译错误undefined reference to `dlsym' ,今天编译碰到了问题,加了-ldl就ok了。
[c-sharp] view plaincopy
dso_dlfcn.c:(.text+0x325): undefined reference to `dlsym'
dso_dlfcn.c:(.text+0x408): undefined reference to `dlerror' 就Ok了,From:http://blog.csdn.net/shareyao/article/details/5362642
继续查,这个是glibc库的: rpm -ql glibc-devel-2.5-42
rpm -ql glibc-devel-2.5-42|grep "libdl.so"
/usr/lib/libdl.so
/usr/lib64/libdl.so
————————————————————————————————————————————————————————————————
ls /usr/lib64/libdl.so
/usr/lib64/libdl.so
ls /usr/lib64/libdl.a
/usr/lib64/libdl.a
只加:/usr/lib64/libdl.a 还是会继续报同样的错误,在这儿看到了,还得加:/usr/lib64/libc.a
自己折腾了一下,静态链接libdl.a的同时把libc.a也链接过去,就可以解决“undefined reference”的问题,从而得到可执行程序。这里很奇怪,dlopen是在libdl.a里,但是它的实现--__dlopen却是在libc.a里。。。
http://www.newsmth.net/nForum/#!article/CProgramming/113004
最终大功告成,其中老罗最多的也是动态,对静态也不是太明白,但不管怎么样经过这一个过程或得了静态的经验:
[root@test multepoolserver]# /usr/bin/gcc44 -Wall -lstdc++ -O0 -g -o multipepollserver multipepollserver.o memcachedclient.o memorypool.o readconf.o writeFile.o -lrt -lpthread /usr/local/lib/libmemcached.a /usr/lib64/libsasl2.a /usr/lib64/libssl.a /usr/lib64/libcrypto.a /usr/lib64/libgssapi.a /usr/lib64/libdl.a /usr/lib64/libc.a
/usr/lib64/libcrypto.a(fips.o): In function `FIPSCHECK_verify':
(.text+0x7fa): warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/local/lib/libmemcached.a(libmemcached_libmemcached_la-connect.o): In function `set_hostinfo':
/opt/libmemcached-1.0.18/libmemcached/connect.cc:217: warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
[root@test multepoolserver]# ls multipepollserver
multipepollserver EOF
glibc --static编译可能会产生下面的warning:warning: Using 'getservbyport_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking这个主要原因是由于getservbyport_r 这样的接口还是需要动态库的支持才可以运行,许多glibc的函数都存在这样的问题, 特别是网络编程的接口中是很常见的.对一些第三方工具不友好,类似valgrind检查内存泄露为了不在一些特殊的情况下误报, 它需要用动态库的方式替换glibc中的函数,如果静态编译那么valgrind就无法替换这些函数,产生误报甚至无法报错.
linux 静态链接 mysql glibc 库的悲催过程 :http://renshuming8231.blog.163.com/blog/static/1294837652012112954619545/
链接已经成功了,只不过不建议用 -static,它说的意思getaddrinfo在动态库中,却用static的方式链接了。没事吧?
/usr/lib64/libc.a
grep getaddrinfo /usr/lib/*.a
Binary file /usr/lib/libc.a matches
当该a.out在本机跑的时候没有问题,因为dlopen和相应的动态库格式是相互了解的,但是如果在一个别的系统上
执行dlopen时,很可能出错
就是说本来static是为了随便拿到别的机器跑,而可能发生错误(甚至莫名奇妙的错误,我现实中遇到过,几乎没法调试,以前还不知道原因)
所以有个警告,如果静态编译的话,忽略这个警告使用中会有问题吗?只是警告你有可能出错而已。
引用功能被关闭了。
背景:vim打开多个文件且方便操作,用插件是好事,但是机器多了,发现插件都得安装也是个麻烦事情,所以说咱们不一定要插件,还是越原始越好,越少越好。
结合vi左右分屏:
1)打开一个文件:vi /etc/passwd
2)命令行下输入冒号后输入vnew /etc/fstab:
:vnew /etc/fstab
3)出现俩窗口,ctrl+w两次按w切换到另一个窗口。
4)光标在某个窗口后,就可以把这个窗口全屏:
ctrl + w 加 shift加管道符号|,就能全屏。
5)取消全屏:
ctrl+w 加 =。
注意:ctrl+w 和shift+| 这俩个命令是同时按。 ctrl+w和=是分开有一小间隔。
6)关闭所有: :qa
可以上下分屏: new /erc/profile,然后ctrl加w切换,
不同在放大上下窗口时候是用的ctrl+w 再按shift加_,其实就是那个横杠,表示上下,同理|表示左右。
=等号表恢复左右或上下()上下分左右分都是以=表示。
口袋技巧:
esc+ . (点):粘贴最后一次的字符串,在cd /tmp,再用该命令可以vi 用该命令直接会贴上里面的目录,方便快捷。
摘自并实践:http://jackxiang.com/post/1508/
一次性打开多个文件切换技巧:
打开多个文件:
vi *.html
可以操作的命令如下:
:n 编辑下一个文档。
:2n 编辑下两个文档。
:N 编辑上一个文档。注意,该方法只能用于同时打开多个文档。
:e 文档名 这是在进入vim后,不离开 vim 的情形下打开其他文档。把文件暂存在缓存区
:e# 或 Ctrl+ˆ 编辑上一个文档,用于两个文档相互交换编辑时使用。?# 代表的是编辑前一次编辑的文档 【这个比较常用】
:files 或 :buffers 或 :ls 可以列出目前 缓冲区 中的所有文档。加号 + 表示 缓冲区已经被修改过了。#代表上一次编辑的文档,%是目前正在编辑中的文档
:b 文档名或编号 移至该文档。
如,:b 2,跳转到第二个文件
:ls
1 "login.html" 第 1 行
2 # "pwd.html" 第 179 行
3 %a "pwdreset.html" 第 1 行
4 "reg.html" 第 37 行
5 "register.html" 第 1 行
其中 %a表示当前编辑的文件
#表示上一个编辑的文件
h 表示曾经打开过这个文件
这样就很方便的在文件中切换了。
如果想以列表形式打开缓存区的文件,就需要用插件。
大家推荐的插件是:bufexplorer
http://www.cnblogs.com/wangkongming/p/4655260.html
===========================================================================
vi 1.text 2.text 3.text
2、 多文件切换命令
:args 显示当前编辑文件
:next 切换到下个文件
:prev 切换到前个文件
:next!不保存当前编辑文件并切换到下个文件
:prev!不保存当前编辑文件并切换到上个文件
3、 定位首文件和尾文件
:first 定位首文件
:last 定位尾文件
4、 快速文件切换
ctrl+^ 快速在最近打开的两个文件间切换
多窗口操作
vi -o file1.txt file2.txt # 水平分割
vi -O file1.txt file2.txt # 垂直分割
:split # 把当前文件水平分割
:split another-file # 把当前窗口水平分割, 并装入another-file
:vsplit another-file # 把当前窗口垂直分割, 并装入another-file
:new another-file # 同 ":split another-file"
:close # 关闭当前窗口
:only # 只显示当前窗口, 关闭所有其他的窗口
:all # 打开所有的窗口
:vertical all # 打开所有的窗口, 垂直打开
:buffers # 列出所有的当前窗口
:buffer 2 # 编辑第二个窗口
:bd #关闭buffer
:bw #彻底关闭buffer
VIM7多TAB页操作
:tabnew [++opt选项] [+cmd] 文件 建立对指定文件新的tab
:tabc 关闭当前的tab
:tabo 关闭所有其他的tab
:tabs 查看所有打开的tab
:tabp 前一个
:tabn 后一个
_________________________________________________________________
显示两个不同的文件;或者同时显示一个文件的两个不同地方;又或者并排比较两个文
件。这一切都可以通过分割窗口实现。
|08.1| 分割窗口
|08.2| 用另一个文件分割窗口
|08.3| 窗口大小
|08.4| 垂直分割
|08.5| 移动窗口
|08.6| 对所有窗口执行命令
|08.7| 用 vimdiff 显示区别
|08.8| 杂项
下一章:|usr_09.txt| 使用 GUI 版本
前一章:|usr_07.txt| 编辑多个文件
目录:|usr_toc.txt|
*08.1* 分割窗口
最简单的打开新窗口命令是如下:
:split
这个命令把屏幕分解成两个窗口并把光标置于上面的窗口中:
+----------------------------------+
|/* file one.c */ |
|~ |
|~ |
|one.c=============================|
|/* file one.c */ |
|~ |
|one.c=============================|
| |
+----------------------------------+
你可以看到显示同一个文件的两个窗口。带 "====" 的行是状态条,用来显示它上面的窗
口的信息。(在实际的屏幕上,状态条用反色显示)
这两个窗口允许你同时显示一个文件的两个部分。例如,你可以让上面的窗口显示
变量定义而下面的窗口显示使用这些变量的代码。
CTRL-W w 命令可以用于在窗口间跳转。如果你在上面的窗口,它会跳转到下面的窗口,
如果你在下面的窗口,它会跳转到上面的窗口。(CTRL-W CTRL-W 可以完成相同的功能
这是为了避免你有时按第二次的时候从 CTRL 键上缩手晚了。)
关 闭 窗 口
以下命令用于关闭窗口:
:close
实际上,任何退出编辑的命令都可以关闭窗口,象 ":quit" 和 "ZZ" 等。但 "close"
可以避免你在剩下一个窗口的时候不小心退出 Vim 了。
关 闭 所 有 其 它 窗 口
如果你已经打开了一整套窗口,但现在只想编辑其中一个,如下命令可以完成这个功能:
:only
这个命令关闭除当前窗口外的所有窗口。如果要关闭的窗口中有一个没有存盘,Vim 会
显示一个错误信息,并且那个窗口不会被关闭。
*08.2* 用另一个文件分割窗口
下面命令打开另一个窗口并用该窗口编辑另一个指定的文件:
:split two.c
如果你在编辑 one.c,则命令执行的结果是:
+----------------------------------+
|/* file two.c */ |
|~ |
|~ |
|two.c=============================|
|/* file one.c */ |
|~ |
|one.c=============================|
| |
+----------------------------------+
要打开窗口编辑一个新文件,可以使用如下命令:
:new
你可以重复使用 ":split" 和 ":new" 命令建立任意多的窗口。
*08.3* 窗口大小
:split 命令可以接受个数前缀。如果指定了这个前缀,这个数将作为窗口的高度。例如
如下命令可以打开一个三行的窗口并编辑文件 alpha.c:
:3split alpha.c
对于已经打开的窗口,你可以用有几种方法改变它的大小。如果你有鼠标,很简单:把
鼠标指针移到分割两个窗口的状态栏上,上下拖动即可。
要扩大窗口:
CTRL-W +
要缩小窗口:
CTRL-W -
这两个命令接受个数前缀用于指定扩大和缩小的行数。所以 "4 CTRL-W +" 会使窗口增
高4行。
要把一个窗口设置为指定的高度,可以用这个命令:
{height}CTRL-W _
就是先输入一个数值,然后输入 CTRL-W 和一个下划线(在美式英语键盘中就是 Shift
加上 "-")。
要把一个窗口扩展到尽可能大,可以使用无个数前缀的 CTRL-W _ 命令。
使 用 鼠 标
在 Vim 中,你可以用键盘很快完成很多工作。但很不幸,改变窗口大小要敲不少键。在
这种情况下,使用鼠标会更快一些。把鼠标指针移到状态条上,按住左键并拖动。状态
条会随之移动,这会使一个窗口更大一个更小。
选 项
'winheight' 选项设置最小的期望窗口高度而 'winminheight' 选项设置最小的 "硬性"
高度。
同样,'winwidth' 设置最小期望宽度而 'winminwidth' 设置为最小硬性宽度。
'equalalways' 选项使所有的窗口在关闭或者打开新窗口的时候总保持相同大小。
*08.4* 垂直分割
":split"命令在当前窗口的上面建立窗口。要在窗口左边打开新窗口,用这个命令:
:vsplit
或者
:vsplit two.c
这个命令的结果如下:
+--------------------------------------+
|/* file two.c */ |/* file one.c */ |
|~ |~ |
|~ |~ |
|~ |~ |
|two.c===============one.c=============|
| |
+--------------------------------------+
实际中,中间的竖线会以反色显示。这称为垂直分割线。它左右分割一个窗口。
还有一个 "vnew" 命令,用于打开一个垂直分割的新窗口。还有一种方法是:
:vertical new
"vertical" 命令可以放在任何分割窗口的命令的前面。这会在分割窗口的时候用垂直
分割取代水平分割。(如果命令不分割窗口,这个前缀不起作用)。
在 窗 口 间 跳 转
由于你可以用垂直分割和水平分割命令打开任意多的窗口,你就能够任意设置窗口的布局。
接着,你可以用下面的命令在窗口之间跳转:
CTRL-W h 跳转到左边的窗口
CTRL-W j 跳转到下面的窗口
CTRL-W k 跳转到上面的窗口
CTRL-W l 跳转到右边的窗口
CTRL-W t 跳转到最顶上的窗口
CTRL-W b 跳转到最底下的窗口
你可能已经注意到这里使用移动光标一样的命令用于跳转窗口。如果你喜欢,改用方向
键也行。
还有其它命令可以跳转到别的窗口,参见:|Q_wi|。
*08.5* 移动窗口
你已经分割了一些窗口,但现在的位置不正确。这时,你需要一个命令用于移动窗口。
例如,你已经打开了三个窗口,象这样:
+----------------------------------+
|/* file two.c */ |
|~ |
|~ |
|two.c=============================|
|/* file three.c */ |
|~ |
|~ |
|three.c===========================|
|/* file one.c */ |
|~ |
|one.c=============================|
| |
+----------------------------------+
显然,最后一个窗口应该在最上面。移动到那个窗口 (用 CTRL-W w)并输入如下命令:
CTRL-W K
这里使用大写的 K。这样窗口将被移到最上面。你可以注意到,这里有用 K 表示向上
移动了。
如果你用的是垂直分割,CTRL-W K 会使当前窗口移动到上面并扩展到整屏的宽度。
假设你的布局如下:
+-------------------------------------------+
|/* two.c */ |/* three.c */ |/* one.c */ |
|~ |~ |~ |
|~ |~ |~ |
|~ |~ |~ |
|~ |~ |~ |
|~ |~ |~ |
|two.c=========three.c=========one.c========|
| |
+-------------------------------------------+
当你在中间的窗口(three.c)中使用 CTRL-W K 后,结果会是:
+-------------------------------------------+
|/* three.c */ |
|~ |
|~ |
|three.c====================================|
|/* two.c */ |/* one.c */ |
|~ |~ |
|two.c==================one.c===============|
| |
+-------------------------------------------+
还有三个相似的命令(估计你已经猜出来了):
CTRL-W H 把当前窗口移到最左边
CTRL-W J 把当前窗口移到最下边
CTRL-W L 把当前窗口移到最右边
*08.6* 对所有窗口执行命令
你打开了几个窗口,现在你想退出 Vim,你可以分别关闭每一个窗口。更快的方法是:
:qall
这表示 "quit all"(全部退出)。如果任何一个窗口没有存盘,Vim 都不会退出。同时
光标会自动跳到那个窗口,你可以用 ":write" 命令保存该文件或者 ":quit!" 放弃修改。
如果你知道有窗口被改了,而你想全部保存,则执行如下命令:
:wall
这表示 "write all"(全部保存)。但实际上,它只会保存修改过的文件。Vim 知道保
存一个没有修改过的文件是没有意义的。
另外,还有 ":qall" 和 "wall" 的组合命令:
:wqall
这会保存所有修改过的文件并退出 Vim 。
最后,下面的命令由于退出 Vim 并放弃所有修改:
:qall!
注意,这个命令是不能撤消的。
为 所 有 的 参 数 打 开 窗 口
要让 Vim 为每个文件打开一个窗口,可以使用 "-o" 参数:
vim -o one.txt two.txt three.txt
这个结果会是:
+-------------------------------+
|file one.txt |
|~ |
|one.txt========================|
|file two.txt |
|~ |
|two.txt========================|
|file three.txt |
|~ |
|three.txt======================|
| |
+-------------------------------+
"-o" 参数用于垂直分割窗口。
如果 Vim 已经启动了,可以使用 ":all" 命令为参数列表中的每个文件打开一个窗
口。":vertical all" 以垂直分割的方法打开窗口。
*08.7* 用 vimdiff 显示区别
有一种特殊的启动 Vim 的方法可以用来显示两个文件的区别。让我们打开一个 "main.c"
并插入一些字符。在设置了 'backup' 选项的情况下保存这个文件,以便产生 "main.c~"
备份文件。
在命令行中输入如下命令:(不是在Vim中)
vimdiff main.c~ main.c
Vim 会用垂直分割的方式打开两个文件。你只能看到你修改过的地方和上下几行的地方。
VV VV
+-----------------------------------------+
|+ +--123 lines: /* a|+ +--123 lines: /* a| <- 折叠
| text | text |
| text | text |
| text | text |
| text | changed text | <- 修改过的行
| text | text |
| text | ------------------| <- 删除的行
| text | text |
| text | text |
| text | text |
|+ +--432 lines: text|+ +--432 lines: text| <- 折叠
| ~ | ~ |
| ~ | ~ |
|main.c~==============main.c==============|
| |
+-----------------------------------------+
(这幅图没有显示出加亮效果,可以使用 vimdiff 命令看到更好的效果)
那些没有修改的行会被折叠成一行,这称为 "关闭的折叠"(closed fold)。上图
中由 "<- 折起" 标记的行就是一个用一行表示123行的折叠。这些行在两个文件中完全
相同。
标记为 "<- 修改过的行" 被高亮显示,而增加的行被用另一种颜色表示。这可以
很清楚地表示出两个文件间的不同。
被删除的行在 main.c 窗口中用 "---" 显示,如图中用 "<- 删除的行" 标记的行。
这些字符并不是真的存在。它们只是用于填充 main.c,以便与另一个窗口对齐。
折 叠 栏
每个窗口在左边都有一个颜色略有不同的显示栏,图中标识为 "VV"。你会发现每个折叠
在那个位置都有一个加号。把鼠标移到那里并按左键可以打开那个折起,从而让你看到
里面的内容。
对于打开的折叠,折叠栏上会出现一个减号。如果你单击那个减号,折叠会被重新关
闭。
当然,这只能在你有鼠标的情况下使用。如果你没有,可以用 "zo" 打开一个折叠。
关闭使用 "zc"。
用 Vim 做 比 较
启动比较模式的另一种方法是从 Vim 内部开始:编辑 "main.c" 文件,然后分割窗口
显示区别:
:edit main.c
:vertical diffsplit main.c
":vertical" 命令使窗口用垂直的方式分割。如果你不写这个命令,结果会变成水平分
割。
如果你有一个当前文件的补丁或者 diff 文件,你可以有第三种方法启动比较模式:
先编辑这个文件,然后告诉 Vim 补丁文件的名称:
:edit main.c
:vertical diffpatch main.c diff
警告:补丁文件中必须仅包括为一个目标文件所做的补丁,否则你可能会得到一大堆错
误信息。还可能有些你没打算打补丁的文件被打了补丁。
补丁功能只改变你内存中的文件,不会修改你硬盘上的文件(除非你决定写入改动)。
滚 屏 绑 定
当文件中有很多改动时,你可以用通常的方式滚动屏幕。Vim 会尽可能保持两个文件对
齐,以便你可以并排看到文件的区别。
如果暂时想关闭这个特性,使用如下命令:
:set noscrollbind
跳 转 到 修 改 的 地 方
如果你通过某种方法取消了折叠功能,可能很难找到有改动的地方。使用如下命令可以跳
转到下一个修改点:
]c
反向跳转为:
[c
加上一个个数前缀可以跳得更远。
消 除 差 异
你可以把文本从一个窗口移到另一个,并以此来消除差异,或者为其中一个文件中增加
几行。Vim 有时可能无法及时更新高亮显示。要修正这种问题,使用如下命令:
:diffupdate
要消除差异,你可以把一个高亮显示的块从一个窗口移动到另一个窗口。以上面的
"main.c" 和 "main.c~" 为例,把光标移到左边的窗口,在另一个窗口中被删除的行
的位置,执行如下命令:
:dp
这将把文字从左边拷到右边,从而消除两边的差异。"dp" 代表 "diff put"。
你也可以反过来做:把光标移到右边的窗口,移到被 "改动" 了的行上,然后执行
如下命令:
:do
这把文本从左边拷到右边,从而消除差异。由于两个文件已经没有区别了,Vim 会把所有
文字全部折叠起来。"do" 代表 "diff obtain"。本来用 "dg" (diff get) 会更好。可是
它已经有另外的意思了 ("dgg" 删除从光标为止到首行的所有文本 )。
要了解更多的比较模式的内容,参见 |vimdiff| 。
*08.8* 杂项
'laststatus' 选项用于指定什么时候对最后一个窗口显示状态条:
0 永远不
1 只有用分割窗口的时候(默认)
2 永远有
很多编辑另一个文件的命令都有一个使用分割窗口的变体。对于命令行命令,这通过前置
一个 "s" 实现。例如 ":tag" 用来跳到一个标记,"stag" 就会分割出一个新窗口并跳到
那个标记。
对于普通模式,前置一个 CTRL-W 可以完成这个功能。例如,CTRL-^ 跳到备选文
件,而 CTRL-W CTRL-^ 打开一个新窗口并编辑备选文件。
'splitbelow' 选项可以让新的窗口出现在当前窗口的下面。'splitright' 选项让垂直
分割的窗口出现在当前窗口的右边。
打开一个新窗口时可以在命令前加上一个修饰符说明新窗口应该出现在什么地方:
:leftabove {cmd} 当前窗口的左上方
:aboveleft {cmd} 同上
:rightbelow {cmd} 当前窗口的右下方
:belowright {cmd} 同上
:topleft {cmd} 整个 Vim 窗口的最上面或者最左边
:botright {cmd} 整个 Vim 窗口的最下面或者最右边
引用功能被关闭了。
问题:rm -rf /data/www/*
rm: cannot remove ‘/data/www/yum.boosh.com.cn/centos/5/x86_64/rsyslog_v8/RPMS’: Directory not empty
办法:
在linux系统中,我们有时候删除文件夹的时候,提示rm: cannot remove `dir-name’: Directory not empty,或者文件夹非空,即使使用sudo也无法删除,那是因为系统存在使用或者执行文件夹中可执行程序,我们只需要执行命令:
lsof dir-name/.fuse_hidden000bd8c100000*
which lsof
/usr/sbin/lsof
rpm -qf /usr/sbin/lsof
lsof-4.82-5.el6.x86_64
找到那些程序在使用文件夹中的文件,
然后使用
kill 命令结束进程,如:kill 2739
然后就可以删除文件夹了。
From:https://blog.csdn.net/u014001964/article/details/82291064
引用功能被关闭了。
一)nginx的引入epoll后惊群处理:
accept() 和 epoll_wait() 调用,还存在一个惊群的问题。换句话说,当网络 I/O 事件发生时,多个进程被同时唤醒,但实际上只有一个进程来响应这个事件,其他被唤醒的进程都会重新休眠。
其中,accept() 的惊群问题,已经在 Linux 2.6 中解决了;
而 epoll 的问题,到了 Linux 4.5 ,才通过 EPOLLEXCLUSIVE 解决。
为了避免惊群问题, Nginx 在每个 worker 进程中,都增加一个了全局锁(accept_mutex)。这些 worker 进程需要首先竞争到锁,只有竞争到锁的进程,才会加入到 epoll 中,这样就确保只有一个 worker 子进程被唤醒。
简单点说:Apache动辄就会启动成百上千的进程,如果发生惊群问题的话,影响相对较大;但是对Nginx而言,一般来说,worker_processes会设置成CPU个数,所以最多也就几十个,即便发生惊群问题的话,影响相对也较小。
另:高版本的Linux中,accept不存在惊群问题,不过epoll_wait等操作还有。
…
假设你养了一百只小鸡,现在你有一粒粮食,那么有两种喂食方法:
你把这粒粮食直接扔到小鸡中间,一百只小鸡一起上来抢,最终只有一只小鸡能得手,其它九十九只小鸡只能铩羽而归。这就相当于关闭了accept_mutex。
你主动抓一只小鸡过来,把这粒粮食塞到它嘴里,其它九十九只小鸡对此浑然不知,该睡觉睡觉。这就相当于激活了accept_mutex。
可以看到此场景下,激活accept_mutex相对更好一些,让我们修改一下问题的场景,我不再只有一粒粮食,而是一盆粮食,怎么办?
此时如果仍然采用主动抓小鸡过来塞粮食的做法就太低效了,一盆粮食不知何年何月才能喂完,大家可以设想一下几十只小鸡排队等着喂食时那种翘首以盼的情景。此时更好的方法是把这盆粮食直接撒到小鸡中间,让它们自己去抢,虽然这可能会造成一定程度的混乱,但是整体的效率无疑大大增强了。
Nginx缺省激活了accept_mutex(最新版缺省禁用),是一种保守的选择。如果关闭了它,可能会引起一定程度的惊群问题,表现为上下文切换增多(sar -w)或者负载上升,但是如果你的网站访问量比较大,为了系统的吞吐量,我还是建议大家关闭它。
链接:https://www.jianshu.com/p/129dd4320ae1
二)边缘触发和水平触发主要体现在边缘触发程序复杂还是系统承担这个复杂而用水平触发,边缘触发只通知一次,增加程序处理难度和各种异常处理:
第一种,使用非阻塞 I/O 和水平触发通知,比如使用 select 或者 poll。
根据刚才水平触发的原理,select 和 poll 需要从文件描述符列表中,找出哪些可以执行 I/O ,然后进行真正的网络 I/O 读写。由于 I/O 是非阻塞的,一个线程中就可以同时监控一批套接字的文件描述符,这样就达到了单线程处理多请求的目的。
所以,这种方式的最大优点,是对应用程序比较友好,它的 API 非常简单。
但是,应用软件使用 select 和 poll 时,需要对这些文件描述符列表进行轮询,这样,请求数多的时候就会比较耗时。并且,select 和 poll 还有一些其他的限制。
select 使用固定长度的位相量,表示文件描述符的集合,因此会有最大描述符数量的限制。比如,在 32 位系统中,默认限制是 1024。并且,在 select 内部,检查套接字状态是用轮询的方法,再加上应用软件使用时的轮询,就变成了一个 O(n^2) 的关系。
而 poll 改进了 select 的表示方法,换成了一个没有固定长度的数组,这样就没有了最大描述符数量的限制(当然还会受到系统文件描述符限制)。但应用程序在使用 poll 时,同样需要对文件描述符列表进行轮询,这样,处理耗时跟描述符数量就是 O(N) 的关系。
除此之外,应用程序每次调用 select 和 poll 时,还需要把文件描述符的集合,从用户空间传入内核空间,由内核修改后,再传出到用户空间中。这一来一回的内核空间与用户空间切换,也增加了处理成本。
有没有什么更好的方式来处理呢?答案自然是肯定的。
第二种,使用非阻塞 I/O 和边缘触发通知,比如 epoll。
既然 select 和 poll 有那么多的问题,就需要继续对其进行优化,而 epoll 就很好地解决了这些问题。
epoll 使用红黑树,在内核中管理文件描述符的集合,这样,就不需要应用程序在每次操作时都传入、传出这个集合。
epoll 使用事件驱动的机制,只关注有 I/O 事件发生的文件描述符,不需要轮询扫描整个集合。
不过要注意,epoll 是在 Linux 2.6 中才新增的功能(2.4 虽然也有,但功能不完善)。由于边缘触发只在文件描述符可读或可写事件发生时才通知,那么应用程序就需要尽可能多地执行 I/O,并要处理更多的异常事件。
第三种,使用异步 I/O(Asynchronous I/O,简称为 AIO)。在前面文件系统原理的内容中,我曾介绍过异步 I/O 与同步 I/O 的区别。异步 I/O 允许应用程序同时发起很多 I/O 操作,而不用等待这些操作完成。而在 I/O 完成后,系统会用事件通知(比如信号或者回调函数)的方式,告诉应用程序。这时,应用程序才会去查询 I/O 操作的结果。
异步 I/O 也是到了 Linux 2.6 才支持的功能,并且在很长时间里都处于不完善的状态,比如 glibc 提供的异步 I/O 库,就一直被社区诟病。同时,由于异步 I/O 跟我们的直观逻辑不太一样,想要使用的话,一定要小心设计,其使用难度比较高。
工作模型优化
了解了 I/O 模型后,请求处理的优化就比较直观了。使用 I/O 多路复用后,就可以在一个进程或线程中处理多个请求,其中,又有下面两种不同的工作模型。
第一种,主进程 + 多个 worker 子进程,这也是最常用的一种模型。这种方法的一个通用工作模式就是:
主进程执行 bind() + listen() 后,创建多个子进程;
然后,在每个子进程中,都通过 accept() 或 epoll_wait() ,来处理相同的套接字。
比如,最常用的反向代理服务器 Nginx 就是这么工作的。它也是由主进程和多个 worker 进程组成。主进程主要用来初始化套接字,并管理子进程的生命周期;而 worker 进程,则负责实际的请求处理。我画了一张图来表示这个关系。
引用功能被关闭了。
示例五:显示每个进程的上下文切换情况(-w)
pidstat -w -p 2831
PID:进程id
Cswch/s:每秒主动任务上下文切换数量
Nvcswch/s:每秒被动任务上下文切换数量
Command:命令名
示例六:显示选择任务的线程的统计信息外的额外信息 (-t)
pidstat -t -p 2831
$pidstat -t -p 4194
Linux 4.20.3-1.el7.elrepo.x86_64 (levoo-web_php_bj_cp_101_200_228_135) 02/03/19 _x86_64_ (1 CPU)
15:51:17 UID TGID TID %usr %system %guest %CPU CPU Command
15:51:17 0 4194 - 0.00 0.00 0.00 0.00 0 minivtun
15:51:17 0 - 4194 0.00 0.00 0.00 0.00 0 |__minivtun
链接:https://www.jianshu.com/p/3991c0dba094
WEB2.0 jackxiang 2019-1-30 14:44
引用功能被关闭了。
winscp远程连接工具,用于远程连接linux服务器,上传和下载文件特别方便,自带断点续传功能:
DownLoad:https://winscp.net/eng/docs/lang:chs
还可以用跳板机进行传文件,winScp如何通过隧道代理进行远程连接,
实践OK:https://www.cnblogs.com/wangkongming/p/4124945.html
Filezilla 支持Mac:
Filezilla客户端版成为一个方便高效的FTP客户端工具,而FileZilla Server则是一个小巧并且可靠的支持FTP&SFTP的FTP服务器软件。
FileZilla是一种快速、可信赖的FTP客户端以及服务器端开放源代码程式,具有多种特色、直接的接口。FileZilla在2002年11月获选为当月最佳推荐专案。
引用功能被关闭了。
centos6.8不能安装最新版git的解决办法:
1 Install WANDisco repo package:
yum install http://opensource.wandisco.com/centos/6/git/x86_64/wandisco-git-release-6-1.noarch.rpm
2 Install the latest version of Git 2.x:
yum install git
3 Verify the version of Git that was installed:
git --version
来自链接:https://www.jianshu.com/p/ab98dd540919
引用功能被关闭了。
option + command+esc
引用功能被关闭了。
注64位系统
第一步下载 wget http://www.rarlab.com/rar/rarlinux-x64-5.3.0.tar.gz
第二步解压 tar -zxvf rarlinux-x64-5.3.0.tar.gz
第三步 进入解压出的“rar”文件夹 cd rar
第四步 进行配置 make
显示如下表示成功
mkdir -p /usr/local/bin
mkdir -p /usr/local/lib
cp rar unrar /usr/local/bin
cp rarfiles.lst /etc
cp default.sfx /usr/local/lib
可以用rar命令开始解压
rar x test.rar //解压 test.rar 到当前目录
压缩
rar test.rar ./test/ //将 test目录打包为 test.rar
---------------------
原文:https://blog.csdn.net/weixin_41404058/article/details/80304869
引用功能被关闭了。
部分应用可使用common+n快捷键
引用功能被关闭了。
相信不少使用 Mac 的朋友对 OS X 里的时间显示都有很大意见,只能显示当前日期,功能缺失得很厉害,所以不少朋友都使用第三方的日历软件来取代系统自带的,像 Fantastical。不过 Fantastical 是一款收费软件,如果想要免费软件的话,其实大家还可以试试这款 Itsycal。
官方网站:https://www.mowglii.com/itsycal/
http://www.apprcn.com/itsycal.html
Mac下的惠普打印机驱动下载:
https://support.hp.com/us-en/drivers/selfservice/hp-laserjet-pro-m1536-multifunction-printer-series/3974271
里面有选择Mac版本,怎么看自己电脑的版本呢?https://jingyan.baidu.com/article/3f16e003198f592591c10338.html
引用功能被关闭了。
brew install tree
来自:https://blog.csdn.net/xidiancoder/article/details/72654583
引用功能被关闭了。
brew install iproute2mac
来自:https://blog.csdn.net/u010164190/article/details/79474309
实用工具-》网络工具-》Traceroute
来自:https://blog.csdn.net/qq_38789531/article/details/82734646
银色经典 jackxiang 2019-1-20 19:28
引用功能被关闭了。
引用功能被关闭了。
密钥登陆能,发现SSH不行,提示:
$ssh -l xiangdong 10.244.25.**
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
到:
$ssh -l xiangdong 10.244.25.**
xiangdong@10.244.25.89's password:
实践OK办法,能密钥能密码:
cat /etc/ssh/sshd_config|grep -E "PermitRootLogin|UsePAM|PasswordAuthentication"
UsePAM yes #改成NO后出现需要密钥,还登陆不了。后修改为yes后重启oK service sshd restart
PermitRootLogin yes
PasswordAuthentication yes
root依然不行,修改UsePAM no,还是不行,后来加一个irdcops帐号且能 sudo ,也就用它去SSH就行了:
$ssh -l root 10.244.25.**
root@10.244.25.**'s password:
Permission denied, please try again.
==================================
首先:配置ssh服务器配置文件。
在root 用户下才能配置。
vi /etc/ssh/sshd_config
权限设为no:
#PermitRootLogin yes
#UsePAM yes
#PasswordAuthentication yes
如果前面有# 号,将#号去掉,之后将yes修改为no。
修改之后为:
PermitRootLogin no
UsePAM no
PasswordAuthentication no
权限设为yes:
RSAAuthentication yes
PubkeyAuthentication yes
(2)重启sshd服务
systemctl restart sshd.service
systemctl status sshd.service #查看ssh服务的状态
#systemctl start sshd.service #开启ssh服务
#sytemctl enable sshd.service #ssh服务随开机启动,还有个disabled
#systemctl stop sshd.ervice #停止
正常情况下应该是Active:active(running)
摘自:https://www.cnblogs.com/xubing-613/p/6844564.html
WEB2.0 jackxiang 2019-1-17 09:59
引用功能被关闭了。
用了这么久的MAC,一直在找这个剪切文件的方法。
今天没事在网上找别的东西时偶然的发现了关于MAC下剪切的快捷键!
和大家分享一下!!
首先选中文件,按Command+C复制文件;
然后按Command+Option+V;就可以把你的文件剪走了!
在这里补充一下,我这里讲的是剪切文件夹,不是剪切文本和文字!Command+X只能剪切文字文本之类的!
来自:https://bbs.feng.com/read-htm-tid-5861420.html
分页: 1/330
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
[ 显示模式:
摘要 |
列表 ]