14

大数据基础:Linux操作系统(上)

 3 years ago
source link: https://mp.weixin.qq.com/s?__biz=MzA4NzA5NzE5Ng%3D%3D&%3Bmid=2650230456&%3Bidx=1&%3Bsn=ae2f5ae81a5545af27797b272a7fdc4b
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

点击关注上方“ 知了小巷 ”,

设为“置顶或星标”,第一时间送达干货。

nIzeUzu.png!mobile

Linux操作系统(上)

内容提纲:

1. Linux操作系统简介

2. Linux操作系统的核心思想

3. Linux操作系统的特点

4. Linux操作系统的应用领域

5. Linux操作系统简单架构

6. Linux下的磁盘分区

7. Linux的文件系统

8. Linux文件系统核心目录结构

9. Linux命令

10. Linux文本编辑器vim

11. Linux网络管理

12. Linux用户和组

1. Linux操作系统简介

Linux OS是一套免费使用和自由传播的类UNIX操作系统( 主要用在服务器上 ),是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。在Linux上能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了UNIX以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

From https://baike.baidu.com/item/linux

到目前为止,Linux有着不同的发行版本,它们都使用了Linux内核。Linux可以安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。

2. Linux操作系统的核心思想

Linux内核源码地址:

https://github.com/torvalds/linux

Linux内核文档:

https://www.kernel.org/doc/html/latest/

  • Linux是一个功能强大的网络操作系统

  • Linux是一个自由软件,是免费的、开放源代码的

  • 在Linux系统中,一切皆文件

  • Linux中每个软件都有其确定的用途

  • 开发Linux的目的是建立不受任何商品化软件版权制约的、全世界都能自由使用的UNIX兼容产品

3. Linux操作系统的特点

  • 开放性的系统

  • 多用户多任务的系统

  • 具有可靠的系统安全性,出色的稳定性和卓越的速度性能

  • 提供了丰富的网络功能

  • 标准兼容性和可移植性,灵活性

  • 网络协议支持、方便的远程管理

  • 强大的内存管理和文件系统管理

  • 大量的可用软件和免费软件,并且提供了良好的用户界面

  • 可供选择的发行厂商多

  • 免费

4. Linux操作系统的应用领域

  1. Linux服务器

    Linux最主要的应用领域是基础服务器应用,可以提供Web服务器 、FTP服务器、Gopher、SMTP/POP3、Proxy/Cache 、DHCP服务器 、DNS等服务器,支持服务器集群,支持虚拟主机、虚拟服务、VPN等,最著名的LAMP/LNMP架构!

  2. 嵌入式Linux系统

    Linux运行稳定、对网络的良好支持性、低成本,且可以根据需要进行软件裁剪,内核最小可以达到几百KB等特点,使其近些年来在嵌入式领域的应用得到非常大的提高

  3. 桌面应用

    关于此领域是传统Linux领域最薄弱的环节,被windows所压制,近些年来随着ubuntu、fedora等优秀桌面环境的兴起,同时各大硬件厂商对其支持的加大,linux在个人桌面领域的占有率在逐渐的提高。典型代表:ubuntu、fedora、suse linux。

5. Linux操作系统简单架构

Ff6ZZ3Z.png!mobile

  1. Linux Kernel

严格来讲,Linux不是一个操作系统,Linux只是一个操作系统中的内核。 内核建立了计算机软件与硬件之间通讯的平台 。内核提供系统服务,比如文件管理、虚拟内存、设备I/O、进程管理等。

Kernel实现了操作系统的基本功能:

  • 硬件方面:控制硬件设备,内存管理,硬件接口,基本I/O;

  • 软件方面:管理文件系统,为程序分配内存和CPU时间等。

版本号,和普通软件类似:

三个数字组成:r.x.y。r:目前发布的Kernel版本;x:偶数:稳定版本,奇数:开发中版本(现已不适用);y:错误修补的次数。

目前内核最新版本:

https://www.kernel.org/

stable:	5.9.8	2020-11-10

Tips: Linux发行版本和Linux内核版本是不一样的。

Linux发行版:

  • RedHat Enterprise Linux, RHEL

  • CentOS 社区企业操作系统 http://www.centos.org/

  • Fedora [Linux] 桌面版

  • Debian

  • Ubuntu(基于Debian的桌面版)

  1. Linux Shell

  2. 应用层:Linux文件系统,ext2、ext3、fat、vfat、iso9660、NFS

Linux操作系统下载

主流发行版:企业级Linux系统仍旧是RedHat或者CentOS;

免费:CentOS和RedHat差别不大,基于Red Hat Linux提供的可自由使用源代码的CentOS是一个企业级Linux发行版本。CentOS的yum命令支持在线升级,可以即时更新系统。

比如centos7镜像列表:

http://isoredirect.centos.org/centos/7/isos/x86_64/

6. Linux下的磁盘分区

  1. 总的来说,可以分为主分区、扩展分区、逻辑分区

  2. 硬盘采用hdX格式表示,X代表a.b.c.d

  3. 系统最多只有4个IDE设备,其中第一个IDE设备名称为hda,第4个为hdd

主分区:一个硬盘最多只能有4个主分区,主分区采用hdXN的格式,hdX为硬盘,N是1-4的数字,分别表示4个主分区,第一个硬盘的第一个主分区,表示为hda1,以此类推。

扩展分区:扩展分区作为特殊的主分区需要占用硬盘分区表中4个分区记录中的1个记录。

逻辑分区:逻辑分区只能建立在扩展分区中,可以建立文件系统。逻辑分区同样采用了hdXN的格式,区别在于,逻辑分区的N是从5开始算的,第一个硬盘的第2个逻辑分区就为hda6。

注意:

IDE设备:hda2, hdb3等等;

SCSI设备/SATA设备:sda2, sdb3等等。

IDE是英文Integrated Drive Electronics的缩写,翻译成中文叫做“集成驱动器电子装置”, 它的本意是指把控制器与盘体集成在一起的硬盘驱动器。通常我们所说的IDE指的是硬盘等设备的一种接口技术。

小型计算机系统接口(SCSI,Small Computer System Interface)是一种用于计算机及其周边设备之间(硬盘、软驱、光驱、打印机、扫描仪等)系统级接口的独立处理器标准。

SATA是Serial ATA的缩写,即串行ATA。它是一种电脑总线,主要功能是用作主板和大量存储设备(如硬盘及光盘驱动器)之间的数据传输。

7. Linux的文件系统

Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。Linux下的所有文件和目录,形成一个树状的结构,构成了Linux中的文件系统。

在Linux中普通文件和目录文件保存在称为块物理设备的磁盘或者磁带上。一套Linux系统支持若干物理盘,每个物理盘可定义一个或者多个文件系统。每个文件系统由逻辑块的序列组成,一个逻辑盘空间一般划分为几个用途各不相同的部分,即引导块、超级块、inode区以及数据区等。操作系统用于明确磁盘分区上的文件的方法和数据结构,即文件在磁盘上的组织方法

Linux最早引入的文件系统类型是MINIX。MINIX文件系统由MINIX操作系统定义,有一定的局限性,如文件名最长14个字符,文件最长64M字节。第一个专门为Linux设计的文件系统是EXT(Extended File System),但目前流行最广的是EXT4。但是因为EXT4的一些问题,出现了各方面细节更好的XFS类型文件系统,它也是现在的centos7系统默认的文件系统类型。

CentOS7可以通过命令查看文件系统的类型:cat /etc/fstab。Windows系统文件格式一般是NTFS,U盘文件格式一般是FAT32。

$ cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Tue May  3 13:48:10 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=xxxxxxxx /                       ext4    defaults        1 1
/dev/vdb1  /mnt ext3    defaults    0  0

Linux根据文件形式主要将文件分为 目录和普通文件 ,以树的形式进行组织。

  • 目录或者文件的名称长度不超过255个字符;

  • 文件或者目录是由以下字符构成:

    Uppercase letters (A-Z)

    Lowercase letters (a-z)

    Numbers (0-9)

    Underscore (_)

    Period(.)

    Comma(,)

注意:

  1. 文件和目录是区分大小写的

  2. Linux对文件的扩展名没有强制要求

8. Linux文件系统核心目录结构

$ ls /
bin  boot  data  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  Users  usr  var
  • / 根目录,一般根目录下只存放目录,不要存放文件

  • /bin:/usr/bin 可执行二进制文件的目录,如常用的命令ls、tar、mv、cat

  • /boot 放置linux系统启动时用到的一些文件

  • /dev 存放linux系统下的设备文件

  • /etc 系统配置文件存放的目录

  • /home 不同用户所在的目录,用~进行访问

  • /lib:/lib64:/usr/lib:/usr/local/lib 系统使用的函数库的目录

  • /lost+found 系统异常产生错误时,会将一些遗失的片段放置于此目录下

  • /mnt:/media 光盘默认挂载点

  • /opt 给主机额外安装软件所存放的目录

  • /proc 此目录的数据都在内存中

  • /root 系统管理员root的home目录

  • /sbin:/usr/sbin:/usr/local/sbin 放置系统管理员使用的可执行命令

  • /srv 服务启动之后需要访问的数据目录

  • /sys 类似于/proc的特殊文件系统,存放内核数据信息

  • /tmp 一般用户或正在执行的程序临时存放文件的目录

  • /usr 应用程序存放目录

  • /var 放置系统执行过程中经常变化的文件,比如日志等

Linux目录结构使用建议

  1. 用户应该将文件存储在自己的主目录(home)及其子目录下

  2. 系统绝大多数设置/配置都在/etc目录下

  3. 不要修改“/”或者“/usr”目录下的任何内容,除非真的清楚你在做什么,也就是说“/”目录最好和安装好系统之初保持一致

  4. 大多数工具和应用软件程序都安装在/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin

  5. 文件或者目录都有唯一的绝对路径,没有盘符的概念

Linux分区规划

  • /swap:交换分区,用来支持虚拟内存的分区,通常放在单独的分区,其大小为内存容量的1~2倍。

  • /:根分区,它只存放启动系统所需的文件和系统配置文件,应放置在ext3fs主分区中,单独分区。

  • /boot:启动分区,容量小于等于128MB,通常可以单独分区,存放Linux内核和其他与内核有关的文件。

  • /home:用户的home目录,通常将其设置在独立的分区中,为以后方便的磁盘定额做准备。

9. Linux命令

Linux的命令格式:命令 [命令选项]  [命令参数],例如:ls -l /

# 普通用户
$ ls -l /

注意:三者之间要空格隔开,其中命令选项分为 长格式和短格式

短格式用'-'表示,比如:-l,

长格式用"--"表示,比如:--help,

也可以使用组合格式,比如:-a -l  等价于 -la 或者 -al

Linux的命令提示符:

  • #:管理员用户

  • $:普通用户

Linux以回车键表示命令结束,如果linux命令需要 多行输入,那么可以以\(反斜杠)表示每行结束

Linux常用命令

  1. 文件管理

    mkdir, rmdir, mv, rm, cp, touch, cat, tac, echo, more, less, head, tail, file, find, rename, ln, pwd, scp, alias

    tac是倒序输出文件内容

  2. 磁盘管理

  3. 文档处理

  4. 用户和组

  5. 文件传输 get, put, wget

  6. 网络通信

  7. 备份压缩

  8. 系统管理

  9. 系统设置

  10. 其他

使用man查看命令帮助

$ man clear
clear(1)                                                                                                             clear(1)

NAME
       clear - clear the terminal screen

SYNOPSIS
       clear

DESCRIPTION
       clear  clears your screen if this is possible.  It looks in the environment for the terminal type and then in the ter-
       minfo database to figure out how to clear the screen.

       clear ignores any command-line parameters that may be present.

SEE ALSO
       tput(1), terminfo(5)

       This describes ncurses version 5.7 (patch 20081102).

常用小技巧

  • clear:清屏,或者按ctrl + l也行

  • ctrl + c:退出当前进程

  • ctrl + z:挂起当前前台进程

  • ctrl + u:清除光标前的命令,相当于剪切

  • ctrl + k:清除光标后的命令,相当于剪切

  • ctrl + y:粘贴

  • ctrl + t:把光标前面的那个字符往后挪动一位

  • ctrl + l:清屏

  • !!:执行上一次命令

  • !$:上个命令的最后一个单词

  • ctrl + w:删除光标前一个单词

  • cd data; cat sed.txt:表示先执行cd,然后执行cat,工作目录会切换

  • (cd data; cat sed.txt):跟上个命令相比,不切换工作目录

重定向

  • 管道符,表示把前面命令内容的输出当做后面命令的输入 |

  • 标准输入、输出 Stdin Stdout Stderr

  • 输出重定向

  • 错误输出重定向

  • 输入重定向

10. Linux文本编辑器vim

vi编辑器是Linux内置的文本编辑器,几乎所有的类unix系统中都内置了vi编辑器,而其它编辑器则不一定支持,另外很多软件会调用vi编辑进行内容编写,例如crontab定时任务。较之于其它编辑器或GUI编辑器,vi编辑速度是最快的。VIM是它的增强版本,VI有三种基本工作模式:

  1. 命令模式(command mode)、或者叫一般模式

  2. 插入模式(insert mode)、或者叫编辑模式

  3. 底行模式(last line mode)、或者叫命令行模式

切换:a i o 进入编辑模式,esc进入一般模式,:进入命令行模式

11. Linux网络管理

IP地址

# 查询IP:ip addr
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: 
3: eth1: 

主机名称

# 查看主机名:
hostnamectl   (centos7支持)
hostnamectl status   查看状态
hostnamectl --static       静态
hostnamectl --transient       瞬态
hostnamectl --pretty    灵活态
hostname        通过命令查看(centos7和6都支持)
cat /etc/hostname     从配置文件查看(centos7支持)
cat /etc/sysconfig/network 从配置文件查看(centos6支持)

$ hostnamectl
   Static hostname: ***********
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 7d*****************************
           Boot ID: 85*****************************
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-327.36.3.el7.x86_64
      Architecture: x86-64

修改主机名:

  1. 临时修改,重启之后失效

hostname newname
  1. 永久生效

hostnamectl set-hostname newname
Hostnamectl --static set-hostname newname
vim /etc/hostname 永久修改配置文件
  1. 删除主机名

hostnamectl set-hostname ""

DNS

# 增加配置:dns=none
vi  /etc/NetworkManager/NetworkManager.conf

vi  /etc/resolv.conf
增加如下内容:
# 主DNS
nameserver 192.168.123.2
# 备DNS 注意可能会转到外网...
nameserver 8.8.8.8

IP主机名称映射

通过执行命令:cat /etc/hosts 来进行修改

网络连接netstat

netstat:netstat命令可以显示网络接口的很多统计信息,包括打开的socket和路由表 在centos7系统中,netstat命令默认没安装。

所以执行该命令进行安装:yum install net-tools,前提是必须能连接外网。

安装了该网络工具包之后,之前不能使用ifconfig命令,现在也能使用了。

常用命令选项:

  • -a (all)显示所有选项,默认不显示LISTEN相关

  • -p 显示建立相关链接的程序名

  • -t (tcp)仅显示tcp相关选项

  • -r 显示路由信息,路由表

  • -u (udp)仅显示udp相关选项

  • -e 显示扩展信息,例如uid等

  • -n 拒绝显示别名,能显示数字的全部转化成数字

  • -s 按各个协议进行统计

  • -l 仅列出有在 Listen (监听) 的服務状态

  • -c 每隔一个固定时间,执行该netstat命令

  1. 列出所有端口,包括监听和未监听的:netstat -a

  2. 列出所有TCP端口:netstat -at

  3. 列出所有UDP端口:netstat -au

  4. 列出所有监听状态的TCP端口:该命令最重要用来查看哪个程序占用了哪个网络端口号

$ netstat -nltp
(No info could be read for "-p": geteuid()=1000 but you should be root.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:8855            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:1017            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:19905           0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::3306                 :::*                    LISTEN      - 

防火墙

  • 查看防火墙状态:systemctl status firewalld  如果看到avtive(running)就意味着防火墙开启

  • 关闭防火墙:systemctl stop firewalld 如果看到inactive(dead)就意味着防火墙关闭了

  • 开启防火墙:systemctl start firewalld

以上的开启和关闭,都是临时性的。如果重启,则又恢复原样。默认是开启了防火墙的

如果想永久开启或者关闭(跟重启无关)防火墙,则:

  • 永久关闭防火墙:systemctl disable firewalld

  • 永久开启防火墙:systemctl enable firewalld

$ systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2018-01-22 08:52:03 CST; 2 years 9 months ago
 Main PID: 437 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─437 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

12. Linux用户和组

Linux是一个多任务多用户的操作系统,为了保证系统中文件的安全,必须针对不同级别的用户要设置不同的权限。

账户实质上就是一个用户在系统上的标识,系统依据账户来区分每个用户的文件、进程、任务,给每个用户提供特定的工作环境(如用户的工作目录、shell版本、以及X-Windows环境的配置等),使每个用户的工作都能独立不受干扰地进行。

Linux中的账户包括“用户账户”和 “组账户”

在Linux中,用户是能够获取系统资源的权限的集合,组是权限的容器。

# api.dev或blog 为文件或者目录
# drwxr-xr-x是权限信息
# 第一个root:文件或者目录的所属者
# 第二个root:所属用户组
# Oct  1 最后编辑时间
$ ls -l
total 24
drwxr-xr-x 7 root root 4096 Oct  1  2016 api.dev
drwxr-xr-x 4 root root 4096 Feb 23  2019 blog

用户类型

Linux中的用户类型分为三类:

  1. 超级管理员root:具有使用系统所有权限的用户,其UID 为0

  2. 系统用户:保障系统运行的用户,一般不提供密码登录系统,其UID为1-1000之间

  3. 普通用户:即一般用户,其使用系统的权限受限,其UID为1000往上

与Linux用户信息相关的文件有两个:分别是 /etc/passwd(用户) 和 /etc/shadow(密码)

查看文件/etc/passwd文件的内容,选取第一行:root:x:0:0:root:/root:/bin/bash

  • root:用户名

  • x:密码占位符,密码保存在shadow文件内

  • 0:用户id,UID

  • 0:组id,GID

  • root:注释信息

  • /root:用户home目录/主目录

  • /bin/bash:用户默认使用shell类型

组类型

Linux中的组类型分为三类:

  1. 系统组:一般加入一些系统用户

  2. 普通用户组:可以加入多个普通用户

  3. 私有组/基本组:当创建用户时,如果没有为其指明所属组,则就为其定义一个私有的用户组,起名称与用户名同名,当把其他用户加入到该组中,则其就变成了普通组

与Linux用户组信息相关的文件有两个:分别是 /etc/group(组) 和 /etc/gshadow

查看文件/etc/group文件内容,选取一个普通组行:root:x:0:

  • root:组名

  • x:组密码占位符

  • 0:组id

  • "":其实最后一个":"后面还有值的

用户操作

  1. 添加用户: useradd spark

usermod -G bigdata spark   ## 设置组
usermod -c "mylove spark" spark    ## 添加备注信息
useradd -G bigdata -c “mylove” spark     ## -G附加组,-c注释
  1. 设置密码:passwd spark

  2. 修改用户:

    修改spark登录名:usermod -l spark storm;

    将spark添加到bigdata和root组:usermod -G root,bigdata spark;

    查看spark的组信息:groups spark

  3. 删除用户:userdel -r spark 加一个-r就表示把用户及用户的主目录都删除

组操作

  1. 添加一个叫bigdata的组:groupadd bigdata

  2. 查看系统当前有那些组:cat /etc/group

  3. 将spark用户添加到bigdata组中:

usermod -G bigdata spark  
gpasswd -a spark bigdata
  1. 将spark用户从bigdata组删除:

  2. 将bigdata组名修改为bigspark:

  3. 删除组:groupdel bigdata

配置sudo权限

普通用户和root用户的区别就在于root用户能对系统做任何事,但是普通用户就不行。假如在某些情况下,普通用户想拥有更大的权限做更多的事情,虽然有权限限制,但也不是不可以。部分操作还是可以赋予更高的权限让普通用户做一次。这就需要给普通用户配置root权限了。意思就是让普通用户使用root权限去做一些操作。

用root编辑 vi /etc/sudoers;

在文件的如下位置,为hadoop添加一行即可

root     ALL=(ALL)       ALL     	
hadoop  ALL=(ALL)        ALL

然后,hadoop用户和spark用户就可以用sudo来执行系统级别的指令

$ sudo useradd spark

切换用户

切换用户使用的命令是 su(switch user);

从普通用户切换到root用户:su root 或者 su;

从root用户切换到普通用户:su hadoop;

退出登录:exit;

实际上可以配置为sudo su切换到root用户。

- END -

往期精选

Hive数据聚合

Linux中的SSH协议

Apache Kafka客户端KafkaProducer

7问Impala

Hive数据过滤之分区和分桶

Apache Kafka生产环境集群资源规划与配置

入门Apache Kafka需要了解的方方面面


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK