Linux与Shell

Linux,你必需知道的

磁盘、进程、内存

保存数据的磁盘

实际处理数据的进程

存储各种运行信息的内存

磁盘和文件

Linux系统没有盘符的概念,它和所有类UNIX系统一样,有一个树型结构的文件系统。

磁盘

查看系统已挂载文件系统情况,df只会显示已挂载的分区。

vdaX 指文件系统分区,v在这里代表KVM使用的virto虚拟文件系统,X是分区号。相应的,sata, ssd等磁盘使用s开头,传统的HHD机械硬盘使用h开头。

查看磁盘硬件情况,fdisk 并不显示系统分区,显示电脑上的所有磁盘(包括未挂载磁盘)。

进程

控制进程就等于控制Linux

:通过父进程创建一个子进程,子进程是父进程自身的一个副本。

:舍弃进程原本携带信息,在进程执行时用新的程序代码替代调用进程的内容。

后台执行

在执行命令的结尾加上 ,可以使程序在后台运行。如:

使用 命令,可使程序输出不打印到时前端(终端),默认将打印到 文件。

Ctrl+Z

使在前台运行的进程后台运行。

将后台进程拉回前台运行。

快速的数据处理管道

管道蕴含着Linux从Unix中继承的一个重要概念:

程序应该只关注一个目标,并尽可能把它做好。程序应能够互相协同工作。让程序处理文本数据流,这是一个通用的接口

stdin:标准输入,文件描述符

stdout:标准输出,文件描述符1

stderr: 标准错误输出,文件描述符2

管道

管道中常用的快捷命令

过滤并保存系统运行的所有进程号

cut 命令把 -d 选项指定的文字作为文字分隔符,仅抽取 -f 选项定位的数据(域)。这个例子中,使用空格作为分隔符。但是,由于连续的空格会被当作多个分隔符,因此要事先通过 tr 命令将连续空格转换成一个空格。

内存

物理地址空间和逻辑地址空间

物理内存分为Linux内核自身使用的区域和用户进程使用的区域。内核使用低端内存,高端内存被分配给了用户进程。低端内存中的空闲区域也将被分配给用户进程使用。

进程在访问物理内存时并不直接指定物理地址,而是指定逻辑地址。内存的内核数据区域中预先设置逻辑地址和物理地址的对应“页表”,

然后 CPU 上搭载的 MMU(Memory Management Unit)硬件会参照该页表,自动实现对映射后物理地址上的数据的访问。

为每个进程提供独立的内存空间,等于实现了进程之间的安全保护。

通过 系统运行内存信息文件查看内存状态

通过 命令查看内存状态

Linux 发行版

Linux本身指 GNU/Linux 内核,但只有内核一般用户是没法使用的。所以世面上就出现了很多 Linux 发行版,它打包并整理了一系列开箱即用的工具。

CentOS

CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux

依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。

两者的不同,在于CentOS并不包含封闭源代码软件。

公司的服务器(测试、生产)环境使用的CentOS 7。

Ubuntu

Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的开源GNU/Linux操作系统,Ubuntu 是基于Debian GNU/Linux,由全球化的专业开发团队(Canonical Ltd)打造的。

其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词 [2] ,类似儒家“仁爱”的思想,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观。

公司部分开发人员的开发电脑安装了 Ubuntu 16.04 操作系统。

虚拟化

Linux拥有强大的虚拟化能力。常见的有:

KVM:完全虚拟化,OpenStack默认使用它做为系统虚拟化工具

Xen:完全虚拟化,类似KVM的另一套虚拟化

Cgroup:半虚拟化,Docker/k8s等容器虚拟化的核心

一个邮件发送系统的虚拟网络构成。

开始使用Linux

终端

终端会话是用户与shell环境打交道的地方,如果你使用的是基于图形用户界面的系统,这指的就是终端窗口。如果没有图形用户界面(生产服务器或SSH会话),那么登录后你看到的就是shell提示符。

CentOS 7的终端提示如下:

$表示普通用户,#表示管理员用户root。root是Linux系统中权限最高的用户。

环境变量

环境变量通常保存了可执行文件、库文件等的搜索路径列表。例如 和 :

设置环境变量可以在命令行直接使用 命令:。但这样设置在系统重启后就无效了,我们可以把它写到配置文件里面。全局配置:/etc/profile,用户配置:~/.bash_prfile。若环境变量写在配置文件内,在重启系统前默认是不会生效的,需要手动使其生效。

安装软件

在Linux下一般有两种方式来安装软件:

使用包管理器自动安装

使用源码编译安装

RPM

CentOS 7 使用yum包管理器安装RPM格式的软件。常用命令有:

列出已安装包:

用yum安装软件:

用yum更新软件:

(更新系统)

用yum卸载软件:

yum工具和命令命令ls:查看文件

列出目录内容。

-a 列出所有文件

-l 列出文件明细

-h 使用 human 友好的方式显示文件内容大小

-F 将指示符添加到显示的项后面。如:* 可执行,/ 目录,@ 符号连接,= UNIX套接字,

tar(解)压缩

将多个文件压缩成一个单一文件,或相反。Linux tar 命令支持多种压缩格式。常用的有:gzip和bzip2

-c 压缩文件,

-z 使用 gzip 进行(解)压缩

-j 使用 bzip2 进行(解)压缩

-x 解压文件

-f 指定压缩生成/解压文件

cURL:数据传输命令行工具

cURL是传输数据到服务器或从服务器获取数据的工具,支持多种协议。如:DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP。

上传文件

:使用HTTP POST方法

:上传文件字段设置为filename,引用本地目录的 app.jar 文件

常用选项

:显示进度条

:不显示进度信息

:设置远程文件下载到本地系统的目标文件名

:支持断点续传,后面的选项记cURL推断出正确的续传位置,也可以指定明确的字节偏移。

wget: 命令行HTTP客户端

下载文件

: 断点下载文件

镜像网站

:让wget耍流氓无视robots.txt协议

ps:查找进程

显示当前进程(所有或指定)的快照。

显示系统所有进程

显示系统所有终端所有用户进程

tail: 监控文件

实时监控 日志文件最新1024行内容:

top:查看系统运行状态

实时显示Linux系统运行状况

第一行:当前时间,系统运行时长,登录用户数,平均系统负载:1分钟、5分钟、15分钟

第二行:任务(进程)总数,运行数,休眠数,已停止数,僵尸进程数

第三行:CPU运行百分比。us: 用户空间占,用户进程空间内改变过优先级的进程占,空闲CPU占,等待输入输出的CPU,硬中断(Hardware IRQ)占,软中断(Software Interrupts)占

第四行:物理内存总数(KB),空闲内存,已使用内存,缓存的内存

第五行:交换空间总数,空闲交换内存,已使用,可使用

PID: 进程号

USER: 运行进程的用户

PR: 进程优先级

NI: nice值。负值表示高优先级,正值表示低优先级

VIRT: 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

RES: 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

SHR: 共享内存大小,单位kb

S: 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程

%CPU: 上次更新到现在的CPU时间占用百分比

%MEM: 进程使用的物理内存百分比

TIME+: 进程使用的CPU时间总计,单位1/100秒

COMMAND: 进程名称(命令名/命令行)

用户管理

group

创建用户组:。创建一个组:devops,并指定组GID为1100

user

创建用户:。

: 指定用户UID

: 指定组GID,需要存在

: 指定附加组,需要存在

: 骨架目录中的文件和目录将被拷贝到用户主目录

: 若 指定目录不存在则创建

: 指定用户主目录

ssh

ssh

OpenSSH客户端

sftp

基于SSH协议的FTP客户端,可以通过SSH登录服务器并使用FTP协议上传、下载文件

put: 上传本地文件到服务器

get: 从服务器下载文件

!command: 命令前添加!,命令将在本地执行。

, 命令还有些参数可以设置,常用如下:

-P: 同步完整的文件权限的访问时间

-r: 递归拷贝目录内的所有文件

scp

基于SSH协议的文件拷贝工具,可以将本地文件拷贝到远程服务器。

VIM,编辑器之神

CentOS系统默认只安装了VI,要使用VIM需要安装:

VIM全称是:Vi IMproved。改进的Vi,程序员的文本编辑器。VIM被称为编辑器之神。使用 VIM 非常简单,在终端输入 即可。VIM支持全键盘操作,

不需要使用鼠标即可操作,可显著提供工作效率。

同时也可以指定要打开的文件。打开 vim 时可以使用参数,比如: 只读模式。在使用VIM查看比较大的日志文件等时候可以防止误操作修改文件。

VIM运行时有三种模式:

Normal模式:在Normal模式下,用户可以移动光标、操纵文字、输入各种控制操作

Edit模式:顾名思义,编辑模式下可以输入内容。

Command模式(指令模式):在Normal模式下,按 (输入英文冒号)则可进入指令模式。当编辑器下部出现闪烁的英文冒号时既进入指令模式。

使用VIM打开本文 ,默认处于 Normal 模式。

VIM 基本使用

这时,可以使用键盘上的 H、J、K、L 4个键移动光标,分别为:向左、上、下、右移动。当光标移动到期望的位置后可以有多种方法进入Edit(编辑)模式。

:在光标指定字符前进入编辑模式,:在光标指定字符后进入编辑模式,:替换光标指定字符并进入编辑模式。

退出Edit模式有两种方法:

按 键退出Edit模式并进入Normal模式

按 组合键

VIM技巧

保存和退出(Command模式)

输入 将保存当前编辑内容,若是打开的新文件可以在 后输入需要保存的文件名。

输入 将退出VIM,退出前必需保存已编辑内容。若想放弃当前编辑内容并退出,输入 。

, 可以组合输入。比如保存并退出:。

快速移动(Normal模式)

翻页

向前翻一页, 向后翻一页(向前翻页时VIM将保留之前页的最后两行)。

快速定位到文本开头或结尾

连按两次 键将光标移动到整个文本开头,将移动光标到整个文本结尾。

复制、粘贴行(Normal模式)

连续按两次 键复制单行,在需要粘贴的地方使用 键进行粘贴(将粘贴到光标所在行之下)。

复制多行

按 组合键可以高亮一行,这时可以使用 J、K 进行上下移动,选中需要的多行后再按 键即可复制多行。

撤销、恢复编辑(Normal模式)

在Normal模式下按 键将撤销最后一次编辑(每次保存文件算一次编辑)。按 将恢复撤销。撤销和恢复可进行多次。

自动补全(Edit模式)

在需要实例的文字后按 会弹出自动补全选择框,这里可以使用 或 进行向下、向下移动,选中需要实例的单词后按 键即可。

将本地路径录入文本(Edit模式)

使用 将弹出本地路径选择框(相对当前编辑文本路径),移动光标选中需要的路径,按 键后录入到文本中。

VIM配置

可以自定义VIM配置,VIM的配置文件为:,一般在用户主目录下。编辑配置文件:

输入以下内容打开高亮和自动缩进。

Shell

Shell是用户使用Linux的桥梁,它既是一种命令语言,又是一种程序。在Linux下,一般默认使用的是 Bash)。以下内容非特殊说明,默认使用的Bash。

Bash脚本

可以将一系列命令放到一个脚本文件中自动执行,一般这类脚本文件都以 结尾。

上面是一个普通的shell脚本,使用Bash执行。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180505G01UDC00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券