2018年5月

astyle是一个代码格式化工具,为C,C++,JAVA等语言提供代码格式化功能。

官方描述为:Artistic Style is a source code indenter, formatter, and beautifier for the C, C++, C++/CLI, Objective‑C, C# and Java programming languages.

相关页面:官方地址文档地址下载页面(当前最新版本位3.1)。

一、编译安装

安装可参考官方安装文档,提供了多种方式编译安装,这里使用cmake

# 解压
tar -zxvf astyle_3.1_linux.tar.gz
cd astyle
# 创建编译文件夹
mkdir  as-gcc-exe
cd  as-gcc-exe
cmake  ..
# 编译和安装
make
make install

默认情况下,可执行文件被安装在/usr/bin,文档放在/usr/share/doc/astyle,安装完成后直接就可使用astyle命令。

官方并没有提供make uninstall卸载的功能,如需卸载需要在编译目录下执行xargs rm < install_manifest.txt

- 阅读剩余部分 -

xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。

xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。xargs是构建单行命令的重要组件之一。

一、基本用法

xargs用作替换工具,读取输入数据重新格式化后输出。-n选项指定换行,-d选项指定分隔符。

ma@ubuntu:/tmp$ cat tmp # 测试文本内容
a b c d e f
gh i jkl
ma@ubuntu:/tmp$ cat tmp | xargs # 重新格式化输出
a b c d e f gh i jkl
ma@ubuntu:/tmp$ cat tmp | xargs -n 3 # 每三个换行
a b c
d e f
gh i jkl    
ma@ubuntu:/tmp$ echo "abcXdefXghiXjkl" | xargs -n3 -dX # 以字符X分隔,每三个换行
abc def ghi
jkl

- 阅读剩余部分 -

在linux环境下,一共具有以下几种文件类型;

  1. 普通文件(regular file):最常见的文件类型,这种文件包含了某种形式的数据。至于这种数据是文本还是二进制数据对于内核而言并无区别。对普通文件内容的解释由处理该文件的应用程序进行。
  2. 目录文件(directory file):包含了其他文件的名字以及指向与这些文件有关信息的指针。对一个目录文件具有读许可权的任一进程都可以读该目录的内容,但只有内核可以写目录文件。
  3. 字符特殊文件(character special file):系统中某些类型的设备。
  4. 块特殊文件(block special file):典型地用于磁盘设备。系统中的所有设备或者是字符特殊文件,或者是块特殊文件。
  5. FIFO:用于进程间的通信,有时也将其称为命名管道。
  6. 套接口(socket):用于进程间的网络通信,套接口也可用于在一台宿主机上的进程之间的非网络通信。
  7. 符号连接(symbolic link):指向另一个文件

关于块设备和字符设备的区别:

  • 字符设备:提供连续的数据流,应用程序可以顺序读取,通常不支持随机存取。相反,此类设备支持按字节/字符来读写数据。举例来说,键盘、串口、调制解调器都是典型的字符设备。
  • 应用程序可以随机访问设备数据,程序可自行确定读取数据的位置。硬盘、软盘、CD-ROM驱动器和闪存都是典型的块设备,应用程序可以寻址磁盘上的任何位置,并由此读取数据。此外,数据的读写只能以块(通常是512B)的倍数进行。与字符设备不同,块设备并不支持基于字符的寻址。

这两种类型的设备的根本区别在于它们是否可以被随机访问。字符设备只能顺序读取,块设备可以随机读取。

find命令用来在指定目录下查找文件,任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示。

查找的基本语法为:find dir [options] expression,在dir目录查找符合expression的文件,默认会递归查找。

一、基础用法

1.1 根据名字和类型查找

  • -name filename:直接查找该文件名的文件。
  • -type filetype:通过文件类型查找文件。

    文件类型包括:f:普通文件 b:块设备文件 c:字符设备文件 d:目录 l:链接文档 s:套接字文件

# 查找当前目录下以.tar.gz结尾的名字
ma@ubuntu:/data/software$ find . -name "*.tar.gz"
./pip-9.0.1.tar.gz
./php-5.6.33.tar.gz
./node-v9.4.0-linux-x64.tar.gz
./LuaJIT-2.0.5.tar.gz
./mysql-5.6.38-linux-glibc2.12-x86_64.tar.gz
./go1.10.1.linux-amd64.tar.gz
./gcc-centos6.tar.gz
./cmake-3.11.0-rc3.tar.gz

# 查找当前目录下的所有文件夹,不递归查询
[ma@ma software]$ find . -maxdepth 1 -type d
./gcc-7.2.0
./go1.4
./setuptools-36.5.0
./lua-5.3.4
./openssl-1.0.2l
./build
./zlib-1.2.11
./vim
./gdb-8.1

- 阅读剩余部分 -

通过快捷键Ctrl+\`打开控制面板,根据版本输入以下代码回车:

sublime text 2

import urllib2,os,hashlib; h = ''6f4c264a24d933ce70df5dedcf1dcaee'' + ''ebe013ee18cced0ef93d5f746d80ef60''; pf = ''Package Control.sublime-package''; ipp = sublime.installed_packages_path(); os.makedirs( ipp ) if not os.path.exists(ipp) else None; urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler()) ); by = urllib2.urlopen( ''http://packagecontrol.io/'' + pf.replace('' '', ''%20'')).read(); dh = hashlib.sha256(by).hexdigest(); open( os.path.join( ipp, pf), ''wb'' ).write(by) if dh == h else None; print(''Error validating download (got %s instead of %s), please try manual install'' % (dh, h) if dh != h else ''Please restart Sublime Text to finish installation'')

- 阅读剩余部分 -