内容来源:超算习堂 (easyhpc.net)
在 Linux 环境中,如果你对某个命令感到疑惑,可以使用man命令来获取帮助,它是Manual pages的缩写。用户可以通过执行man命令调用手册页。
你可以使用如下方式来获得某个命令的说明和使用方式的详细介绍:man
APT(Advanced Package Tool)是一款适用于Unix和Linux系统的安装包管理工具。它可以自动下载,配置,安装软件包,因此简化了管理软件的过程。APT由几个名字以“apt-”打头的程序组成。apt-get、apt-cache 和apt-cdrom是处理软件包的命令行工具。
既然是一个安装包管理工具,APT会在本地维护一个软件包列表,列表里会有软件依赖信息的记录,并且会定期从软件源服务器下载最新的软件包列表。当需要进行安装操作时,可以使用 apt-get 工具在本地列表中搜索相关软件信息,并根据这些信息在相关服务器下载软件安装。
1)搜索:如果想在安装前确认是否软件库有这个软件:sudo apt-cache search somesoftware
结果就会显示软件的相关信息。
2)安装:安装只需要执行这样的命令即可:sudo apt-get install htop
当然它还有许多参数,例如在软件被破坏时重新安装:sudo apt-get --reinstall install htop
3)更新:软件版本也会不断的更迭,我们在安装前往往需要进行更新,例如:
更新软件源:sudo apt-get update
更新软件包:sudo apt-get upgrade
需要注意的是依赖关系。
4)卸载:卸载一个软件也很简单:sudo apt-get remove htop
如果连配置文件也想一并删除:sudo apt-get purge htop
Linux 是一个多用户的操作系统,所有用户共享一些主机的资源,但他们也分别有自己的用户空间,用于存放各自的文件。由于 Linux 的用户管理和权限机制,不同用户不可以轻易地查看、修改彼此的文件。
whoami
输出:当前伪终端的用户名
首先使用 adduser 命令创建用户并设置密码:sudo adduser
su,su- 与 sudo :
su
切换到用户 user,执行时需要输入目标用户的密码。sudo
以特权级别运行 cmd 命令,要求当前用户属于 sudo 组,且需要输入当前用户的密码。su -
切换用户,同时环境变量也会跟着改变成目标用户的环境变量。groups user
输出为用户:用户组。
sudo deluser user --remove-home
ls
命令不仅可以列出并显示当前目录的文件,还可以用来查看文件的权限。
ls -l
输出:文件类型和权限-链接数-所有者-所属用户组-文件大小-最后修改时间-文件名
这里特别解释一下文件类型和权限:第一位是指文件类型,例如 ‘d’ 表示目录,'-'表示普通文件,等等。后面的九位可以分成三组,每组三位分别表示读权限/写权限/执行权限,三组分别对应的是拥有者权限/所属用户组权限/其他用户权限。
首先,我们可以用 touch 命令创建一个新的文件,然后再进行以下测试。
sudo chown new_owner file
sudo命令在之前提到过,是权限命令。
有两种方式对文件权限进行修改:
第一种方式:二进制数字表示。每个文件的三组权限对应一个“rwx”,每一位可以用 0 或 1 表示是否有权限,例如只有读和写权限的话就是“rw-” - “110”,所以"rwx"对应的二进制"111"就是十进制的7。
所以将 file 文件权限改为“rwx------”的命令是:chmod 700 file
第二种方式:加减赋值表示。假设一开始 file 文件的权限是“rwxr–r–”完成上述同样的效果,还可以:chmod go-rr file
g、o 还有 u 分别表示 group、others 和 user,+ 和 - 分别表示增加和去掉相应的权限。
linux之“cd /“ 、“cd ~“、“cd /home“_街客#的博客-CSDN博客
在linux中,我们
cd
命令来切换目录,.
表示当前目录,..
表示上一级目录, -
表示上一次所在目录,~
通常表示当前用户的 home 目录。pwd
命令可以获取当前所在路径(绝对路径)。例如,进入上一级目录:cd ..
进入文件夹:cd 下载
进入D盘:
D:
,再cd 目录
cd /D 目录
文件:在这里,我们可以先简单地使用 touch
命令来创建一个新的空白文件。
例如:touch myfile
目录:使用 mkdir
命令可以创建一个新的目录。
创建名为“mydir”的空目录:mkdir mydir
文件:使用 cp
(copy)命令复制一个文件到指定目录。
例如:cp myfile ../../mydir
目录:在复制文件的基础上加上 -r
参数即可。
例如:cp -r dir mydir
Linux系统删除文件命令 (lxlinux.net)
文件:使用 rm
(remove files or directories)命令删除一个文件:rm file
目录:同样,删除目录也是需要加上 -r
参数。
移动文件和对文件重命名都使用 mv
命令。
mv 源目录文件 目的目录:mv myfile mydir
注意,这里mv命令是剪切文件。
mv 旧的文件名 新的文件名:mv myfile myfile1
Linux系统存在许多编辑器,例如vim,emacs,nano等等。
vim编辑器功能非常强大,但随之而来的是它的学习难度并不简单。
which只从环境变量指定的路径中去搜索文件,所以我们常常使用which来判断是否安装了某个软件。
例如:which nano
一个比较简单的搜索命令,它直接从数据库而不是硬盘查询,而且只能搜索特定的文件。所以,它的搜索很快。
在这里要先介绍"/var/lib/mlocate/mlocate.db"数据库,因为 locate 命令就是通过这个数据库查找的。这个数据库由系统每天定时维护更新,所以有时候需要手动执行 updatedb 命令来更新数据库。
例如,查找 /usr 及其子目录下所有以 a 开头的文件:locate /usr/a
find命令是一个功能非常强大的命令,它可以根据文件的各个属性来搜索,在此只介绍其简单的搜索。其基本命令格式为:find [path] [option] [action]
例如,在 /usr/ 目录下搜索名字为 myfile 的文件或目录:sudo find /usr/ -name myfile
rar是一种在windows常见的文件压缩格式,但是在linux下必须先安装才能使用。由于在linux中rar命令参数非常多,在此只介绍一些基本操作。
1)创建压缩文件:rar a ehpc.rar ./Desktop/
这是将ehpc目录打包成ehpc.rar
2)使用 a 参数添加文件进压缩包:rar a ehpc.rar a.o
3)使用 d 参数删除文件:rar d ehpc.rar a.o
4)使用 l 参数查看文件:rar l ehpc.rar
5)解压分为两种,一种是 x 参数解压,这样会保持压缩文件的目录结构;另一种是 e 参数解压,将所有文件解压到当前目录:
unrar x ehpc.rar
unrar e ehpc.rar
zip也是在windows和linux使用率比较高的文件压缩格式。
1)创建压缩包:zip -r -o ehpc.zip ./Desktop
其中,-r 参数表示递归,所以上面命令是打包ehpc目录进压缩包;-o 参数表示输出到ehpc.zip压缩文件。
2)使用 -e 参数进行加密:zip -r -e -o ehpc.zip ./Desktop
需要注意的是,由于编码问题linux下和windows下的文本文件可能会不同,如果希望在linux压缩的文件在windows下正常解压,可以加上 -l 参数。
3)查看与解压
解压很简单:unzip ehpc.zip
查看只需加上 -l 参数:unzip -l ehpc.zip
实际上,在linux中用得更多的是tar工具。tar 原本只是一个打包工具,没有压缩功能,需要配合其他具有压缩功能而没有打包功能的工具进行打包压缩。
1)创建一个 tar 包:tar -cf ehpc.tar ./Desktop
其中,-c 参数表示创建,-f 参数表示指定文件名,必须跟在文件名之前。
可以发现这个tar包和原大小相同。
2)查看一个 tar 包:tar -tf ehpc.tar
3)解包一个 tar 包到指定目录:tar -xf ehpc.tar -C ehpcdir
上面我们说了 tar 需要配合其他工具进行压缩,其实一般只需要加一个参数就可以了。这里以gzip为例:tar -czf ehpc.tar.gz ./
解压缩:tar -xzf ehpc.tar.gz
管道是一种通信机制,它可以将前一个进程的输出作为下一个进程的输入。所以它常常用来进行进程间(也包括socket进行网络通信)的通信。不过,在这里我们首先介绍一些linux终端执行命令的知识。
当我们希望同时输入多条命令时,可能还希望对某几个命令的结果进行判断。例如,如果存在某个文件,就把它删除,如果不存在则什么也不做。而 && 和 || 就提供了这种判断的功能。
&& 表示如果前一个命令返回的状态为0(这些状态码有一套默认的规定),则执行后一个命令,否则不执行。而 || 则与之相反。
例如我们常常使用 which 命令来判断是否安装了某个命令:which rar>/dev/null && echo "Installed."
当然也可以结合使用:which rar>/dev/null && echo "Installed." || echo "Not installed"
通常我们在命令行中使用匿名管道,由分隔符 | 表示,而命名管道更常出现在源代码中。
例如:ls -a | grep mysql
这个命令就是先执行 ls -a 命令,然后将输出结果作为输入执行grep mysql命令,在其中查找包含mysql的文件。
下面介绍几个常用的命令,配合管道使用可以提高效率。
1) grep :一个很常用的命令。使用者可以通过其与正则表达式配合实现很高效的查找,不过在这里先简单介绍一下。
在上面我们已经有一个使用 grep 命令的例子了,实际上我们还可以直接使用:grep -r "ehpc" ~
搜索 ~ 目录下所有包含"ehpc"的文件。
2) wc :统计并输出一个文件中行、字节等数据的数目。其中,-l 参数表示行数,-c 参数表示字节数。
结合管道使用,统计文件的个数:ls -a | wc -l
3) uniq :在上面的统计中,我们可能会想要除去一些重复行以免影响结果,这时候我们可以使用 uniq 命令:cat words | uniq
值得注意的是,uniq只除去连续重复的的行,如果希望全文达到同样的效果我们往往会先使用 sort 命令进行排序,即:cat words | sort | uniq
当然,这些命令实际上是很复杂的,我们可以通过这些命令完成很多复杂但是有用的功能,这也是其魅力所在。在此仅作简单的介绍。
在之前出现过很多次的命令,顾名思义它的功能是排序。当然,它可以根据不同的标准来排序,例如:
默认为字典排序:ls -a | sort
反转排序:ls -a | sort -r
相信许多程序员在实际中都会遇到类似于将程序代码中的tab转空格的需要,而linux提供了tab和空格相互转换的命令 col。
在这里,-x 参数表示将 tab 转换成空格,而 -h 参数则相反。
例如:cat myFile | col -x | cat -A
替换操作(删除操作也可以视为一种替换操作)也是文本处理常用的操作之一。
如果是要删除,可以使用 -d 参数:echo "Hello world!" | tr -d "el"
这样会删除"Hello world!"中所有的“e”和“l”。
再例如将小写转换成大写:echo "Hello world!" | tr '[a-z]' '[A-Z]'
这个命令可以简单地合并文件。
例如将数据以 ‘;’ 为分隔符合并(默认的分隔符为Tab):paste -d ';' data1 data2 data3
将标准输出、标准错误等信息输出到指定文件中,就是重定向。
重定向是通过 ‘>’ 和 ‘>>’ 等操作符完成的,(当然也有’<‘和’<<’,前者是导向,后者是追加),其实将标准输出看作一个文件的话,将命令输出导向到另一个文件自然也是没问题的。
例如:echo “Hello world!” > output
结合管道:cat words | sort | uniq >> output
除了标准输出,我们还经常需要重定向标准错误,在此就必须提到标准输入、标准输出和标准错误的文件描述符。在linux中,它们的文件描述符分别是0、1、2,我们可以通过这几个描述符来完成我们想要的操作。
我们可以这样来将标准输出和标准错误重定向到同一个文件:cat words | sort | uniq > output 2>&1
其中,&表示后面的是标准输出而不是一个文件名为1的文件,而这里的重定向顺序也是不能改变的。
也可以这么做:cat words | sort | uniq &> output
我们很容易想到如果我们想不断将标准输出重定向到某个文件,难道需要在每一个命令后面加上重定向命令?当然是不需要的,linux提供了永久重定向的方法。当然,这里的永久也并不是那么永久。
我们可以这样做:exec 1> output
其中 exec 命令的作用是用新的进程去替换旧的进程,或者指定重定向。
有时候我们仅仅希望执行命令而不想要其输出,这时候我们可以将输出重定向到空设备 /dev/null :cat words | sort | uniq 1>/dev/null 2>&1
这样输出结果就没有啦。
终止一个在前台运行的进程的快捷键是 ctrl + c。将当前进程停止并转到后台的快捷键是 ctrl + z。
我们可以通过 & 这个符号,让我们的命令在后台中运行。
例如:ls &
这样命令就会在后台自己运行了。
那么当我们如何查看在后台的工作呢?
可以使用:jobs
这时我们可以看到每行是这样的格式:[1] + suspended ...(command)
其中,第一列的数字表示job编号,也就是转到后台的工作的编号,第二列如果是 ‘+’ 表示的是这是最后一个被转入后台的工作, ‘-’ 的话则是倒数第二个,其他的话在这列没有符号。第三列表示状态,而后面则是命令本身。
那么我们突然想要把工作从后台拿回前台怎么办呢?
可以使用:fg %jobid
例如, fg %1
如果只是希望其在后台运行的话,可以:bg %jobid
终止命令比较简单,但是在参数上我们可以通过选择信号值来决定以何种方式终止程序,信号值可以这样查看:kill -l
所以可以这样终止程序:kill -signal pid
或者kill -signal %jobid
top 命令是我们常常使用查看工具,它可以实时查看系统的一些关键信息的变化。
top 命令的输出比较多,下面逐一介绍:
第一行:当前程序名称 当前系统时间 机器启动时间 系统用户数量 1分钟内、5分钟内和15分钟内cpu平均负载
第二行:进程总数 正在运行的进程数 休眠的进程数 停止的进程数 僵尸进程数
第三行:
第四行:
第五行:
然后就是许多行进程的信息了,以下按顺序分别对应:
我们甚至可以与这个程序交互,例如输入k的话系统会提示进一步输入信号值以及pid号以杀死一个进程,更多的信息可以查看帮助手册。
你一定经常看见 ps aux
这个命令将会列出所有的进程信息。
我们还往往配合 grep 和正则表达式使用。
例如:ps aux | grep slurm
那么,打印出来的都是什么信息呢?
我们还可以用这样的命令去查看进程树:
pstree