0%

Mac安装difmap

参考:ftp://ftp.astro.caltech.edu/pub/difmap/README

步骤

基本信息

现在Difmap的版本是2.4l,支持以下的操作系统版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Architecture   OS           ANSI-C    FORTRAN-77   PGPLOT
compiler compiler status
———— ———– ——– ———– ————
Sparc SunOS 4.x gcc f77 Supported
Sparc Solaris 2.x gcc f77 Supported
Sparc Solaris 2.x SUN cc f77 Supported
HP9000 700-800 HPUX c89 fort77 Supported
IBM RS6000 AIX c89 xlf Supported
Alpha-AXP OSF1 gcc f77 Supported
PC i86 Linux gcc gfortran Supported
PC AMD64 Linux gcc f77 Supported
PC Itanium Linux gcc f77 Supported
PPC MacOS X gcc-4 gfortran Supported
Intel MacOS X gcc-4 gfortran Supported

为了成功安装difmap,我们需要满足下面的条件:

  1. 是上面支持OS版本和编辑器的一种;
  2. 一个ANSI-C的编译器;
  3. 一个FORTRAN-77的编译器;
  4. 需要PGPLOT5.0.2或以上版本,

下载最新版本的difmap:

1
$ wget ftp://ftp.astro.caltech.edu/pub/difmap/difmap2.4l.tar.gz

顺便得到cookbook:

1
$ wget ftp://ftp.astro.caltech.edu/pub/difmap/cookbook.ps.Z

然后解压difmap:

1
$ tar xzf difmap2.4l.tar.gz

完了会创建一个uvf_difmap的子目录。

安装步骤:

  1. 进入uvf_difmap子目录;
  2. 修改该目录下的configure文件,主要可能是HELPDIR和PGPLOT_LIB这两项;
  3. 编辑完成后,执行下述命令:
  4. ./configure operating_system_name-compiler_name
  5. 其中可识别的操作系统名称–编译器名称都可以在configure文件中找到,
  6. 比如,举个例子:./configure linux-i486-gcc
  7. 而对于mac而言就是./configure apple-os-gcc或者./configure intel-os-gcc
  8. configure完成后,执行./makeall,如果出错,就检查下configure文件找找原因;
  9. 有可能会碰到lib找不到的error,此时可以将lib的路径导入到LIBRARY_PATH即可解决问题。
  10. 在doc子目录可以使用makemanual来生成LaTeX文件的帮助文档。
  11. 如果需要重装软件,可以运行./clean来清理生成的中间文件。

运行difmap

在终端下执行:difmap
如果成功,就能得到如下信息:

1
2
3
4
5
Caltech difference mapping program – version 2.4l (17 Apr 2010)
Copyright (c) 1993-2010 California Institute of Technology. All Rights Reserved.
Type ‘help difmap’ to list difference mapping commands and help topics.
Started logfile: difmap.log_12 on Sat Apr 17 16:00:04 2010
0>

然后就可以畅游在difmap的海洋中了。
输入exit即可退出difmap。

  1. 重启ubuntu,随即长按shirft进入grub菜单;
  2. 选择recovery mode,按”e”键进入编辑页面;
  3. 将ro single替换为rw single init=/bin/bash;
  4. 按ctrl+x进入单用户模式,当前用户即为root;
  5. 到/etc目录下修改sudoers权限:chmod 0440 sudoers,搞定;
  6. 按ctrl+alt+del重启;

指定目录的定位 whereis

.. note::

你在哪里,哪里就是风景。

Linux whereis 命令用于定位查找一个命令的二进制、源文件或帮助文件。

不过这些文件一般是位于特定目录的。

其他的程序定位可以考虑使用locate命令。

官方的定义为:

whereis - locate the binary, source, and manual page files for a command

使用语法

使用语法如下:

1
$ whereis [options] [-BMS directory... -f] name...

其他的选项可以为:

  • -b : 查找二进制文件

  • -m:查找手册

  • -s:查找源文件

  • -B <directory>  在设置的目录下查找二进制文件。

  • -M <directory>  在设置的目录下查找说明文件。

  • -S <directory>  在设置的目录下查找原始代码文件。

实例

比如查找bash的位置,输入如下命令:

1
2
$ whereis bash
bash: /usr/bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz

可以看到,以上的输出信息从左至右分别为程序名、bash路径、bash的man帮助手册路径。

单独查找文件

可以通过不同的参数来查找不同的文件,如下:

1
2
3
4
5
6
7
8
9
10
11
# 查找二进制文件
$ whereis -b bash
bash: /usr/bin/bash /etc/bash.bashrc

# 查找帮助文件
$ whereis -m bash
bash: /usr/share/man/man1/bash.1.gz

# 查找源文件
$ whereis -s bash
bash:

Markdown 格式集锦

$Markdown$ 由亚伦·斯沃茨此处有掌声(Aaron Hillel Swartz;1986年11月8日-2013年1月11日)和美国著名博客作者约翰·格鲁伯(John Gruber)合作发明了。

$Markdown$格式主要在程序员间流行,自从自己入了git的坑,就喜欢上了简洁明了的语法,除非特殊需要,已经不在接触Office系列了。^_^

这里主要列举一些$Markdown$的语法,其实只要掌握几个就能用的相当遛了。

内容目录测试

只需要加入[TOC]就可以看到内容目录了。

标题

标题共有6级,从最大的第1级到第6级,是几级就加几个#即可。

1
2
3
4
5
6
# 标题1
## 标题2
### 标题3
#### 标题4
##### 标题5
###### 标题6

输出为:

标题1

标题2

标题3

标题4

标题5
标题6

引用

引用以>开始,例如

1
2
3
>> 这是引用。
>
> 你想说点啥?

输出为:

这是引用。

你想说点啥?

列表

Markdown 支持有序列表和无序列表。

无序列表使用星号、加号或是减号作为列表标记:$Markdown$ 如下所示:

1
2
3
*   Red
* Green
* Blue

等同于:

1
2
3
+   Red
+ Green
+ Blue

也等同于:

1
2
3
-   Red
- Green
- Blue

输出均为:

  • Red
  • Green
  • Blue

有序列表则使用数字接着一个英文句点:

1
2
3
1.  Bird
2. McHale
3. Parish

其实1,2,3也可以写成1,3,4,但是并不影响输出信息:

  1. Bird
  2. McHale
  3. Parish

强调

$Markdown$ 使用星号(*)和底线(_)作为标记强调字词的符号,被 * 或 _ 包围的字词会被转成用斜体 ,用两个 * 或 _ 包起来的话,则会被转成 __粗体__,例如:

Markdown:

1
2
3
4
5
6
7
8
9
10
11
12
13
Some of these words *are emphasized*.
Some of these words _are emphasized also_.

Use two asterisks for **strong emphasis**.
Or, if you prefer, __use two underscores instead__.

~~要划除的行内内容~~
<u>下划线</u>

上划线
$\overline{X}$
下划线
$\underline{X}$

输出:

Some of these words are emphasized.

Some of these words are emphasized also.

Use two asterisks for strong emphasis.

Or, if you prefer, use two underscores instead.

下划线

所添加的需要加下划线的行内文字

$\underline{下划线}$

要划除的行内内容

上划线
$\overline{X}$
下划线
$\underline{X}$

表格

$Markdown$插入表格的语法相对复杂,必须要按格式来敲,注意表头与内容的分割线横线-不能少于3个,$Markdown$如下所示:

1
2
3
4
第一格表头 | 第二格表头
--- | ---
内容单元格 第一列第一格 | 内容单元格第二列第一格
内容单元格 第一列第二格 多加文字 | 内容单元格第二列第二格

输出如下:

第一格表头 第二格表头
内容单元格 第一列第一格 内容单元格第二列第一格
内容单元格 第一列第二格 多加文字 内容单元格第二列第二格

链接

链接特别简单,只要使用尖括号扩起来网址即可。

例如$Markdown$:

1
2
3
这是谷歌的地址<https://www.google.com>

。[example link](http://example.com/).

输出为:

这是谷歌的地址https://www.google.com

也可以建立一个标签,此时需要使用的格式例如Markdown为:

1
这是谷歌的地址[Google](https://www.google.com)

输出为:

这是谷歌的地址Google

图片

图片的格式就是在链接的基础上加上一个**!**即可,注意alt text是在图片无法显示或找到是显示的,而Title是在鼠标悬停到图片上显示的内容。

1
![alt text](/path/to/img.jpg "Title")

比如Markdown为:

1
![Markdown](https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1528972647389&di=2e41e45c2b6eb093a1035af76894fe70&imgtype=0&src=http%3A%2F%2Fimg.mp.itc.cn%2Fupload%2F20170531%2F2857e3a50356480c976833fd36d87051_th.jpg ”TEST“)

Markdown

1
2
3
4
---
fignos-cleveref: True
fignos-plus-name:
fignos-caption-name:

为了处理图形的交叉引用,我们需要添加一个 Pandoc 插件。

在终端(macOS、Linux)或者命令行(Windows)下,执行:

1
pip install pandoc-fignos

插入页首页尾的图片

1
2
3
4
5
6
7
header-includes: 
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\setlength\headheight{28pt}
\fancyhead[L]{\includegraphics[width=5cm]{images.jpeg}}
\fancyfoot[LE,RO]{GPIM}

插入首页一幅图片

1
2
header-includes:
- \titlegraphic{\centering \includegraphics[width=10cm]{images/Ska_landscape_night_v2.jpeg}}

LaTeX公式

$ 表示行内公式:

1
质能守恒方程可以用一个很简洁的方程式 $E=mc^2$ 来表达。

view 质能守恒方程可以用一个很简洁的方程式 $E=mc^2$ 来表达。

$$ 表示整行公式:

1
2
3
$$\sum_{i=1}^n a_i=0$$
$$f(x_1,x_x,\ldots,x_n) = x_1^2 + x_2^2 + \cdots + x_n^2 $$
$$\sum^{j-1}_{k=0}{\widehat{\gamma}_{kj} z_k}$$

希腊字母

1
\alpha, \beta,... \omega: \Gamma, \Delta, …, \Omega:

$\alpha .. \beta,.. \omega .. \Gamma .. \Delta .. \Omega:$

上下标

1
^ 和 _

$𝑥_𝑖^2$, $log_2𝑥$

访问 MathJax 参考更多使用方法。

代码

其实$Markdown$最赞的就是代码功能了,各种个样的代码,并且可以上色,格式就是使用三个反斜点来扩起来,比如C预言为例:

1
2
3
4
5
6
7
8
```c
#include <stdio.h>

int main()
{
return 0;
}
​```

输出为:

1
2
3
4
5
#include <stdio.h> 
int main()
{
return 0;
}

目前支持市面上的大部分语言,比如c/c++/python/php/java等等。

方框显示

$${\boxed{BOXED\ BOLD}}$$

参考样式

参考样式类似文章中的引用文献,可以做一个标记,全部列在文末,如下所示:

1
2
3
4
5
这篇文章引用了来自 [Google][1][Yahoo][2][MSN][3]的搜索结果。

[1]: http://google.com/ "Google"
[2]: http://search.yahoo.com/ "Yahoo Search"
[3]: http://search.msn.com/ "MSN Search"

输出如下:

这篇文章引用了来自 GoogleYahooMSN的搜索结果。

脚注

在需要添加注脚的文字后加上脚注名字[^注脚名字],称为加注。 然后在文本的任意位置(一般在最后)添加脚注,脚注前必须有对应的脚注名字。

注意:经测试脚注与脚注之间必须空一行,不然会失效。成功后会发现,即使你没有把脚注写在文末,经Markdown转换后,也会自动归类到文章的最后。

1
2
3
4
5
6
7
使用 Markdown[^1]可以效率的书写文档, 直接转换成 HTML[^2], 你可以使用 Leanote[^Le] 编辑器进行书写。

[^1]:Markdown是一种纯文本标记语言

[^2]:HyperText Markup Language 超文本标记语言

[^Le]:开源笔记平台,支持Markdown和笔记直接发为博文

使用 Markdown^1可以效率的书写文档, 直接转换成 HTML^2, 你可以使用 Typora^3 编辑器进行书写。

注:脚注自动被搬运到最后面,请到文章末尾查看,并且脚注后方的链接可以直接跳转回到加注的地方。

锚点 - 编辑器暂时木有效果

网页中,锚点其实就是页内超链接,也就是链接本文档内部的某些元素,实现当前页面中的跳转。

NB:

  1. Markdown Extra 只支持在标题后插入锚点,其它地方无效。
  2. Leanote 编辑器右侧显示效果区域暂时不支持锚点跳转,所以点来点去发现没有跳转不必惊慌,但是你发布成笔记或博文后是支持跳转的。
1
跳转到[引用](#ref)

跳转到引用

嵌套HTML

其实$Markdown$的语法都可以使用HTML来实现并增强大部分的功能,比如可以使用<font>来对字体进行设置。

颜色

1
$\color{red} {text}$

$\color{red} {red text}$

Coffee break

这样就可以显示不同的颜色了。

1
2
3
4
5
6
7
8
9
10
11
12
13
浅红色文字:<font color="#dd0000">浅红色文字:</font><br /> 
深红色文字:<font color="#660000">深红色文字</font><br />
浅绿色文字:<font color="#00dd00">浅绿色文字</font><br />
深绿色文字:<font color="#006600">深绿色文字</font><br />
浅蓝色文字:<font color="#0000dd">浅蓝色文字</font><br />
深蓝色文字:<font color="#000066">深蓝色文字</font><br />
浅黄色文字:<font color="#dddd00">浅黄色文字</font><br />
深黄色文字:<font color="#666600">深黄色文字</font><br />
浅青色文字:<font color="#00dddd">浅青色文字</font><br />
深青色文字:<font color="#006666">深青色文字</font><br />
浅紫色文字:<font color="#dd00dd">浅紫色文字</font><br />
深紫色文字:<font color="#660066">深紫色文字</font><br />

浅红色文字:浅红色文字:

深红色文字:深红色文字

浅绿色文字:浅绿色文字

深绿色文字:深绿色文字

浅蓝色文字:浅蓝色文字

深蓝色文字:深蓝色文字

浅黄色文字:浅黄色文字

深黄色文字:深黄色文字

浅青色文字:浅青色文字

深青色文字:深青色文字

浅紫色文字:浅紫色文字

深紫色文字:深紫色文字

大小

size为1:size为1

size为2:size为2

size为3:size为3

size为4:size为4

size为10:size为10

1
2
3
4
5
size1:<font size="1">size1</font><br /> 
size2:<font size="2">size2</font><br />
size3:<font size="3">size3</font><br />
size4:<font size="4">size4</font><br />
size10:<font size="10">size10</font><br />

字体

1
2
3
4
5
6
<font face="黑体">我是黑体字</font>
<font face="宋体">我是宋体字</font>
<font face="微软雅黑">我是微软雅黑字</font>
<font face="fantasy">我是fantasy字</font>
<font face="Helvetica">我是Helvetica字</font>

我是黑体字
我是宋体字
我是微软雅黑字
我是fantasy字
我是Helvetica字

红色字体的微软雅黑

这是黑体字
这是微软雅黑
这是华文彩云
红色字体的微软雅黑
蓝色字体的华文彩云
我是尺寸
我是黑体,绿色,尺寸为5

TODO

黄色高亮
利用 标签实现

语法 黄色高亮

页面展示效果如下:

我不知道怎么设置别的颜色的高亮,因为 html 的 style 属性和标签这里都不支持有知道的求告知。

为文字添加背景色
由于 style 标签和标签的 style 属性不被支持,所以这里只能是借助 table, tr, td 等表格标签的 bgcolor 属性来实现背景色。故这里对于文字背景色的设置,只是将那一整行看作一个表格,更改了那个格子的背景色(bgcolor)。

语法如下:

背景色蓝色

1
页面展示效果如下:

背景色蓝色
表格添加背景色
表格里的某个格子如何设置背景色呢?

参考下面的例子:

方法说明颜色名称颜色
此处实现方法利用 CSDN-markdown 内嵌 html 语言的优势Hotpinkrgb(240, 248, 255)
借助 table, tr, td 等表格标签的 bgcolor 属性实现背景色设置AntiqueWhitergb(255, 192, 203)

页面展示效果如下:

方法说明 颜色名称 颜色
此处实现方法利用 CSDN-markdown 内嵌 html 语言的优势 Hotpink rgb(240, 248, 255)
借助 table, tr, td 等表格标签的 bgcolor 属性实现背景色设置 AntiqueWhite rgb(255, 192, 203)
跨行表格
示例如下:

我占了三行 第一列 第二列 第三列
第一列 第二列 第三列
第一列 第二列 第三列

分栏

1
2
3
4
5
6
begin{columns}
column{0.5textwidth}
hei
column{0.5textwidth}
Oh
end{columns}

begin{columns}
column{0.5textwidth}
hei
column{0.5textwidth}
Oh
end{columns}

<table style="margin-left: auto; margin-right: auto;">
    <tr>
        <td>
            <!--左侧内容-->
            左侧
        </td>
        <td>
            <!--右侧内容-->
            右侧
        </td>
    </tr>
</table>

Works

::: columns

:::: column
COLUMN 1
::::

:::: column
COLUMN 2
::::

::::

Sphinx嵌入Markdown

甘特图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
gantt         
dateFormat YYYY-MM-DD
title 甘特图

section 任务清单
已完成的任务 :done, des1, 2014-01-06,2014-01-08
正在进行的任务 :active, des2, 2014-01-09, 3d
待完成任务1 : des3, after des2, 5d
待完成任务2 : des4, after des3, 5d

section 核心研发
已完成的关键任务 :crit, done, 2014-01-06,24h
已完成的关键任务2 :crit, done, after des1, 2d
正在进行的关键任务 :crit, active, 3d
待完成的关键任务 :crit, 5d
待完成任务 :2d
待完成任务2 :1d

section 文档编写
描述甘特图语法 :active, a1, after des1, 3d
完成甘特图实例1 :after a1 , 20h
完成甘特图实例2 :doc1, after a1 , 48h

Markdown

Sphinx可以使用 [recommonmark 来支持Markdown的格式文档。

参考:https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html

配置

为了配置Sphinx支持 Markdown ,根据下面步骤操作即可:

  1. 安装 recommonmark:

    1
    $ pip install --upgrade recommonmark
  2. 添加 recommonmark 到可支持扩展 list of configured extensions:

    1
    extensions = ['recommonmark']
  3. 如果希望不只是.md后缀的也按照Markdown解析,可以使用 source_suffix ,如下使Sphinx 将.md.txt解析为Markdown:

    1
    2
    3
    4
    5
    source_suffix = {
    '.rst': 'restructuredtext',
    '.txt': 'markdown',
    '.md': 'markdown',
    }
  4. You can further configure recommonmark to allow custom syntax that standard CommonMark doesn’t support. Read more in the recommonmark documentation.

参考

https://pandoc.org/MANUAL.html

https://sspai.com/post/57082

(17条消息) 【Markdown笔记】设置字体颜色_dadalaohua的博客-CSDN博客_markdown 颜色

linux dos2unix命令

有时碰到unix换行符转换为windows换行符的问题,特别是脚本,会报错syntax error near unexpected token `$’in\r’’,需要使用dos2unix命令将文件转换为unix格式。

dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter)。DOS下的文本文件是以\r\n作为断行标志的,表示成十六进制就是0D 0A。而Unix下的文本文件是以\n作为断行标志的,表示成十六进制就是0A。DOS格式的文本文件在Linux底下,用较低版本的vi打开时行尾会显示^M,而且很多命令都无法很好的处理这种格式的文件,如果是个shell脚本,。而Unix格式的文本文件在Windows下用Notepad打开时会拼在一起显示。因此产生了两种格式文件相互转换的需求,对应的将UNIX格式文本文件转成成DOS格式的是unix2dos命令。

1
dos2unix [-hkqV] [-c convmode] [-o file ...] [-n infile outfile ...]

选项

1
2
3
4
5
6
1. -k:保持输出文件的日期不变 
2. -q:安静模式,不提示任何警告信息
3. -V:查看版本
4. -c:转换模式,模式有:ASCII, 7bit, ISO, Mac, 默认是:ASCII
5. -o:写入到源文件
6. -n:写入到新文件

最简单的用法就是dos2unix直接跟上文件名:

1
dos2unix filename

如果一次转换多个文件,把这些文件名直接跟在dos2unix之后。(注:也可以加上-o参数,也可以不加,效果一样)

1
2
dos2unix filename1 filename2 filename3 
dos2unix -o filename1 filename2 filename3

上面在转换时,都会直接在原来的文件上修改,如果想把转换的结果保存在别的文件,而源文件不变,则可以使用-n参数。

1
dos2unix oldfilename newfilename 

如果要保持文件时间戳不变,加上-k参数。所以上面几条命令都是可以加上-k参数来保持文件时间戳的。

1
2
3
4
dos2unix -k filename
dos2unix -k filename1 filename2 filename3
dos2unix -k -o filename1 filename2 filename3
dos2unix -k -n oldfilename newfilename

C语言中static的作用

隐藏

当我们同时编译多个文件时,所有未加 static 前缀的全局变量和函数都具有全局可见性。
为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是 sub.c,另一个是 main.c。

下面是 sub.c 的内容:

sub.c 文件代码

1
2
3
4
5
char a = 'A'; // global variable
void msg()
{
printf("Hello World\n");
}

下面是 main.c 的内容:

main.c 文件代码

1
2
3
4
5
6
7
int main(void)
{
extern char a; // extern variable must be declared before use
printf("%c ", a);
(void)msg();
return 0;
}

程序的运行结果是:

1
A Hello World

在 sub.c 中定义的全局变量 a 和函数 msg 能在 main.c 中使用是因为所有未加 static 前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问。
如果加了 static,就会对其它源文件隐藏。例如在 a 和 msg 的定义前加上 static,main.c 就看不到它们了。
利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。

static 可以用作函数和变量的前缀,对于函数来讲,static 的作用仅限于隐藏,而对于变量,static 还有下面两个作用。

static 的第二个作用是保持变量内容的持久。

存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和 static 变量,只不过和全局变量比起来,static 可以控制变量的可见范围,说到底 static 还是用来隐藏的。虽然这种用法不常见,但我还是举一个例子。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>

int fun(void){
static int count = 10; // 事实上此赋值语句从来没有执行过
return count--;
}

int count = 1;

int main(void)
{
printf("global\t\tlocal static\n");
for(; count <= 10; ++count)
printf("%d\t\t%d\n", count, fun());

return 0;
}

程序的运行结果是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
global          local static

1 10

2 9

3 8

4 7

5 6

6 5

7 4

8 3

9 2

10 1

static 的第三个作用是默认初始化为 0

其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是 0x00,某些时候这一特点可以减少程序员的工作量。比如初始化一个稀疏矩阵,我们可以一个一个地把所有元素都置 0,然后把不是 0 的几个元素赋值。如果定义成静态的,就省去了一开始置 0 的操作。再比如要把一个字符数组当字符串来用,但又觉得每次在字符数组末尾加 \0 太麻烦。如果把字符串定义成静态的,就省去了这个麻烦,因为那里本来就是 \0 。

不妨做个小实验验证一下。

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>

int a;

int main(void)
{
int i;
static char str[10];

printf("integer: %d; string: (begin)%s(end)", a, str);

return 0;
}

程序的运行结果如下:

1
integer: 0; string: (begin)(end)

最后对 static 的三条作用做一句话总结。首先 static 的最主要功能是隐藏,其次因为 static 变量存放在静态存储区,所以它具备持久性和默认值0。

活灵活现的终端:发掘cowsay

cowsay顾名思义就是一头牛为你加持,一款让命令行界面生动有趣的工具。

cowsay 可说话、可思考,与fortune加持更可以变为一头睿智的牛。

该命令接受一个文本字符串,并输出一个牛说话的图形。

下面是一头牛在说它喜欢 Linux:

1
2
3
4
5
6
7
8
9
$  cowsay I love linux.
_______________
< I love linux. >
---------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||

长着古怪眼睛的牛

1
2
3
4
5
6
7
8
9
$  cowsay -e @@ I love linux.         
_______________
< I love linux. >
---------------
\ ^__^
\ (@@)\_______
(__)\ )\/\
||----w |
|| ||

伸出舌头的牛

1
2
3
4
5
6
7
8
9
$ cowsay -T U I love linux.
_______________
< I love linux. >
---------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
U ||----w |
|| ||

一头睿智的牛

一旦将fortune和cowsay结合起来,那简直是一头及其睿智的牛呀。

1
2
3
4
5
6
7
8
9
10
11
$ fortune | cowsay
__________________________________
/ 贤能不待次而举。 \
| |
\     - 荀况 /
----------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||

点亮终端的艺术之光figlet

在Linux的世界中,figlet是一个神奇的命令,可以将文字艺术化.

特别适合作为标题、口号或者问候语,还有很多软件程序的招呼语,也可以用这个来实现。

比如:

1
2
3
4
5
6
7
$ figlet HELLO          
_ _ _____ _ _ ___
| | | | ____| | | | / _ \
| |_| | _| | | | | | | | |
| _ | |___| |___| |__| |_| |
|_| |_|_____|_____|_____\___/

显示系统风貌的screenfetch命令

screenfetch命令的神奇之处在于其简单而又直观的功能,该命令能够快速地收集系统信息并以一种富有个性的方式展示出来。

从使用的发行版到内核版本,再到处理器和内存,一目了然地展现系统的全貌。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ screenfetch
./+o+- oper@localhost
yyyyy- -yyyyyy+ OS: Ubuntu
://+//////-yyyyyyo Kernel: aarch64 Linux 6.4.16-linuxkit
.++ .:/++++++/-.+sss/` Uptime: 33m
.:++o: /++++++++/:--:/- Packages: 134
o:+o+:++.`..```.-/oo+++++/ Shell: bash 5.1.16
.:+o:+o/. `+sssoo+/ Disk: 32G / 59G (57%)
.++/+:+oo+o:` /sssooo. CPU: 12x Apple
/+++//+:`oo+o /::--:. RAM: 877MiB / 7844MiB
\+/+o+++`o++o ++////.
.++.o+++oo+:` /dddhhh.
.+.o+oo:. `oddhhhh+
\+.++o+o``-````.:ohdhhhhh+
`:o+++ `ohhhhhhhhyo++os:
.o:`.syhhhhhhh/.oo++o`
/osyyyyyyo++ooo+++/
````` +oo+++o\:
`oo++.

放开了去的 ulimit

.. note::
离离原上草,一岁一枯荣。
白居易《草 / 赋得古原草送别》

ulimit简介

对于高并发或者频繁读写文件的应用程序而言,有时可能需要修改系统能够打开的最多文件句柄数,否则就可能会出现too many open files的错误。

而句柄数分为系统总限制和单进程限制。可以使用ulimit -n来查看系统对单个进程的限制及可以打开的文件数目。

或者执行ulimit -a来查看所有的详细信息。

临时修改打开文件数目

对于临时的修改而言,可以终端中输入下面的命令,将该值调整为65536.

1
$ ulimit -HSn 65535

上面的命令将open files修改为65535,不过退出当前shell后即失效。
H和S分别表示硬限制和软限制

永久修改

如果希望永久修改,需要修改配置文件 /etc/security/limits.conf,修改后需要重新启动系统。

1
2
* soft nofile 65535
* hard nofile 65535

其中的*表示所有的用户,softhard分别表示软硬限制,nofile表示能够打开的最大文件数,第四列为具体的值。其中具体的值有一个上次,在文件/proc/sys/fs/nr_open,默认为1048576,完全够用了。

系统总打开句柄限制

上面讨论的均为单个线程的限制,属于线程级别的,系统级别的限制在文件/proc/sys/fs/file-max文件中。

修改这个文件也是临时生效的,重启失效,如果希望永久生效,需要修改下面文件:
/etc/sysctl.conf

可以添加下面这行

1
fs.file-max = 6815744

然后运行sysctl -p或者重启生效。可以通过lsof -p PID 来查看单个进程打开的文件句柄