EasyHPC - Linux基础入门【笔记】

内容来源:超算习堂 (easyhpc.net)

文章目录

  • 01 linux常用快捷键以及帮助手册
    • 快捷键
    • 帮助手册
  • 02 软件安装
    • apt
  • 03 用户权限管理
    • 查看用户
    • 创建用户
    • 查看用户组
    • 删除用户
  • 04 文件权限管理
    • 查看文件权限
    • 变更文件所有者
    • 修改文件权限
  • 05 目录及文件操作
    • 基本目录操作
    • 基本文件操作
      • 创建
      • 复制
      • 删除
      • 移动及重命名
      • 编辑文件
  • 06 搜索文件
    • which
    • whereis
    • locate
    • find
  • 07 文件解压缩
    • rar
    • zip
    • tar
  • 08 管道与一些文本命令
    • && 和 ||
    • 管道
  • 09 文本处理
    • sort
    • col
    • tr
    • paste
  • 10 重定向
    • 重定向
    • 文件描述符
    • 永久重定向以及“丢弃”输出
  • 11 进程的基本操作
    • 前台/后台切换
    • 终止
  • 12 进程管理
    • top
    • ps

01 linux常用快捷键以及帮助手册

快捷键

  • Tab:命令补全,当你忘记某个命令的全称时可以只输入它的开头的一部分,然后按下 Tab 键就可以得到提示或者帮助完成。
  • Ctrl + Shift + C:复制
  • Ctrl + Shift + V:粘贴
  • Shift + CapsLock:大小写切换
  • Ctrl + c: 强行终止当前程序
  • Ctrl + d: 键盘输入结束或退出终端
  • Ctrl + s: 暂停当前程序,暂停后按下任意键恢复运行。
  • Ctrl + z: 将当前程序放到后台运行,恢复到前台为命令fg。
  • Ctrl + a: 将光标移至输入行头,相当于Home键。
  • Ctrl + e: 将光标移至输入行末,相当于End键。
  • Ctrl + k: 删除从光标所在位置到行末。
  • Alt + Backspace:向前删除一个单词。
  • Shift + PgUp:将终端显示向上滚动。
  • Shift + PgDn:将终端显示向下滚动。

帮助手册

在 Linux 环境中,如果你对某个命令感到疑惑,可以使用man命令来获取帮助,它是Manual pages的缩写。用户可以通过执行man命令调用手册页。

你可以使用如下方式来获得某个命令的说明和使用方式的详细介绍:man

02 软件安装

apt

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

03 用户权限管理

Linux 是一个多用户的操作系统,所有用户共享一些主机的资源,但他们也分别有自己的用户空间,用于存放各自的文件。由于 Linux 的用户管理和权限机制,不同用户不可以轻易地查看、修改彼此的文件。

查看用户

whoami

输出:当前伪终端的用户名

创建用户

首先使用 adduser 命令创建用户并设置密码:sudo adduser

su,su- 与 sudo :

  • su 切换到用户 user,执行时需要输入目标用户的密码。
  • sudo 以特权级别运行 cmd 命令,要求当前用户属于 sudo 组,且需要输入当前用户的密码。
  • su - 切换用户,同时环境变量也会跟着改变成目标用户的环境变量。

查看用户组

groups user

输出为用户:用户组。

删除用户

sudo deluser user --remove-home

04 文件权限管理

查看文件权限

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,+ 和 - 分别表示增加和去掉相应的权限。

05 目录及文件操作

基本目录操作

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编辑器功能非常强大,但随之而来的是它的学习难度并不简单。

06 搜索文件

which

which只从环境变量指定的路径中去搜索文件,所以我们常常使用which来判断是否安装了某个软件

例如:which nano

whereis

一个比较简单的搜索命令,它直接从数据库而不是硬盘查询,而且只能搜索特定的文件。所以,它的搜索很快。

locate

在这里要先介绍"/var/lib/mlocate/mlocate.db"数据库,因为 locate 命令就是通过这个数据库查找的。这个数据库由系统每天定时维护更新,所以有时候需要手动执行 updatedb 命令来更新数据库

例如,查找 /usr 及其子目录下所有以 a 开头的文件:locate /usr/a

find

find命令是一个功能非常强大的命令,它可以根据文件的各个属性来搜索,在此只介绍其简单的搜索。其基本命令格式为:find [path] [option] [action]

例如,在 /usr/ 目录下搜索名字为 myfile 的文件或目录:sudo find /usr/ -name myfile

07 文件解压缩

rar

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

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

tar

实际上,在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

08 管道与一些文本命令

管道是一种通信机制,它可以将前一个进程的输出作为下一个进程的输入。所以它常常用来进行进程间(也包括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

当然,这些命令实际上是很复杂的,我们可以通过这些命令完成很多复杂但是有用的功能,这也是其魅力所在。在此仅作简单的介绍。

09 文本处理

sort

在之前出现过很多次的命令,顾名思义它的功能是排序。当然,它可以根据不同的标准来排序,例如:

默认为字典排序ls -a | sort

反转排序ls -a | sort -r

col

相信许多程序员在实际中都会遇到类似于将程序代码中的tab转空格的需要,而linux提供了tab和空格相互转换的命令 col。

在这里,-x 参数表示将 tab 转换成空格,而 -h 参数则相反。

例如:cat myFile | col -x | cat -A

tr

替换操作(删除操作也可以视为一种替换操作)也是文本处理常用的操作之一。

如果是要删除,可以使用 -d 参数echo "Hello world!" | tr -d "el"这样会删除"Hello world!"中所有的“e”和“l”。

再例如将小写转换成大写:echo "Hello world!" | tr '[a-z]' '[A-Z]'

paste

这个命令可以简单地合并文件。

例如将数据以 ‘;’ 为分隔符合并(默认的分隔符为Tab):paste -d ';' data1 data2 data3

10 重定向

将标准输出、标准错误等信息输出到指定文件中,就是重定向。

重定向

重定向是通过 ‘>’ 和 ‘>>’ 等操作符完成的,(当然也有’<‘和’<<’,前者是导向,后者是追加),其实将标准输出看作一个文件的话,将命令输出导向到另一个文件自然也是没问题的。

例如: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这样输出结果就没有啦。

11 进程的基本操作

前台/后台切换

终止一个在前台运行的进程的快捷键是 ctrl + c。将当前进程停止并转到后台的快捷键是 ctrl + z。

我们可以通过 & 这个符号,让我们的命令在后台中运行

例如:ls &这样命令就会在后台自己运行了。

那么当我们如何查看在后台的工作呢?

可以使用:jobs这时我们可以看到每行是这样的格式:[1] + suspended ...(command)

其中,第一列的数字表示job编号,也就是转到后台的工作的编号,第二列如果是 ‘+’ 表示的是这是最后一个被转入后台的工作‘-’ 的话则是倒数第二个,其他的话在这列没有符号。第三列表示状态,而后面则是命令本身

那么我们突然想要把工作从后台拿回前台怎么办呢?

可以使用:fg %jobid例如, fg %1

如果只是希望其在后台运行的话,可以:bg %jobid

终止

终止命令比较简单,但是在参数上我们可以通过选择信号值来决定以何种方式终止程序,信号值可以这样查看:kill -l

所以可以这样终止程序:kill -signal pid

或者kill -signal %jobid

12 进程管理

top

top 命令是我们常常使用查看工具,它可以实时查看系统的一些关键信息的变化

top 命令的输出比较多,下面逐一介绍:

第一行:当前程序名称 当前系统时间 机器启动时间 系统用户数量 1分钟内、5分钟内和15分钟内cpu平均负载

第二行:进程总数 正在运行的进程数 休眠的进程数 停止的进程数 僵尸进程数

第三行:

  • 用户空间占用CPU百分比
  • 内核空间占用CPU百分比
  • 用户空间优先级变化的进程占用CPU百分比
  • 空闲CPU百分比
  • 等待IO的CPU时间百分比
  • 硬中断占用CPU的百分比
  • 软中断占用CPU的百分比
  • 虚拟 CPU 等待物理 CPU 的时间的百分比

第四行:

  • 物理内存总量
  • 使用物理内存总量
  • 空闲内存总量
  • 缓存内存总量

第五行:

  • 交换区总量
  • 使用交换区总量
  • 空闲交换区总量
  • 缓冲交换区总量

然后就是许多行进程的信息了,以下按顺序分别对应:

  • PID:进程id
  • USER:进程所属用户
  • PR:进程动态优先级值
  • NI:进程静态优先级值
  • VIRT:进程使用虚拟内存总数
  • RES:进程使用物理内存数
  • SHR:进程共享内存大小
  • S:进程状态
  • %CPU:CPU利用率
  • %MEM:内存利用率
  • TIME+:进程活跃总时间
  • COMMAND:进程运行名

我们甚至可以与这个程序交互,例如输入k的话系统会提示进一步输入信号值以及pid号以杀死一个进程,更多的信息可以查看帮助手册。

ps

你一定经常看见 ps aux 这个命令将会列出所有的进程信息

我们还往往配合 grep 和正则表达式使用。

例如:ps aux | grep slurm

那么,打印出来的都是什么信息呢?

  • F:进程的标志(process flags),当 flags 值为 1 则表示此子程序只是 fork 但没有执行 exec,为 4 表示此程序使用 root 权限
  • USER:进程拥有者
  • PID:进程ID
  • PPID:父进程的PID
  • SID:session 的ID
  • TPGID:前台进程组的ID
  • %CPU:进程占用的CPU百分比
  • %MEM:占用内存的百分比
  • NI:进程的 NICE 值
  • VSZ:进程使用虚拟内存大小
  • RSS:驻留内存中页的大小
  • TTY:终端ID
  • S or STAT:进程状态
  • WCHAN:正在等待的进程资源
  • START :启动进程的时间
  • TIME:进程消耗CPU的时间
  • COMMAND:命令的名称和参数

我们还可以用这样的命令去查看进程树

pstree

你可能感兴趣的:(Linux,linux)