专栏首页气象杂货铺linux常用命令之进阶

linux常用命令之进阶

仅掌握之前提到的最常用命令是不够的,比如就编译WRF模式来说,其中可能涉及到解压缩权限修改文件链接环境变量。当然,如果编译之前不确定空间是否足够,就需要查看磁盘空间。而在编译的时候又会有一些需求,比如想后台编译,为了便于查错需要将编译输出信息保存,而不是输出到屏幕等等。

下文将以编译WRF模式的流程讲一下所涉及的命令:

下载好WRF模式源代码之后,需要将其解压:

  • 解压缩
tar -zxvf WRF3.8.tar.gz
# -z 表示解压 gzip 压缩的文件,通常就是后缀为 .tar.gz 
#    针对 bzip2 压缩的文件使用  -j 选项,即后缀为 .tar.bz2
# -x 表示提取,即解压   
# -v 表示输出解压过程的信息
# -f 表示档案名,解压时就是要解压的文件名,压缩时就是压缩后保存的文件名

关于使用 tar 命令解压缩的参数选择,可以查看详细帮助 tar --help

如果想要压缩一些文件的话,可以这样做:

tar -zcvf WRFV3.tar.gz WRFV3/
# -c 表示创建压缩文件,其余选项同解压缩
# 上述表示将 WRFV3/ 文件夹压缩到 WRFV3.tar.gz 中

除此之外,还有一些其他的解压缩命令,比如:

针对 *.gz 的可以使用 gzip

*.Z 使用 uncompress 解压,compress 压缩

*.zip 使用 unzip 解压,zip 压缩

*.rar 解压缩均使用 rar 命令

*.bz2 解压缩均使用 bzip2

  • 添加环境变量

WRF模式的编译需要一些额外的库,编译安装好这些库之后呢,需要添加环境变量。通常每个用户家目录下都有一个隐藏文件,用来存储环境变量信息,即 .bashrc 文件。

vi .bashrc

打开文件后,添加环境变量之后保存即可。

通常环境变量均是通过 export 导入,当然除了这些也可以添加别名,或是添加一些函数。

比如添加 NCL 的环境变量(注意:= 前后不要有空格

export NCARG_ROOT=/usr/local/tools/ncl

解压文件之后就是进入到WRFV3文件夹内,设置好环境变量之后就可以开始编译了。但是编译时可能会需要 root 权限才能执行配置及编译操作(涉及到执行及文件写入)

  • root 权限获取

这可不是说在不知道密码的情况下,暴力破解啊==前提是你要有管理员权限。

在终端中执行 su/sudo 然后输入密码即可(注意:输入密码时不会显示出来,只要正常输入完整密码后按回车即可)。

说到这里,就要说一下linux中的文件所具有的访问权限问题。文件或目录的访问权限有三种:只读(r)只写(w)可执行(x),(分别对应数字4,2,1,无权限则表示0)。

比如编译时,可能就需要给 compile 以可执行权限,这时候就要更改文件或目录的访问权限,轮到 chmod 上场了。

chmod a+rw secret.txt
# a 表示针对所有用户对此文件所拥有的权限
#    u 表示用户,即文件或目录所有者
#    g 表示用户组,如果用g 代替 a,则表示只有该组用户才拥有此权限
#    o 表示其他用户
# + 表示提高权限,降低权限用 - ,如果用 = 则表示赋予给定权限,并取消其它权限
# rw 表示读写权限, 执行权限用 x 表示
# 上述命令表示让所有用户对 secret.txt 文件都拥有读写权限,但无执行权限

当然,除了上述设置方式外,也可以用数字的方式来更改文件或目录权限。

演示之前先执行以下语句,取消所有用户及组对此文件的权限:

chmod a-rwx secret.txt
ll  # 列出文件及属性,其余文件省略
----------  1 storm users    0 5月  16 17:03 secret.txt 

可以看到此文件目前没有任何权限,然后执行:

chmod 750 secret.txt
ll 
-rwxr-x---  1 storm users    0 5月  16 17:03 secret.txt

可以看到文件权限改变了,第1位 - 表示文件类型,按下不表。2-4位rwx(4+2+1=7)表示当前用户为此文件所拥有的权限,第5-7位r-x(4+1) 表示用户组的权限,第8-10位表示其他用户的权限。

要对目录批量更改权限,使用 -R 参数选项。即

chmod -R a+rw WRFV3/

额外提一下:如果想要更改文件或目录的所有者,可以使用 chown 命令。

获取权限后就可以执行编译操作了,但是编译时会输出编译信息到屏幕。编译成功了还好,如果出错了,怎么查看错误信息呢?此时就需要将编译信息输出到文件。

./compile em_real 1>compile.stdout 2>compile.stderr

./compile em_real 表示WRF编译命令,但这不是重点,可以理解成执行了一个命令,但这个命令会有输出信息。

1>compile.stdout 1表示标准输出,> 表示重定向符号,compile.stdout 表示输出文件名。整个表示上述命令的标准输出信息重定向到 compile.stdout 文件中,而且如果此文件存在,将覆盖原文件内容,如果使用 >> 重定向符号,将在原文件后添加信息,而不是覆盖。

2>compile.stderr 2表示标准错误输出, > 和 compiler.stderr 同上。

如果想要后台执行命令的话,可以直接在上述语句后加 & , 即:

./compile em_real 1>compile.stdout 2>compile.stderr &

不要问我有没有3!linux启动后默认的3种文件描述符分别是0,1,2,分别表示标准输入,标准输出,标准错误输出。输出结果默认输出到屏幕。

但是如果退出了 shell 或是注销了帐号的话,上述命令同样会终止,为了避免这种情况,可以使用 nohup 命令。即:

nohup ./compile em_real 1>compile.stdout 2>compile.stderr

如果提示说: nohup: 忽略输入并把输出追加到'nohup.out' 。 可以在上述命令之后添加重定向语句。

如果想在编译时看看编译进程,可以查看编译输出信息,可以直接使用 vi 看一下标准输出文件,或是使用 tail 命令查看输出。

tail -f compile.stdout
# -f 选项表示实时输出文件最后几行
# 如果不加 -f 选项,仅输出文件最后5行

编译成功之后呢,为了方便运行,可以将安装目录链接到家目录下。因为每次登录帐号时总是先在"家"。

  • 文件链接

链接分为软链接硬链接软链接仅将文件链接到另一处,不占用磁盘空间,但是硬链接会占用磁盘空间。无论是软链接还是硬链接,链接后的文件和原文件始终保持同步,即无论更改哪一个文件都会导致文件同步变化。通常仅使用软链接进行文件链接。

假设当前位于家目录下,然后执行以下语句进行文件链接:

ln -sf /model/WRF/WRFV3/ wrf

注意:wrf 前后不能添加 / ,除非使用绝对路径,但即使使用绝对路径 wrf 之不能添加 /,否则会出错 。

如果在 wrf 之前添加 / ,会导致权限错误,这是因为 / 表示根目录,而在根目录创建文件需要 root 权限。 如果在 wrf 之后添加 / ,会提示说 wrf 不是一个目录。

ln -sf /model/WRF/WRFV3/ /wrf

除了链接文件之外,也可以使用别名的方式简化操作。

  • 添加别名

比如想直接进入 /model/WRF/WRFV3/,而不是每次都输入

cd /model/WRF/WRFV3/

这只有三层目录还好一些,如果目录层级多了,想想都可怕。。

为了简化这种操作,只需要在 .bashrc 中添加如下语句即可:

alias cwrf='cd /model/WRF/WRFV3/'
# cwrf 就是 = 后面 ''内的命令的别名,或者说外号也行==
# 这里的 cwrf 可以是任意名称,要不然怎么说是别名呢,谁还没几个外号

然后保存并退出,为了让环境变量生效,需执行

source .bashrc

上述的别名只是很简单的例子,为了更好的简化操作,可以根据需要设置更多的别名[注1]。

编译完成之后,想要运行一下看看效果如何。但是不知道磁盘空间还有多少,够不够存储的,运行之前先查查看:

  • 查看磁盘空间

执行下列语句可以确定磁盘的使用情况:

df -h
# -h 表示以便于人类理解的形式展示信息

df 命令仅能查看磁盘的整体使用情况,但是如果当你想查看某个具体目录时就不行了,这时可以使用 du 命令。

比如你想查看 /model/WRF/WRFV3/ 目录的占用空间:

du -sh /model/WRF/WRFV3/
# -s 表示仅显示此目录下所有文件总和
# -h 表示以便于人类理解的形式展示信息

详细使用说明不多做解释[注2-3]。

  • 查看文本文件

除了使用 vi 命令查看文本外,还有一些命令可以查看文本文件内容。

cat 可以输出文本文件内容到屏幕,直接输出真个文件内容,可以配合参数使用,适用于小文件。

-b 对非空行进行编号并输出

-n 对输出进行编号

-s 对多个连续空行进行合并,即只输出一个空行

cat -bs secret.txt

more 也可以输出整个文本内容,但是按页显示,但只能往后翻,不能回滚。

less 也是分页显示文本内容,但是相对 more 命令来说可以向前翻。

head 命令和 tail 命令是相对的,tail 命令显示文件尾部内容,head 可以显示文件前面的内容。

  • 查看进程

想要查看当前进程运行情况时,可以执行 top 命令,不需要使用参数。

除此之外还有其他进程查看命令,但是基本不会用到,此处不作介绍。

至此结束

关于文本检索及针对磁盘操作的一些命令,涉及内容比较多,会单独说明。

注1:https://linux.cn/article-4585-1.html

注2:https://www.maketecheasier.com/linux-df-du-commands/

注3:https://linux.cn/article-6466-1.html

本文分享自微信公众号 - 气象杂货铺(meteogs),作者:lightning

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-05-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux常用命令

    有人因喜好而使用Linux,有人因需要而学习Linux。无论出于什么原因,当你刚接触它时就像你刚接触Windows时一样。

    bugsuse
  • 绘图系列(1):利用matplotlib绘制等值线图

    绘图系列是为了给出一些图形绘制示例,便于快速绘制一些图形。此系列不受所用语言和工具的限制,可能会使用 python,matlab,ncl,idl以及其它一些语言...

    bugsuse
  • WRF使用3s(90m)分辨率的地形数据

    由于WRF自带最高分辨地形数据是30s的,约900m。要使用更高分辨率的地形数据需要自己制作、添加。下面简要介绍一下下载、制作和使用流程,仅供参考。

    bugsuse
  • 网站头部出现白条或空白行解决方案

    修改 dedeCMS 模板后生成网站发现页面头部莫名出现一条空白行,甚至引起了式样的错乱。查看模版代码并没有任何异常,用 firebug 查看发现问题主要是:模...

    Savalone
  • 【折腾不止】前端工程与性能优化

    作者:addy(许斌),前端开发工程师,文艺青年一枚,写得了文章,编得了代码。 作为开发,不仅仅是前端,优化总是你绕不开的事,我们的目标就是要产品变得更快。优化...

    腾讯大讲堂
  • CentOS6.5菜鸟之旅:文件权限详解

    一、前言                                   Linux下所有资源、设备均被视作文件来操作,而文件权限则是决定用户可各文件操作的...

    ^_^肥仔John
  • 小朋友学Python(17):文件

    Python 提供了必要的函数和方法进行默认情况下的文件基本操作。你可以用 file 对象做大部分的文件操作。 一、打开和关闭文件 例1 (1)创建名为test...

    海天一树
  • rsync 客户端命令详解

    rsync客户端参数的具体解释如下: -v, --verbose 详细模式输出 -q, --quiet 精简输出模式 -c, --checksum 打开...

    一见
  • 18.3.8日报

    electron是注册了个c++对象,在node启动的时候,会hook掉原生node的fs对象(asar_init.js和asar.js里实现hook),把文件...

    龙泉寺扫地僧
  • 看啥双拱门,来学 webpack 3啊

    villainhr

扫码关注云+社区

领取腾讯云代金券