[原创]一些未归类的命令、操作方法或问题总结(5)

下面是一些未归类的命令及操作方法,专门记在此文中,以便将来查询。由于文章较长,请用Ctrl+F查询关键字来定位到你需要的内容。

(1)Eclipse C++项目设置 头文件/include 路径
在一个项目上点击右键→Properties→C/C++ General→Paths and Symbols→Includes→在“GNU C”和“GNU C++”中添加头文件路径。
基本要添加的路径可用如下命令获取:

echo "" | g++ -v -x c++ -E -

路径没有设置好的话,项目中会看到很多无法识别的类。

(2)SecureCRT全屏切换的快捷键
如果你不小心按错了键使SecureCRT进入全屏模式的话,可能会发现找不到按钮可以让它切换回正常模式。 请按 Alt + Enter 切换到正常模式。

(3)Visual Studio的启动程序在哪个目录下
在你安装目录下的 Common7\IDE\devenv.exe

(4)Win7下运行Visual Studio时提示“要运行Visual Studio 2005 SP1,建议使用管理员权限”的问题
右键点击上面提到的“
devenv.exe”,点击“属性”→“兼容性”→选中“以兼容模式运行这个程序”→选择“Windows Server 2003 (Service Pack 1)”,然后重新启动Visual Studio程序,就会发现提示已经消失了。
文章来源:http://www.codelast.com/
(5)让Total Commander在快速搜索的时候,只显示符合条件的文件(其他的文件隐藏起来)
Total Commander菜单的“配置”→“选项”→“快速搜索”→“快速搜索(当前文件夹)”中选择“字母(显示快速搜索框)”→“文件名精确匹配”两个复选框都不要选中,然后回到Total Commander的文件浏览器中,随便按几个按键让它开始快速搜索,会发现在下方出现了一个“搜索”小对话框,右边有一个按钮,上面写着“Ctrl+S”,你需要确保它是按下的状态,这样就可以筛选掉不符合快速搜索条件的文件了。

(6)让VS 2012创建项目时,提示“未能正确加载Visual C++ Language Manager Package...”的解决办法
下载这个patch并安装即可解决。

(7)在PowerPoint中输入上标、下标的快捷键
上标:选中要置为上标的数字,按Ctrl+Shift+=

下标:选中要置为下标的数字,按Ctrl+=
再按一次相同的快捷键则取消效果。
文章来源:http://www.codelast.com/
(8)用Linux find命令查找所有包含指定字符串内容的文件

find /home/codelast/ -name "*" | xargs grep "abc"

表示查找 /home/codelast/ 目录下,所有内容里包含字符串“abc”的文件。这种方法,若包含子目录,则无法递归查找下去。

另一种方法:用grep命令实现:

grep -n -r "abc" ./

表示查找当前目录(./)下,含有字符串“abc”的所有文件。-n表示打印出行号,-r表示递归查找,也就是说目录中若包含子目录,会一级级查找下去。

(9)VIM跳到第一行、最后一行的快捷键
跳到第一行/首行:gg:0
跳到最后一行/末行:Shift+G:$

(10)用sed命令批量删除一堆文本文件中的指定字符串

sed -i "s/abcde//g" file*

表示将当前目录下的所有file*文件中的“abcde”字符串删除(替换为空字符串就等于是删除了)。
如果要删除匹配的行呢?像下面这样:

sed -i "/emails/d" file*

表示删除所有file*文件中,含有“emails”字符串的所有行。

(11)Emacs刷新缓冲区(buffer)的快捷键
例如,在Emacs中打开的文件被其他程序修改了,需要在Emacs中体现出来,可以这样:

M-x revert-buffer

(12)Linux shell命令:统计一个目录下(包括子目录)的文件/目录个数
统计一个目录下(包括子目录)的文件个数:

ls -lR dir_to_scan | grep "^-" | wc -l

统计一个目录下(包括子目录)的目录个数:

ls -lR dir_to_scan | grep "^d" | wc -l

以上命令中,dir_to_scan即为要搜索的目录。
文章来源:http://www.codelast.com/
(13)grep查询制表符\t
用grep查询一个文本文件中的制表符,如果直接这样写是无效的:

grep "\t" file.txt

就算file.txt中有制表符,也匹配不到。
应该这样:

grep -P "\t" file.txt

(14)lftp的基本用法
登录远程FTP服务器:

lftp 用户名@服务器地址:服务器端口

然后会让你输入密码登录。
如果嫌麻烦的话可以直接把密码写在命令中:

lftp 用户名:密码@服务器地址:服务器端口 

但是显然,这样会被shell history记录下来,不太安全。

上传一个本地文件到FTP服务器上:

put /home/codelast/local_file.txt

这样会把本地的文件上传到你所在的FTP目录下。

(15)JAVA中,"UTF-8"这个字符串常量定义在哪?
程序中会经常使用到"UTF-8"这个字符串常量,如果老是写这个字符串的话,显然很二,所以,要么自己定义一个字符串常量,要么用哪里已经定义好的。请看这个链接。
我习惯于使用
org.apache.commons.codec.CharEncoding.UTF_8这个字符串常量,它依赖于Apache的commons-codec,jar包名形如commons-codec-1.6.jar(版本不同则不是这个名字)。
另外还有一个常用的选择就是使用Guava库:

com.google.common.base.Charsets.UTF_8.name()

同样将得到“UTF-8”。

(16)rsync over ssh的用法
直接看命令:

rsync -avz -e ssh 用户名@服务器地址:远程文件路径 本地路径

例如:

rsync -avz -e ssh user@codelast.com:/abc/file.gz /home/codelast/

则会将远程服务器上的 /abc/file.gz 文件同步到本地的 /home/codelast/ 目录下。

(17)使用rsync从client向server推送文件时,发生 auth failed on module xxx from unknown (192.168.1.26): missing secret for user "rsync" 错误(从rsync server的日志中可以看到)的解决办法
请注意,如果你的rsync server端用到了一个密码文件(例如rsyncd.secrets),它的文件权限必须为600或400(不允许other用户读写):

chmod 600 rsyncd.secrets

否则就会发生上面的错误。
文章来源:http://www.codelast.com/
(18)吃掉shell命令的错误提示
这是个非常简单的老问题了,例如,你 ls 一个不存在的文件,就会输出错误提示“
ls: xxx: No such file or directory”,如果在shell脚本中执行这个命令,不想让它输出错误提示的话,可以这样:

ls xxx >/dev/null 2>&1

(19)Eclipse CDT打开一个.cpp文件时,默认显示是代码折叠的问题
代码折叠,意味着函数什么的只显示一行,括号中的具体内容不显示,这样可能会导致很多人不习惯,可以在配置中改掉:
Window→Preference→C/C++→Editor→Folding,去掉“Enable folding when opening a new editor”选项上的勾即可。重新打开代码文件,就没有代码折叠的问题了。

(20)用“msmtp 邮件地址”发送邮件时提示“Fmsmtp: GNU SASL: Base 64 coding error in SASL library”错误的解决办法
在命令行用msmtp发送邮件的方法是:

msmtp abc@gmail.com
(输入一些内容,任意行数,任意字数,完成之后,按 Ctrl+D 键,邮件会立即发送)

其中,abc@gmai.com是要邮件接收地址。
但是可能你还没输入任何内容,只是执行了“msmtp 邮件地址”这个命令,就提示了类似于下面的错误:

Fmsmtp: GNU SASL: Base 64 coding error in SASL library
msmtp: could not send mail (account default from /root/.msmtprc)

此时可以尝试把.msmtprc配置文件中的“auth login”改为“auth plain”,即有可能解决问题。

(21)awk求文件中某一列的和
假设要求文件file.txt中第3列的和,则:

awk -F"\t" '{(total+=$3)};END{print total}' file.txt

上面指定了3列的分隔符为\t

(22)强制Chrome访问指定网站时使用https
例如访问Google时强制Chrome使用https,怎么做?在Chrome的浏览器栏输入:

Chrome://net-internals/

在左上角的下拉框里选择“HSTS”,在下面的“Domain:”输入框里填上“google.com”,然后再勾上“Include subdomains for STS”(表示对所有google.com的子域名都有效),再点击“Add”,然后重新打开浏览器,再访问Google,就会发现真的强制使用https了。

Chrome force use https

(23)解决无法使用screen命令时提示的错误:Cannot open your terminal '/dev/pts/0' - please check.
只需要先执行一个命令即可:

script /dev/null

然后再执行screen命令,OK了。

(24)修复CentOS 5下的bash注入漏洞
近日(2014年9月),一个引人注目的bash漏洞浮出水面,具体解读可看这里。在CentOS下测试你的系统是否有漏洞:

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

若输出下面的结果则说明你的bash有严重漏洞:

vulnerable
this is a test

修复方法很简单:

yum update bash -y
/sbin/ldconfig
rpm -qa bash

之后再用上面的测试方法进行测试,若只输出“this is a test”则说明漏洞已完全修复!
文章来源:http://www.codelast.com/
(25)awk取最后一列、倒数第二列
用awk分割后,取最后一列以及倒数第二列的方法:

[codelast@ temp]$ cat a.txt 
/usr/bin/1.txt
/usr/bin/2.txt
/usr/bin/3.txt
[codelast@ temp]$ cat a.txt | awk -F "/" '{print $(NF-1)"/"$NF}'
bin/1.txt
bin/2.txt
bin/3.txt

可见$NF表示最后一列,并且可用它减去任意数字得到其前面的列。

(26)查看Ruby gem的安装路径

gem environment 

在输出结果中有类似于下面的这一段,即为其安装路径:

  - GEM PATHS:
     - /usr/lib64/ruby/gems/2.1.0
     - /root/.gem/ruby/2.1.0

(27)如何查看本地的Ruby doc/本地Ruby doc server的开启

[codelast@ ~]$ gem server --daemon
Server started at http://0.0.0.0:8808

然后就可以用浏览器访问 http://0.0.0.0:8808 来查看安装过的gem的Ruby doc了。

(28)Ubuntu下的Thunderbird,在新邮件到达时不显示通知
默认情况下,有新邮件到达时,Thunderbird会在Ubuntu的右上角显示一个弹出的小窗口通知,如果邮件多的话,这个窗口就会频繁弹出,非常令人不悦,因此可以修改Thunderbird的配置,让它不显示:
编辑→首选项→常规→新消息到达时→去掉“显示警告”前的勾

(29)T如何清空Chrome的Secure Shell插件中的known_hosts记录?
在Secure Shell的主界面里,用快捷键“Ctrl+Shift+J”打开JavaScript控制台工具,执行如下命令:

> term_.command.removeAllKnownHosts()
true

回车之后就搞定了。

(30)screen强制接管一个会话(session)
当用 screen -r 无法 attach 一个session的时候,可以用下面的命令,踢掉原来的用户,强制attach到指定的session上:

screen -D -r <session_id>

文章来源:http://www.codelast.com/
(31)如何防止Google表单把输入的“true”自动转化为大写的“TRUE”
这个特性不是Google表单的bug,但是确实很恼人。其实只要在输入的时候,在“true”(不含引号)前面加一个单引号就可以输入小写的true了,就像这样:
'true

(32)Zookeeper server以指定的配置文件启动

./zkServer.sh start zoo.cfg
则启动时,会用同目录下的 zoo.cfg 作为配置文件。

(33)读取本地磁盘上的Thrift文件,以及把Thrfit对象写到本地文件
一言不合直接看代码:

// 待读取的Thrift格式文件的路径
String filePath = "/home/codelast/my-thrift-file";

// 读取成byte数组
byte[] bytes = Files.readAllBytes(new File(filePath).toPath());

// 反序列化器
TDeserializer deserializer = new TDeserializer();

// 文件中存储的Thrift对象的格式
MyThrift myThriftObject = new MyThrift();

// 反序列化,执行之后文件中存储的数据就被保存到了 myThriftObject 这个对象中
deserializer.deserialize(myThriftObject, bytes);

以及写文件:

private void writeThriftObject2File(MyThrift thriftObj, String outputFilePath) throws IOException, TException {
  BufferedOutputStream bufferedOut = new BufferedOutputStream(new FileOutputStream(outputFilePath), 2048);
  TBinaryProtocol binaryOut = new TBinaryProtocol(new TIOStreamTransport(bufferedOut));
  thriftObj.write(binaryOut);
  bufferedOut.flush();
}

文章来源:http://www.codelast.com/
(34)tmux从小屏幕换到大屏幕之后显示不全屏的问题
如果你在一台分辨率小的电脑上创建了一个tmux session,然后在一台分辨率高的电脑上attach这个session,会发现attach上之后,tmux并不是全屏显示,而是小分辨率那部分形成了一个框框,在屏幕的其他部分都是无用的区域,这看起来非常难受,事实上,可以在attach的时候,加一个 -d 参数解决这个问题:

tmux attach -d

如果要 attach 到指定序号的session上,这样做:

tmux attach -d -t 3

其中 3 是session的序号。
注意:这个操作会detach其他的tmux客户端。

文章来源:https://www.codelast.com/
➤➤ 版权声明 ➤➤ 
转载需注明出处:codelast.com 
感谢关注我的微信公众号(微信扫一扫):

wechat qrcode of codelast

发表评论