macOS 使用总结

Posted by The Drunkard's Walk on April 16, 2017

Mac 批量改名

想把目录下1200+个文件后缀为.html改为.txt,有两个方法,一是临时写一个脚本文件

for i in *.html;
  do mv "$i" "${i%.html}.txt";
done

二是用rename工具,此工具非常强大,还支持正则表达式

$rename -n s/\.html$/\.txt/ *
'aaa.html' would be renamed to 'aaa.txt'
'fwe2.html' would be renamed to 'fwe2.txt'

使用rename批量更改文件名称

rename支持正则表达式来重命名,比如我目录下有如下文件:

  • [德]马克斯韦伯-韦伯作品集[10]:印度的宗教:印度教与佛教.pdf
  • [德]马克斯韦伯-韦伯作品集[11]:古犹太教.pdf
  • [德]马克斯韦伯-韦伯作品集[12]:新教伦理与资本主义精神.pdf
  • [德]马克斯韦伯-韦伯作品集[1]:学术与政治.pdf
  • [德]马克斯韦伯-韦伯作品集[2]:经济与历史%2B%2B支配的类型.pdf
  • [德]马克斯韦伯-韦伯作品集[3]:支配社会学.pdf
  • [德]马克斯韦伯-韦伯作品集[4]:经济行动与社会团体.pdf
  • [德]马克斯韦伯-韦伯作品集[5]:中国的宗教+宗教与世界.pdf
  • [德]马克斯韦伯-韦伯作品集[6]:非正当性的支配:城市类型学.pdf
  • [德]马克斯韦伯-韦伯作品集[7]:社会学的基本概念.pdf
  • [德]马克斯韦伯-韦伯作品集[8]:宗教社会学.pdf
  • [德]马克斯韦伯-韦伯作品集[9]:法律社会学.pdf

想把[德]马克斯韦伯-韦伯作品集[xx]:去掉,因为在目录下显得有点多余,用如下命令

$ rename -n s/'^\[.*\]:'//g *
'[德]马克斯韦伯-韦伯作品集[10]:印度的宗教:印度教与佛教.pdf' would be renamed to '印度的宗教:印度教与佛教.pdf'
'[德]马克斯韦伯-韦伯作品集[11]:古犹太教.pdf' would be renamed to '古犹太教.pdf'
'[德]马克斯韦伯-韦伯作品集[12]:新教伦理与资本主义精神.pdf' would be renamed to '新教伦理与资本主义精神.pdf'
'[德]马克斯韦伯-韦伯作品集[1]:学术与政治.pdf' would be renamed to '学术与政治.pdf'
'[德]马克斯韦伯-韦伯作品集[2]:经济与历史%2B%2B支配的类型.pdf' would be renamed to '经济与历史%2B%2B支配的类型.pdf'
'[德]马克斯韦伯-韦伯作品集[3]:支配社会学.pdf' would be renamed to '支配社会学.pdf'
'[德]马克斯韦伯-韦伯作品集[4]:经济行动与社会团体.pdf' would be renamed to '经济行动与社会团体.pdf'
'[德]马克斯韦伯-韦伯作品集[5]:中国的宗教+宗教与世界.pdf' would be renamed to '中国的宗教+宗教与世界.pdf'
'[德]马克斯韦伯-韦伯作品集[6]:非正当性的支配:城市类型学.pdf' would be renamed to '非正当性的支配:城市类型学.pdf'
'[德]马克斯韦伯-韦伯作品集[7]:社会学的基本概念.pdf' would be renamed to '社会学的基本概念.pdf'
'[德]马克斯韦伯-韦伯作品集[8]:宗教社会学.pdf' would be renamed to '宗教社会学.pdf'
'[德]马克斯韦伯-韦伯作品集[9]:法律社会学.pdf' would be renamed to '法律社会学.pdf'

将下载的系列文件命名更改规则

$ rename -n s/'^notes([1-9])'/'notes0$1'/g *
'notes1.pdf' would be renamed to 'notes01.pdf'
'notes2.pdf' would be renamed to 'notes02.pdf'
'notes3.pdf' would be renamed to 'notes03.pdf'
'notes4.pdf' would be renamed to 'notes04.pdf'
'notes5.pdf' would be renamed to 'notes05.pdf'
'notes6.pdf' would be renamed to 'notes06.pdf'
'notes7a.pdf' would be renamed to 'notes07a.pdf'
'notes7b.pdf' would be renamed to 'notes07b.pdf'
'notes8.pdf' would be renamed to 'notes08.pdf'
'notes9.pdf' would be renamed to 'notes09.pdf'

交换作者和书名的位置

$ rename -n s/'^(\[.+):(.+).pdf'/'$2($1).pdf'/g *
'[伊朗]拉明·贾汉贝格鲁:伯林谈话录.pdf' would be renamed to '伯林谈话录([伊朗]拉明·贾汉贝格鲁).pdf'
'[加拿大]查尔斯·泰勒:黑格尔.pdf' would be renamed to '黑格尔([加拿大]查尔斯·泰勒).pdf'
'[德]乌尔里希·贝克:风险社会.pdf' would be renamed to '风险社会([德]乌尔里希·贝克).pdf'
'[德]诺贝特·埃利亚斯:个体的社会.pdf' would be renamed to '个体的社会([德]诺贝特·埃利亚斯).pdf'
'[法]皮埃尔·布迪厄:实践感.pdf' would be renamed to '实践感([法]皮埃尔·布迪厄).pdf'
'[法]科耶夫:黑格尔导读.pdf' would be renamed to '黑格尔导读([法]科耶夫).pdf'
'[法]雷蒙·阿隆:知识分子的鸦片.pdf' would be renamed to '知识分子的鸦片([法]雷蒙·阿隆).pdf'
'[法]雷蒙·阿隆:阶级斗争:工业社会新讲.pdf' would be renamed to '工业社会新讲([法]雷蒙·阿隆:阶级斗争).pdf'
'[美]A·麦金太尔:追寻美德:伦理理论研究.pdf' would be renamed to '伦理理论研究([美]A·麦金太尔:追寻美德).pdf'
'[美]G·H·埃尔德:大萧条的孩子们.pdf' would be renamed to '大萧条的孩子们([美]G·H·埃尔德).pdf'
'[美]J·C·亚历山大:新功能主义及其后.pdf' would be renamed to '新功能主义及其后([美]J·C·亚历山大).pdf'
'[美]R·M·昂格尔:现代社会中的法律.pdf' would be renamed to '现代社会中的法律([美]R·M·昂格尔).pdf'
'[美]T·帕森斯:社会行动的结构.pdf' would be renamed to '社会行动的结构([美]T·帕森斯).pdf'

Mac下的ldd:otool

在Mac下没有Linux的ldd工具来查看程序的动态库依赖,不过有一个内置的工具otool也可以查看程序的依赖情况。所以,只要用-L指令加程序就可以查看依赖库了,如下例子查看rar程序的依赖情况:

$otool -L rar
rar:
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.4.0)
    /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 88.1.6)

批量删除 .DS_Store

.DS_Store(英文全称 Desktop Services Store),它是一种由苹果公司的Mac OS X操作系统所创造的隐藏文件,目的在于存贮文件夹的自定义属性,例如文件们的图标位置或者是背景色的选择等。

find ~ -name ".DS_Store" -depth -exec rm {} \;

PKG_CONFIG_PATH的问题

尽管已经安装了第三方库,pkg-config也会出现配置输出为空的情况,这是因为第三方库没有添加到pkg-config的搜索目录中,可以先设定pkg-config的环境变量,再调用pkg-config就可以解决问题了。

export PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig
export CXXFLAGS=`pkg-config --cflags openssl`
export LDFLAGS=`pkg-config --libs openssl`

程序出现Persistent State不能保存的信息

原因还没有找到,暂时可以通过如下方式禁止

defaults write org.python.python ApplePersistenceIgnoreState NO

启动提示找不到dylib文件

由于要给Python配置一个GUI界面,比较了一下,最终选择了Qt,于是通过pip安装

sudo pip install PySide 

安装完毕之后,启动一个样例程序,程序崩溃显示QtCore.so没有找到libshiboken-python2.7.dylib文件,定位到QtCore.so目录,输入命令

otool -lv QtCore.so

发现它的rpath的信息是

    cmd LC_RPATH
    cmdsize 72
    path /private/tmp/pip-build-_ScP9w/pySide/pyside_package/PySide

而真正的安装目录在

    /Library/Python/2.7/site-packages/PySide

于是,确定问题出在rpath上,一般这种问题有三种解决方案:

  1. 将所有的_.so_和_.dylib_文件在系统程序查找目录(例如 /usr/local/lib/)中做一个链接,由于这些目录全局范围共享,所以基本上不存在找不到的问题;
  2. 修改用户启动配置文件,例如在bash或是profile文件中增加一行
export DYLD_LIBRARY_PATH="/Library/Python/2.7/site-packages/PySide":$DYLD_LIBRARY_PATH

这样修改了系统的环境变量,程序在启动之后,会读取这个环境变量来找动态库,要注意的是,如果只是修改了当前用户的profile文件,那其他用户环境下运行还是会出问题,一般要修改系统的profile文件。

  1. 直接修改执行文件,加入rpath信息,这样程序会在更新后的rpath中查找依赖库文件
sudo install_name_tool -add_rpath /Library/Python/2.7/site-packages/PySide QtCore.so

这样修改之后,QtCore.so在查找libshiboken-python2.7.dylib的时候就会到/Library/Python/2.7/site-packages/PySide/中查找。 再次查看QtCore.so的rpath信息,就会发现多了一行path。

Load command 16
    cmd LC_RPATH
    cmdsize 72
    path /private/tmp/pip-build-_ScP9w/pySide/pyside_package/PySide (offset 12)
Load command 17
    cmd LC_RPATH
    cmdsize 56
    path /Library/Python/2.7/site-packages/PySide/ (offset 12)

自动的编辑操作

《精通正则表达式》作者举了一个真实的例子,他需要对某个文件进行小改动,将所有出现sysread改为read,因为网络太慢,使用全屏编辑器是不行的,于是采用如下办法:

$perl -p -i -e 's/sysread/read/g' <file>

参数-e表示整个程序就在命令中(整个程序其实就是一行正则表达式)。-p表示对目标文件的每一行进行查找和替换,-i表示将替换的结果写回文件。同样,由于用了/g这个修饰符,可以保证在每一行中进行多次替换。

将Markdown文件转换为PDF

需要安装pandoc,还有latex的支持,在执行命令的时候,要指定汉字的字体

$pandoc -s -o ffmpeg.pdf ffmpeg.md --latex-engine=xelatex -V mainfont='PingFangSC-Regur'

这样用的话,还有一个问题,中文的换行不正常,网上有一个模板文件pm-template,里面定义了换行,下载之后再用如下命令即可

$pandoc --toc --smart --template=pm-template --latex-engine=xelatex -V mainfont='PingFang SC Regular' -s -o output.pdf something.md

经过分析模板文件,发现最关键是要加入xeCJK这个选项,用pandoc -D latex > my_template.latex方法产生一个默认的模板文件,然后在ifxetex后面加入如下内容即可

    \usepackage{xeCJK} 		        % 分開設置中英文字型
    \setCJKmainfont{PingFang SC} 	% 設定中文字型
    \setmainfont{Helvetica}        	% 設定英文字型
    \setromanfont{Helvetica} 	    % 字型
    \setmonofont{PragmataPro}

修改svn的diff查看器

默认情况下svn用的是系统自带的diff,功能比较弱,最主要的是不能一行行对比修改,可以修改为第三方的diff查看器,例如vimdiff或是商业软件 Beyond Compare 等等

建立脚本文件接收需要进行比较的文件

在\$PATH的环境目录下创建一个脚本文件svndiff.sh,文件内容如下:

#!/bin/sh
# 去掉前5个参数
shift 5
# 使用vimdiff比较
# vimdiff "$@"
# 使用Beyond Compare比较
bcompare "$@"

修改svn的配置文件

打开\$HOME/.subversion/config 文件,将

# diff-cmd = diff_program (diff, gdiff, etc.)

修改为

diff-cmd = svndiff.sh

Homebrew cask upgrade

cask不能自动检测应用版本,所以只能用强制重新安装的方法来进行更新

brew cask list | xargs brew cask install --force
# 或者用reinstall,例如
brew cask reinstall typora

用命令行快速终止进程

ps rax | awk '{print $1, $5}' | grep 'axel' | cut -d ' ' -f 1 | xargs -n1 kill -3
# 或者用 pkill,支持通过名称来终止进程
pkill 'axel'

Upgrade pip package

查看当前需要升级的组件

% pip2 list --outdated
attrs (16.0.0) - Latest: 16.1.0 [wheel]
bcolz (0.12.1) - Latest: 1.1.0 [sdist]
certifi (2016.8.8) - Latest: 2016.8.31 [wheel]
CommonMark (0.5.4) - Latest: 0.7.2 [wheel]
cryptography (1.4) - Latest: 1.5 [wheel]
ipykernel (4.4.1) - Latest: 4.5.0 [wheel]
joblib (0.10.0) - Latest: 0.10.2 [wheel]
jupyter-client (4.3.0) - Latest: 4.4.0 [wheel]
lxml (3.6.1) - Latest: 3.6.4 [sdist]
matplotlib (1.5.1) - Latest: 1.5.2 [wheel]
pandas (0.17.1) - Latest: 0.18.1 [wheel]
pexpect (4.2.0) - Latest: 4.2.1 [wheel]
ply (3.8) - Latest: 3.9 [sdist]
prompt-toolkit (1.0.6) - Latest: 1.0.7 [wheel]
psutil (4.3.0) - Latest: 4.3.1 [sdist]
pyOpenSSL (16.0.0) - Latest: 16.1.0 [wheel]
pytest (2.9.2) - Latest: 3.0.2 [wheel]
PyYAML (3.11) - Latest: 3.12 [sdist]
Scrapy (1.1.1) - Latest: 1.1.2 [wheel]
setuptools (25.2.0) - Latest: 26.1.1 [wheel]
SQLAlchemy (1.0.14) - Latest: 1.0.15 [sdist]
TA-Lib (0.4.9) - Latest: 0.4.10 [sdist]
Twisted (16.3.1) - Latest: 16.4.0 [sdist]
Werkzeug (0.11.10) - Latest: 0.11.11 [wheel]
xlwings (0.9.2) - Latest: 0.9.3 [sdist]
zope.interface (4.2.0) - Latest: 4.3.1 [wheel]

升级单个组件包命令

pip2 install -U xxx

用脚本处理所有的组件包

pip2 list --outdated | awk '{print $1}' | sed 's/^/pip2 install -U /' > /tmp/update.sh; \
	chmod +x /tmp/update.sh; \
	/tmp/update.sh; \
	rm /tmp/update.sh

应用效果

更优雅的方法

pip2 list --outdated | cut -d ' ' -f 1 | xargs -n1 pip2 install -U

更多方法

Upgrading all packages with pip

Word 中的正则表达式

在Microsoft Word中替换也可以用正则表达式,例如我想将6。12中的中文标点符号换成小数点,由于有很多地方需要将句号替换成小数点,用正则表达式就能轻易完成。

打开“高级查找和替换功能”,将“使用通配符”选上,然后在查找框中输入([0-9]{1,2})。([0-9]{1,2}),替换框中输入\1.\2即可。

统计文件和文件夹的个数

统计文件的个数

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

统计目录的个数

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

统计文件的个数,包括子文件夹里的

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

如统计/home/han目录(包含子目录)下的所有js文件则:

ls -lR /home/han | grep js | wc -lls -l "/home/han" | grep "js" | wc -l

统计目录的个数,包括子文件夹里的

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

说明:

ls -lR 长列表输出该目录下文件信息(R代表子目录注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等)

grep “^-“ 这里将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是 ^d

wc -l 统计输出信息的行数,因为已经过滤得只剩一般文件了,所以统计结果就是一般文件信息的行数,又由于一行信息对应一个文件,所以也就是文件的个数。

替换^M字符

在Linux下使用vi来查看一些在Windows下创建的文本文件,有时会发现在行尾有一些“^M”。有几种方法可以处理。

  1. 使用dos2unix命令。一般的分发版本中都带有这个小工具(如果没有可以根据下面的连接去下载),使用起来很方便:
$ dos2unix myfile.txt

上面的命令会去掉行尾的^M。

  1. 使用vi的替换功能。启动vi,进入命令模式,输入以下命令:
:%s/^M$//g # 去掉行尾的^M。

:%s/^M//g # 去掉所有的^M。

:%s/^M/[ctrl-v]+[enter]/g # 将^M替换成回车。

:%s/^M/\r/g # 将^M替换成回车。
  1. 使用sed命令。和vi的用法相似:
$ sed -e ‘s/^M/\n/g’ myfile.txt

注意:这里的“^M”要使用“CTRL-V CTRL-M”生成,而不是直接键入“^M”。

去除文件中的重复行

在下载数据生成CSV文件的时候,产生了重复的行数据,这里借用uniq来消除,因为sed实在是太慢了。

 $ find ./data -name '*.csv' -exec bash -c 'uniq "$0"  "../data2/${0}"' {} \;

注意:uniq只识别相邻的行数据,也就是说文件首先要排序

显示磁盘空间使用情况

df -h | egrep 'Filesystem|\/$|Volumes' | awk '{print  t  t }'

添加修改mysql配置

mysqld --help --verbose | more

你会看到开始的这一行(表示配置文件默认读取顺序) Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf

通常这些位置是没有配置文件的, 所以要自己建一个

ls $(brew --prefix mysql)/support-files/my-*
/usr/local/opt/mysql/support-files/my-default.cnf
cp /usr/local/opt/mysql/support-files/my-default.cnf /usr/local/etc/my.cnf

按需修改my.cnf然后重新启动mysql

brew services restart mysql

CMake的使用

目录组织结构

-myproject
	-bin/
		libmobi.dylib*
	-build/
	CMakeLists.txt
	main.cpp
	header.h
	thirdparty_lib.h
	...

CMakeLists.txt的内容

cmake_minimum_required(VERSION 3.7)
project(myproject)

SET(CMAKE_BUILE_TYPE DEBUG) 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11")

# 设置目标文件的输出位置,在工程目录下的bin目录中
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/bin)
#set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/lib)

set(SOURCE_FILES main.cpp)
add_executable(myproject ${SOURCE_FILES})

# ===================================================================
# 链接第三方动态库文件,在这个工程中第三方库文件libmobi.dylib已经拷贝到了bin目录
#FIND_LIBRARY(RESULT libmobi.dylib ${CMAKE_HOME_DIRECTORY})
#TARGET_LINK_LIBRARIES(myproject ${RESULT})
TARGET_LINK_LIBRARIES(myproject ${CMAKE_HOME_DIRECTORY}/bin/libmobi.dylib)

# 目标文件生成之后,修改rpath使得执行文件在执行目录中加载第三方动态库
add_custom_command(TARGET myproject 
    POST_BUILD COMMAND 
    # ${CMAKE_INSTALL_NAME_TOOL} -add_rpath "@executable_path/../../Frameworks/"
    ${CMAKE_INSTALL_NAME_TOOL} -change /usr/local/lib/libmobi.0.dylib @loader_path/libmobi.dylib
    ${CMAKE_HOME_DIRECTORY}/bin/myproject)

进入build目录之后执行cmake ..即可产生Makefile等文件,再执行make就可以在bin目录下生成执行文件。

tar、gzip、unzip命令的详细使用方法

tar命令

利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。

语法:tar [主选项+辅选项] 文件或者目录

使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用。

主选项: c 创建新的档案文件。如果用户想备份一个目录或是一些文件,就要选择这个选项。 r 把要存档的文件追加到档案文件的未尾。例如用户已经作好备份文件,又发现还有一个目录或是一些文件忘记备份了,这时可以使用该选项,将忘记的目录或文件追加到备份文件中。 t 列出档案文件的内容,查看已经备份了哪些文件。 u 更新文件。就是说,用新增的文件取代原备份文件,如果在备份文件中找不到要更新的文件,则把它追加到备份文件的最后。 x 从档案文件中释放文件。

辅助选项:

b 该选项是为磁带机设定的。其后跟一数字,用来说明区块的大小,系统预设值为20(20*512 bytes)。 f 使用档案文件或设备,这个选项通常是必选的。 k 保存已经存在的文件。例如我们把某个文件还原,在还原的过程中,遇到相同的文件,不会进行覆盖。 m 在还原文件时,把所有文件的修改时间设定为现在。 M 创建多卷的档案文件,以便在几个磁盘中存放。 v 详细报告tar处理的文件信息。如无此选项,tar不报告文件信息。 w 每一步都要求确认。 z 用gzip来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩。

j 用bzip2来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩。

例1:把/home目录下包括它的子目录全部做备份文件,备份文件名为usr.tar

$ tar cvf usr.tar /home 

例2:把/home目录下包括它的子目录全部做备份文件,并进行压缩,备份文件名为usr.tar.gz 和 usr.tar.bz2

$ tar czvf usr.tar.gz /home 
$ tar cjvf usr.tar.bz2 /home

例3:把usr.tar.gz这个备份文件还原并解压缩。

$ tar xzvf usr.tar.gz 
$ tar xjvf usr.tar.bz2

例4:查看usr.tar备份文件的内容,并以分屏方式显示在显示器上。

$ tar tvf usr.tar | more 

要将文件备份到一个特定的设备,只需把设备名作为备份文件名。

例5:用户在/dev/fd0设备的软盘中创建一个备份文件,并将/home 目录中所有的文件都拷贝到备份文件中。

$ tar cf /dev/fd0 /home 

要恢复设备磁盘中的文件,可使用xf选项:

$ tar xf /dev/fd0 

如果用户备份的文件大小超过设备可用的存贮空间,如软盘,您可以创建一个多卷的tar备份文件。M选项指示tar命令提示您使用一个新的存贮设 备,当使用M选项向一个软驱进行存档时,tar命令在一张软盘已满的时候会提醒您再放入一张新的软盘。这样您就可以把tar档案存入几张磁盘中。

$ tar cMf /dev/fd0 /home 

要恢复几张盘中的档案,只要将第一张放入软驱,然后输入有x和M选项的tar命令。在必要时您会被提醒放入另外一张软盘。

$ tar xMf /dev/fd0 

gzip命令

减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。

语法:gzip [选项] 压缩(解压缩)的文件名

各选项的含义:

-c 将输出写到标准输出上,并保留原有文件。 -d 将压缩文件解压。 -l 对每个压缩文件,显示下列字段:

  1. 压缩文件的大小
  2. 未压缩文件的大小
  3. 压缩比
  4. 未压缩文件的名字

-r 递归式地查找指定目录并压缩其中的所有文件或者是解压缩。 -t 测试,检查压缩文件是否完整。 -v 对每一个压缩和解压的文件,显示文件名和压缩比。

-num 用指定的数字num调整压缩的速度,-1或–fast表示最快压缩方法(低压缩比),-9或–best表示最慢压缩方法(高压缩比)。系统缺省值为6。

假设一个目录/home下有文件mm.txt、sort.txt、xx.com。

例1:把/home目录下的每个文件压缩成.gz文件。

$ cd /home 
$ gzip * 
$ ls 
m.txt.gz sort.txt.gz xx.com.gz 

例2:把例1中每个压缩的文件解压,并列出详细的信息。

$ gzip -dv * 
mm.txt.gz 43.1%-----replaced with mm.txt 
sort.txt.gz 43.1%-----replaced with sort.txt 
xx.com.gz 43.1%-----replaced with xx.com 
$ ls 
mm.txt sort.txt xx.com 

例3:详细显示例1中每个压缩的文件的信息,并不解压。

$ gzip -l * 
compressed uncompr. ratio uncompressed_name 
277 445 43.1% mm.txt 
278 445 43.1% sort.txt 
277 445 43.1% xx.com 
$ ls 
mm.txt.gz sort.txt.gz xx.com.gz 

例4:压缩一个tar备份文件,如usr.tar,此时压缩文件的扩展名为.tar.gz

$ gzip usr.tar 
$ ls 
usr.tar.gz 

zip命令

zip可能是目前使用得最多的文档压缩格式。它最大的优点就是在不同的操作系统平台,比如Linux, Windows以及Mac OS,上使用,缺点就是支持的压缩率不是很高

压缩一个目录:

$ zip -r archive_name.zip directory_to_compress

下面是如果解压一个zip文档:

$ unzip archive_name.zip

unzip命令

用MS Windows下的压缩软件winzip压缩的文件如何在Linux系统下展开呢?可以用unzip命令,该命令用于解扩展名为.zip的压缩文件。

语法:unzip [选项] 压缩文件名.zip

各选项的含义分别为:

-x 文件列表 解压缩文件,但不包括指定的file文件。 -v 查看压缩文件目录,但不解压。 -t 测试文件有无损坏,但不解压。 -d 目录 把压缩文件解到指定目录下。 -z 只显示压缩文件的注解。 -n 不覆盖已经存在的文件。 -o 覆盖已存在的文件且不要求用户确认。 -j 不重建文档的目录结构,把所有文件解压到同一目录下。

例1:将压缩文件text.zip在当前目录下解压缩。

$ unzip text.zip 

例2:将压缩文件text.zip在指定目录/tmp下解压缩,如果已有相同的文件存在,要求unzip命令不覆盖原先的文件。

$ unzip -n text.zip -d /tmp 

例3:查看压缩文件目录,但不解压。

$ unzip -v text.zip 

zgrep命令

这个命令的功能是在压缩文件中寻找匹配的正则表达式,用法和grep命令一样,只不过操作的对象是压缩文件。如果用户想看看在某个压缩文件中有没有某一句话,便可用zgrep命令。

R 常用命令

卸载包

查看已加载的包

(.packages())

卸除已加载的包

detach("package:RMySQL")

注意是卸载,也就是说不是把包从R运行环境中彻底删除,只是不希望该包被加载使用。

在包使用函数冲突,检验函数依赖时比较有用。

删除包

查看已经安装的包

> installed.packages()[,c('Package','Version','LibPath')]

找到合适的路径,用remove.packages删除

> .libPaths()[1]
[1] "/usr/local/Cellar/r/3.6.0_3/lib/R/library"
> remove.packages('ggthemr', lib= .libPaths()[1])