Linux学习笔记-2

1. VI文本编辑器

学会使用vi编辑器是学习Linux系统的必备技术之一,因为一般的Linux服务器是没有GUI界面的,Linux运维及开发人员基本上都是通过命令行的方式进行文本编辑或程序编写的。vi编辑器是Linux内置的文本编辑器,几乎所有的类unix系统中都内置了vi编辑器,而其它编辑器则不一定,另外很多软件会调用vi编辑进行内容编写,例如crontab定时任务。较之于其它编辑器或GUI编辑器,vi编辑速度是最快的。VIM是它的增强版本,VI有三种基本工作模式,分别是:

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

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

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

1. 最基本用法

1、首先会进入“一般模式”,此模式只接受各种命令快捷键,不能编辑文件内容
2、按i键,就会从一般模式进入编辑模式,此模式下,敲入的都是文件内容
3、编辑完成之后,按Esc键退出编辑模式,回到一般模式
4、再按,进入“底行命令模式”,输入wq命令,回车即可保存退出

2. 移动光标 (一般模式)

1、 使用上下左右键可以移动光标
2、 使用h,j,k,l,依次是向左,下,上,右移动
3、 w:将光标移动到下一个单词的首字母
4、 W:利用空格向后移动光标,就是忽略标点
5、 b:利用word包括标点向前移动光标, 与w相对应
6、 B:利用空格向前移动光标,忽略标点
7、 e:将光标移动到下一个word的尾部,包括符号
8、 E: 将光标移动到下一个空格分隔字的尾部
9、 (:移动到句子开始
10、 ):移动到句子结束
11、 0:移动光标到本句句首
12、 $:移动光标到本行行尾
13、 {:移动到段落开始
14、 }:移动到段落结束
15、 H:屏幕顶端
16、 L:屏幕底端
17、 M:移动到屏幕中央位置
18、 gg:直接跳到文件的首行行首
19、 G:直接跳到文件的末行行首
20、 最强光标移动: % : 匹配括号移动,包括(, {, [.(你需要把光标先移到括号上) *: 匹配光标当前所在的单词,移动光标到下一个匹配单词 #: 匹配光标当前所在的单词,移动光标到上一个匹配单词

重点总结:

  1. h l : 左右, j k : 下上.
  2. w: 下一个单词 , b: 上一个单词.
  3. 0: 本行行首, $: 本行行尾
  4. (: 句子开始, ): 句子结束
  5. {: 段落开始 }: 段落结束
  6. gg: 文件行首 G: 文件行尾
  7. %: 下一个括号 *: 下一个单词 #: 上一个单词

3. 常用操作(一般模式 >> 插入模式)

单位 指令1 指令2
当前位 前一位/后一位 i: 在光标前一位开始插入 a: 光标后一位开始插入
当前行 最前/最后 I: 在该行的最前面插入 A: 在该行的最后插入
当前行 上一行/下一行 o: 小o, 当前行的下一行插入空行 O: 大o, 当前内容下移一行, 当前行插入空行
当前行 删除 dd: 删除当前行 3dd: ndd, 删除从当前行开始的 n行
当前行 复制 yy: 复制光标所在行 3yy: 复制从当前行开始的3行
粘贴 p: 粘贴到光标所在行的下一行
撤销 u: undo 撤销操作, 可一直撤销到最前面

重点总结:

  1. i : 当前光标前开始插入; a: 光标后一位开始插入
  2. I: 在该行的最前面插入; A: 在该行的最后插入
  3. o: 小o, 当前行的下一行插入空行 O: 大o, 当前内容下移一行, 当前行插入空行
  4. dd: 删除当前行 3dd: ndd, 删除从当前行开始的 n行
  5. yy: 复制光标所在行 3yy: 复制从当前行开始的3行
  6. p: 粘贴到光标所在行的下一行
  7. u: undo 撤销操作, 可一直撤销到最前面

4. 查找并替换

在底行命令模式中输入

1. 显示行号 :set nu
2. 隐藏行号 :set nonu
3 .查找关键字 :/you ## 效果:查找文件中出现的you,并定位到第一个找到的地方,按 n可以定位到下一个匹配位置(按N定位到上一个) 查询的时候被匹配上的字符串会被高亮,可以在命令模式下使用:noh取消高亮
4. 直接跳转到 3行 : 3

5. 替换操作

:1 s/sad/bbb 将第一行的第一个sad替换为bbb
:1,5 s/sad/bbb 将第一行到第五行的第一个sad替换为bbb
:1,. s/sad/bbb 将第一行到光标行的第一个sad替换为bbb
:.,$ s/sad/bbb 将光标行到缓冲区最后一行的sad替换为bbb
:s/sad/bbb 查找光标所在行的第一个sad,替换为bbb
:s/sad/bbb/g 查找光标所在行的所有sad,替换为bbb
:%s/sad/bbb 查找文件中所有行第一次出现的sad,替换为bbb
:%s/sad/bbb/g 查找文件中所有的sad,替换为bbb

6. 屏幕翻滚类命令

Ctrl + u:向文件首翻半屏
Ctrl + d:向文件尾翻半屏
Ctrl + f:向文件尾翻一屏
Ctrl+b:向文件首翻一屏
nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部

7. 其它的小技巧

r 替换光标处一个字符
R 进入替换模式,从光标处连续替换
s 删除当前字符,进入插入模式
S 删除当前行,进入插入模式 ≈ dd, dd也会删除当前行, 但是不会进入插入模式
f s 光标行内向后查找第一个出现的字符s (先输f , 再输 s, 向后找 s)
F s 光标行内向前查找第一个出现的字符s (先输F , 再输 s, 向前找 s)
~ 大小写转换,只转换光标处字符

8. 速查网址

9. vim 可视模式, 选中多行

  1. 用小v命令进入的字符可视化模式(Characterwise visual mode)。文本选择是以字符为单位的。
  2. 用大V命令进入的行可视化模式(Linewise visual mode)。文本选择是以行为单位的。
  3. ctrl-V进入的块可视化模式(Blockwise visual mode)。可以选择一个矩形内的文本。(注意:在Windows中,ctrl-V可能已经被影射为粘贴操作,可以使用ctrl-Q进入块可视化模式。)
  4. 重复按一次, 即可取消此模式

2. 网络管理

ifconfig命令

ifconfig命令主要用于配置网络接口,如果不加任何参数,则ifconfig命令用于查看当前所有活动网络接口的状态信息,如下图:

image-20180527221518692

eth0 表示第一块网卡,其中HWaddr表示网卡的物理地址,可以看到目前这个网卡的物理地址(MAC地址)是00:0C:29:D6:C7:0E

inet addr 用来表示网卡的IP地址,此网卡的IP地址是192.168.179.6,广播地址192.168.170.255,掩码地址Mask:255.255.255.0

lo 是表示主机的回坏地址,这个一般是用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口。比如把 httpd服务器的指定到回坏地址,在浏览器输入127.0.0.1就能看到你所架WEB网站了。但只是您能看得到,局域网的其它主机或用户无从知道。

ifconfig其他常用使用

-a 显示所有网络接口,包括停用的
-s 短格式显示网络信息,同netstat -i
-v 显示详细信息,在网络出错的情况下适用
interface 指定网络接口
up 启用网络接口
down 关闭网络接口

启动关闭指定网卡& 常用操作:

1
2
3
4
5
ifconfig eth0 up   #启动网卡
ifconfig eth0 down #关闭网卡
ifconfig #处于激活状态的网络接口
ifconfig -a #所有配置的网络接口,不论其是否激活
ifconfig eth0 #显示eth0的网卡信息

网络配置

1. 三种通信模式

Vmware中的虚拟机和宿主机进行通信有三种网络方式

一、Brigde――桥接:默认使用VMnet0

image-20180609103414766

  1. 原理:

    Bridge 桥”就是一个主机,这个机器拥有两块网卡,分别处于两个局域网中,同时在”桥”上,运行着程序,让局域网A中的所有数据包原封不动的流入B,反之亦然。这样,局域网A和B就无缝的在链路层连接起来了,在桥接时,VMWare网卡和物理网卡应该处于同一IP网段 当然要保证两个局域网没有冲突的IP.

    VMWare 的桥也是同样的道理,只不过,本来作为硬件的一块网卡,现在由VMWare软件虚拟了!当采用桥接时,VMWare会虚拟一块网卡和真正的物理网卡就行桥接,这样,发到物理网卡的所有数据包就到了VMWare虚拟机,而由VMWare发出的数据包也会通过桥从物理网卡的那端发出。

    所以,如果物理网卡可以上网,那么桥接的软网卡也没有问题了,这就是桥接上网的原理了。

      

  2. 联网方式:

    这一种联网方式最简单,在局域网内,你的主机是怎么联网的,你在虚拟机里就怎么连网。把虚拟机看成局域网内的另一台电脑就行了!

    提示:主机网卡处在一个可以访问Internet的局域网中,虚拟机才能通过Bridge访问Internet。

二、NAT――网络地址转换 :默认使用VMnet8

image-20180609103435882

  1. 原理:

    NAT 是 Network address translate的简称。NAT技术应用在internet网关和路由器上,比如192.168.0.123这个地址要访问internet,它的数据包就要通过一个网关或者路由器,而网关或者路由器拥有一个能访问internet的ip地址,这样的网关和路由器就要在收发数据包时,对数据包的IP协议层数据进行更改(即 NAT),以使私有网段的主机能够顺利访问internet。此技术解决了IP地址稀缺的问题。同样的私有IP可以网关NAT 上网。

    VMWare的NAT上网也是同样的道理,它在主机和虚拟机之间用软件伪造出一块网卡,这块网卡和虚拟机的ip处于一个地址段。同时,在这块网卡和主机的网络接口之间进行NAT。虚拟机发出的每一块数据包都会经过虚拟网卡,然后NAT,然后由主机的接口发出。

    虚拟网卡和虚拟机处于一个地址段,虚拟机和主机不同一个地址段,主机相当于虚拟机的网关,所以虚拟机能ping到主机的IP,但是主机ping不到虚拟机的IP。     

  2. 联网方式:

    方法1、动态IP地址。

    主机是静态IP或动态IP,都无所谓,将虚拟机设置成使用DHCP方式上网,Windows下选择“自动获取IP“,linux下开启DHCP服务即可。(这种方法最简单,不用过多的设置,但要在VMware中进行“编辑→虚拟网络设置”,将NAT和DHCP都开启了。一般NAT默认开启,DHCP默认关闭)
      
    方法2、静态IP地址。

    如果不想使用DHCP,也可以手动设置: 

    IP设置与vmnet1同网段,网关设置成vmnet8的网关(在“虚拟网络设置”里的Net选项卡里能找到Gateway)通常是xxx.xxx.xxx.2。
    子网掩码设置与VMnet8相同(设置好IP地址后,子网掩码自动生成)
    DNS设置与主机相同。

    例如:主机IP是10.70.54.31,设置虚拟机IP为10.70.54.22。Netmask,Gateway,DNS都与主机相同即可实现 虚拟机 —主机 虚拟机<---->互联网 通信。

    提示:使用NAT技术,主机能上网,虚拟机就可以访问Internet,但是主机不能访问虚拟机。

三、Host-Only――私有网络共享主机:默认使用VMnet1

image-20180609103453578

  1. 联网方法:

    方法1、动态IP地址。
    像上面那样开启DHCP后,虚拟机直接自动获取IP地址和DNS。就可以和主机相连了。当然,还要进行一些局域网共享的操作,这里不再赘述。

    方法2、静态IP地址。

    也可以手动设置,将虚拟机IP设置与VMnet1同网段,网关设置成VMnet1的网关相同,其余设置与VMnet1相同,DNS设置与主机相同。

    例如:VMnet1 IP:172.16.249.1 Gateway :172.16.249.2
      
    那么虚拟机 IP:172.16.249.100 Gateway: 172.16.249.2
      
    这样、 虚拟机<--->主机 可以通信
    但是、 虚拟机<--->互联网 无法通信

    提示:Host-only技术只用于主机和虚拟机互访,于访问internet无关。

2. NAT网络模式的配置

见Linux学习笔记3, 第8条: Linux虚拟主机集群测试环境基本搭建

3. 其它的常用网络管理命令

  1. ping命令: 常用来测试网络连接是否正常

    先确定能ping通 ping www.baidu.com

  2. host命令: host命令用来进行DNS查询

    然后用host命令可以查看到 host www.baidu.com

    然后通过浏览器访问该地址:119.75.213.61

  3. netstat命令: netstat命令可以显示网络接口的很多统计信息,包括打开的socket和路由表

    以下是常用命令选项

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    -a (all)显示所有选项,默认不显示LISTEN相关

    -t (tcp)仅显示tcp相关选项
    -u (udp)仅显示udp相关选项
    -n 拒绝显示别名,能显示数字的全部转化成数字
    -l 仅列出有在 Listen (监听) 的服務状态

    -p 显示建立相关链接的程序名
    -r 显示路由信息,路由表
    -e 显示扩展信息,例如uid等
    -s 按各个协议进行统计
    -c 每隔一个固定时间,执行该netstat命令

    例子

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

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

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

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

    1
    2
    3
    # 比如查看谁占用了 tcp 的80 端口
    netstat -nltp | grep 80 [23:04:54]
    tcp 0 0 :::80 :::* LISTEN 3890/httpd

4. 防火墙

防火墙根据配置文件/etc/sysconfig/iptables来控制本机的“出、入”网络访问行为

其对行为的配置策略有四个策略表

  1. 基础必备技能

    | 查看防火墙状态 | service iptables status |
    | ———————- | —————————– |
    | 开启防火墙 | service iptables start |
    | 关闭防火墙 | service iptables stop |
    | 关闭防火墙开机自启 | chkconfig iptables off |
    | 设置防火墙开机自启 | chkconfig iptables on |
    | 查看防火墙开机启动状态 | chkconfig iptables –list |

  2. 扩展知识

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    # 1、列出iptables规则
    iptables -L -n
    # 列出iptables规则并显示规则编号
    iptables -L -n --line-numbers

    # 2、列出iptables nat表规则(默认是filter表)
    iptables -L -n -t nat

    # 3、清除默认规则(注意默认是filter表,如果对nat表操作要加-t nat)
    #清除所有规则
    iptables -F

    #重启iptables发现规则依然存在,因为没有保存
    service iptables restart

    #保存配置
    service iptables save

    # 4、禁止SSH登陆(如果服务器在机房,一定要小心)
    iptables -A INPUT -p tcp --dport 22 -j DROP

    # 5、删除规则
    iptables -D INPUT -p tcp --dport 22 -j DROP

    # 6、加入一条INPUT规则开放80端口
    iptables -I INPUT -p tcp --dport 80 -j ACCEPT

3. Linux系统启动级别管理

使用runlevel命令可以查看系统运行的级别

1
2
runlevel                                                           [23:12:37]
N 3

修改系统默认启动级别

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#  启动级别在这个路径查看
vi /etc/inittab
-------------------

# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:

id:3:initdefault: ## 配置默认启动级别

## 通常将默认启动级别设置为:3

4. 用户和组

1. 用户和组的概念

Linux是一个多任务多用户的操作系统,当我们在使用ls -l命令的时候我们看到如下信息:

1
2
3
drwxrwxr-x. 2 root root 4096 5月  24 00:15 test
-rw-r--r--. 1 root root 58 5月 25 11:00 test.sh
-rwxr-xr-x. 1 root root 35 5月 23 23:55 test.txt

test:表示文件或者目录,具体的文件类型是由该行最前面的那个符号表示

1
2
3
4
5
- 当为[ *d* ]则是目录
- 当为[ *-* ]则是文件;
- 若是[ *l* ]则表示为链接文档(link file);
- 若是[ *b* ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
- 若是[ *c* ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置);

drwxrwxr-x :该文件的类型和权限信息

2 :链接数,如果是文件则是1 如果是文件夹则表示该文件夹下的子文件夹个数

第一个root :文件或者目录的所属者**

第二个root :所属用户组**

4096 :文件或者目录的大小,是目录的话一般都是4096

5月 24 00:15:文件的最后编辑时间

通过以上信息得知,每个文件都设计到用户和组的权限问题

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

Linux 用户类型

用户类型 描述
管理员root 具有使用系统所有权限的用户,其UID 为0
系统用户 保障系统运行的用户,一般不提供密码登录系统,其UID为1-499之间
普通用户 即一般用户,其使用系统的权限受限,其UID为500-60000之间.

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

1
2
3
4
5
6
7
8
9
10
11
12
# 查看文件/etc/passwd文件的内容,选取第一行:
root:x:0:0:root:/root:/bin/bash

root:用户名
x:密码占位符,密码保存在shadow文件内
0:用户id,UID
0:组id,GID
root:注释信息
/root:用户家目录
/bin/bash:用户默认使用shell

登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

Linux用户组类型

用户组类型 描述
系统组 一般加入一些系统用户
普通用户组 可以加入多个用户
私有组/基本组 当创建用户时,如果没有为其指明所属组,则就为其定义一个私有的用户组,起名称与用户名同名,当把其他用户加入到该组中,则其就变成了普通组

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

1
2
3
4
5
# 查看文件/etc/group文件内容,选取一个普通组行:
hadoop:x:500:
hadoop:组名
x:组密码占位符
500:组id

2. 用户操作

Linux中的用户管理主要涉及到用户账号的添加、删除和修改。所有操作都影响/etc/passwd中的文件内容

选项
1
2
3
4
5
6
7
8
9
10
11
12
13
-c<备注>:修改用户帐号的备注文字;
-d<登入目录>:修改用户登入时的目录;
-e<有效期限>:修改帐号的有效期限;
-f<缓冲天数>:修改在密码过期后多少天即关闭该帐号;
-g<群组>:修改用户所属的群组;
-G<群组>;修改用户所属的附加群组;
-l<帐号名称>:修改用户帐号名称;

-L:锁定用户密码,使密码无效;
-U:解除密码锁定。

-s<shell>:修改用户登入后所使用的shell;
-u<uid>:修改用户ID;

参数

登录名:指定要修改信息的用户登录名。

  1. 添加用户

    useradd spark

    usermod -G bigdata spark ## 设置组, spark用户添加到bigdata组中

    usermod -c “mylove spark” spark ## -c: 添加备注信息

    一步完成useradd -G bigdata -c “mylove” spark # spark用户添加到bigdata组中, 并设置备注为 mylover

    useradd -u 508 -g 514 -G 1001 user3 添加用户user3时, 指定用户uid 和 主组-g, 附属组-G, 组必须要先存在

    useradd -u(添加的时候修改用户id) 508 -g 514(-g是添加组, 此组号码必须存在)

    指定user4 的家目录

    useradd -u 520 -g 1000 -d /home/user44 user4

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    > > 不创建user4的家目录, user5刚创建的时候, 家就被毁了
    > > `useradd -u 508 -g 1000 -M user6
    > >
    > > 当user6没有家的时候, 这样显示
    > > `bash-4.1$ ....
    > > 此时应该这样操作
    > > cp -v /etc/skel/.b* /home/user6
    > > "/etc/skel/.bash_logout" -> "/home/user6/.bash_logout"
    > > "/etc/skel/.bash_profile" -> "/home/user6/.bash_profile"
    > > "/etc/skel/.bashrc" -> "/home/user6/.bashrc"
    > > su user6
    > > [user6@cts1 shixuanji]$
    > >
    > > --------
    > > 查看进程 ps -au | grep xxx
    > > 杀死进程 kill -9 xxx
    > >
    1
    2
    3
    4
    5
    6
    > > # 不允许用户登录
    > > useradd -u 523 -g 1000 -s /sbin/nologin user7
    > >
    > > # 修改此用户登录权限为 /bin/bash
    > > usermod -s /bin/bash user7
    > >
  2. 设置密码

    passwd spark

    根据提示设置密码即可

    创建密码工具 mkpasswd

    下载: yum -y install expect

    mkpasswd -l 14 创建一个14位数的密码

    mkpasswd -l 15 -s 0: -s是设置特殊符号的长度, 这里是不要特殊符号

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    > ### 修改密码
    > # 此时只需要输入一遍密码
    > passwd --stdin user4
    >
    > # 通过管道可以直接更改
    > echo "123" | passwd --stdin user4
    >
    > # 通过手动输入回车符 `\n` 来实现2遍确认 -e:激活转义字符。
    > echo -e "123\n123\n" | passwd user4
    >
    > =======#额外知识点
    > # 使用echo -e选项时,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
    > \a 发出警告声;
    > \b 删除前一个字符;
    > \c 最后不加上换行符号;
    > \f 换行但光标仍旧停留在原来的位置;
    > \n 换行且光标移至行首;
    > \r 光标移至行首,但不换行;
    > \t 插入tab;
    > \v 与\f相同;
    > \ 插入\字符;
    > \nnn 插入nnn(八进制)所代表的ASCII字符;
    >
    >
  3. 修改用户

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

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

    查看spark的组信息:groups spark

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    > # usermod : usermodify
    > # 使用的参数跟useradd 几乎一样
    >
    > chfn user4 : 修改用户的finger, 电话, 办公室等...
    > # 修改后, 其实这里就是修改的备注选项
    > $ ☞ grep shixuanji /etc/passwd
    > shixuanji:x:500:500:airpoet,sh,110,110:/home/shixuanji:/bin/bash
    >
    > # 修改备注, 这里又把之前改chfn又改了
    > $ ☞ usermod -c "哎呀我去" shixuanji
    > $ ☞ grep shixuanji /etc/passwd
    > shixuanji:x:500:500:哎呀我去:/home/shixuanji:/bin/bash
    >
    >
  4. 删除用户

    userdel -r spark

    加一个-r就表示把用户及用户的家目录, 信箱地址等都删除

  5. 查看用户的信息

    id 用户名

  6. root用户以其他用户的权限执行某条命令

    1
    2
    3
    [~] su -c "touch /tmp/shixuanji.txt" - shixuanji                                                                                   22:32:02
    [~] ls -l /tmp/shixuanji.txt 22:32:25
    -rw-rw-r--. 1 shixuanji shixuanji 0 5月 29 22:32 /tmp/shixuanji.txt

3. 组操作

前面我们知道,组是权限的集合。在linux系统中,每个用户都有一个用户组,没有指定时都默认为私有组,私有组名同用户名一致,建立用户组的好处是系统能对一个用户组中的所有用户的操作权限进行集中管理。组管理涉及组的添加、删除和修改。组的增加、删除和修改实际上就对/etc/group文件的更新

  1. 添加一个叫bigdata的组

    groupadd bigdata

  2. 查看系统当前有那些组

    cat /etc/group

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

    usermod -G bigdata spark

    或者

    gpasswd -a spark bigdata

    这两个命令的区分记忆技巧:

    命令是什么,就证明对什么做操作,所以最后的参数就是命令的操作对象,中间的可选项表示要干嘛

  4. 将spark用户从bigdata组删除

    gpasswd -d spark bigdata

  5. 将bigdata组名修改为bigspark

    groupmod -n bigspark bigdata

  6. 删除组

    groupdel bigdata

4. 为用户配置sudoer权限

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

用root编辑 vi /etc/sudoers

直接用命令 visudo也可以直接编辑此文件

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

root ALL=(ALL) ALL

hadoop ALL=(ALL) ALL

spark ALL=(ALL) ALL

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

[hadoop\@hadoop01 ~]\$ sudo useradd huangxiaoming

1
2
3
4
5
6
7
8
9
> ~ ➤ su shixuanji   # 修改了配置文件之后, 用sudo可以访问root
> [shixuanji@cts1 root]$ sudo /bin/ls /root
> [sudo] password for shixuanji:
> anaconda-ks.cfg date.txt Documents git-2018-05-22 install.log.syslog Music Public Videos
> autojump Desktop Downloads install.log k-vim Pictures Templates wget-log
> [shixuanji@cts1 root]$ ls /root
> ls: 无法打开目录/root: 权限不够
> [shixuanji@cts1 root]$
>

让一个普通用户可以无密码登录到root用户, 还是修改配置文件 /etc/sudoers`

禁止远程登录

修改 vi /etc/ssh/sshd_config 此文件中的 #PermitRootLogin yes 为 no

这样就不能远程 ssh 登录了

查看系统日志

  • 查看登录错误之类的日志 tail /var log/secure

有时候, 登录时, 要过几秒才让输入登录密码

修改 /etc/ssh/sshd_config中的UseDNS=no, 就不会去找DNS了

普通用户免密使用sudo & 免密登录为root

1
2
3
4
5
6
7
8
vi /ect/sudoers
# 设置不需要使用密码使用sudo
ap ALL=(ALL) NOPASSWD: ALL

# 使用 sudo su - 免密登录到root账户
User_Alias USER_SU=ap
Cmnd_Alias SU=/bin/su
USER_SU ALL=(ALL) NOPASSWD: SU

5. 切换用户

在linux的系统使用过程当中,免不了会有多个用户来回切换使用。

所以在此提供切换用户的使用操作:切换用户使用的命令是

su(switch user)

从普通用户切换到root用户 , 需要输密码

su root

su

从root用户切换到普通用户, 不需要输密码

su xxx

5. 文件权限

1、linux文件权限的描述格式解读

Linux用 户分为:拥有者、组群(Group)、其他(other),Linux系统中,预设的情況下,系统中所有的帐号与一般身份使用者,以及root的相关信 息, 都是记录在/etc/passwd文件中。每个人的密码则是记录在/etc/shadow文件下。 此外,所有的组群名称记录在/etc/group

linux文件的用户权限的分析图

1
2
3
4
5
6
  -rw-r--r--   1 user  staff   651 Oct 12 12:53 .gitmodules
# ↑╰┬╯╰┬╯╰┬╯
# ┆ ┆ ┆ ╰┈ 0 其他人
# ┆ ┆ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ g 属组
# ┆ ╰┈┈┈┈ u 属主
# ╰┈┈ 第一个字母 `d` 代表目录,`-` 代表普通文件

d:标识节点类型(d:文件夹 -:文件 l:链接)

r:可读 w:可写 x:可执行

文件 文件夹
r 可读取内容 可以ls
w 可修改文件的内容 可以在其中创建或者删除子节点
x 能否运行这个文件 能否cd**进入这个目录**

2、 修改文件权限

chmod命令 用来变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。

语法

1
2
3
4
5
chmod(选项)(参数)

r=读取属性  //值=4
w=写入属性  //值=2
x=执行属性  //值=1
  1. 选项

    u User,即文件或目录的拥有者;
    g Group,即文件或目录的所属群组;
    o Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围;
    a All,即全部的用户,包含拥有者,所属群组以及其他用户;
    r 读取权限,数字代号为“4”;
    w 写入权限,数字代号为“2”;
    x 执行或切换权限,数字代号为“1”;
    - 不具任何权限,数字代号为“0”;
    s 特殊功能说明:变更文件或目录的权限。

  2. 参数:

    权限模式:指定文件的权限模式;
    文件:要改变权限的文件。

示例

变更 文件/目录 的权限

1
2
3
4
5
6
7
8
9
10
11
# 直接修改
chmod g-rw haha.dat ## 表示将haha.dat对所属组的rw权限取消
chmod o-rw haha.dat ## 表示将haha.dat对其他人的rw权限取消
chmod u+x haha.dat ## 表示将haha.dat对所属用户的权限增加x
chmod a-x haha.dat ## 表示将haha.dat对所用户取消x权限

# 也可以用数字的方式来修改权限(常用)
chmod 664 haha.dat
就会修改成 rw-rw-r--
如果要将一个文件夹的所有内容权限统一修改,则可以-R参数
chmod -R 770 aaa/

变更 文件/目录 的拥有者 或 所属组

1
2
3
4
# <只有root权限能执行>
chown angela aaa ## 改变所属用户
chown :angela aaa ## 改变所属组
chown angela:angela aaa/ ## 同时修改所属用户和所属组

6. 压缩打包

gzip

gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。

gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多处“.gz”扩展名。

  1. 语法

    gzip (选项) (参数)

  2. 选项

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    -a或——ascii:使用ASCII文字模式;
    -d或--decompress或----uncompress:解开压缩文件;
    -f或——force:强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接;
    -h或——help:在线帮助;
    -l或——list:列出压缩文件的相关信息;
    -L或——license:显示版本与版权信息;
    -n或--no-name:压缩文件时,不保存原来的文件名称及时间戳记;
    -N或——name:压缩文件时,保存原来的文件名称及时间戳记;
    -q或——quiet:不显示警告信息;
    -r或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理;
    -S或<压缩字尾字符串>或----suffix<压缩字尾字符串>:更改压缩字尾字符串;
    -t或——test:测试压缩文件是否正确无误;
    -v或——verbose:显示指令执行过程;
    -V或——version:显示版本信息;
    -<压缩效率>:压缩效率是一个介于1~9的数值,预设值为“6”,指定愈大的数值,压缩效率就会愈高;
    --best:此参数的效果和指定“-9”参数相同;
    --fast:此参数的效果和指定“-1”参数相同。
    -num 用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),-9或--best表示最慢压缩方法(高压缩比)。系统缺省值为6。
  3. 参数

    文件列表:指定要压缩的文件列表。

  4. 示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 把test6目录下的每个文件压缩成.gz文件
    gzip *
    # 把上例中每个压缩的文件解压,并列出详细的信息
    gzip -dv *
    # 详细显示例1中每个压缩的文件的信息,并不解压
    gzip -l *
    # 压缩一个tar备份文件,此时压缩文件的扩展名为.tar.gz
    gzip -r log.tar
    # 递归的压缩目录
    gzip -rv test6
    # 这样,所有test下面的文件都变成了.gz,目录依然存在只是目录里面的文件相应变成了.gz.这就是压缩,和打包不同。因为是对目录操作,所以需要加上-r选项,这样也可以对子目录进行递归了。
    # 递归地解压目录
    gzip -dr test6

bzip

bzip2命令 用于创建和管理(包括解压缩)“.bz2”格式的压缩包。

  1. 语法

    bzip2 (选项) (参数)

  2. 选项

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    -c或——stdout:将压缩与解压缩的结果送到标准输出;
    -d或——decompress:执行解压缩;
    -f或-force:bzip2在压缩或解压缩时,若输出文件与现有文件同名,预设不会覆盖现有文件。若要覆盖。请使用此参数;
    -h或——help:在线帮助;
    -k或——keep:bzip2在压缩或解压缩后,会删除原始文件。若要保留原始文件,请使用此参数;
    -s或——small:降低程序执行时内存的使用量;
    -t或——test:测试.bz2压缩文件的完整性;
    -v或——verbose:压缩或解压缩文件时,显示详细的信息;
    -z或——compress:强制执行压缩;
    -V或——version:显示版本信息;
    --repetitive-best:若文件中有重复出现的资料时,可利用此参数提高压缩效果;
    --repetitive-fast:若文件中有重复出现的资料时,可利用此参数加快执行效果。
  3. 参数

    文件:指定要压缩的文件。

  4. 示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ## 压缩指定文件filename:
    bzip2 filename 或 bzip2 -z filename
    ## 解压指定的文件filename.bz2:
    bzip2 -d filename.bz2 或 bunzip2 filename.bz2
    # 压缩解压的时候将结果也输出:
    bzip2 -v filename
    filename: 0.119:1, 67.200 bits/byte, -740.00% saved, 5 in, 42 out.
    # 压缩解压的时候,除了生成结果文件,将原来的文件也保存:
    bzip2 -k filename
    # 解压到标准输出, 输出文件的内容
    bzip2 -dc filename.bz2

tar

Linux下的归档使用工具,用来打包和备份。

首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。

为什么要区分这两个概念呢?这源于Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。

其实最简单的使用 tar 就只要记忆底下的方式即可:

tar.gz 格式:

1
2
3
4
# 一次性打包并压缩、解压并解包
打包并压缩: tar -zcvf [目标文件名].tar.gz [原文件名/目录名]
解压并解包: tar -zxvf [原文件名].tar.gz -C [目标目录]
注:z代表用gzip算法来压缩/解压。

tar.bz2格式:

1
2
3
4
# 一次性打包并压缩、解压并解包
打包并压缩: tar -jcvf [目标文件名].tar.bz2 [原文件名/目录名]
解压并解包: tar -jxvf [原文件名].tar.bz2
注:小写j代表用bzip2算法来压缩/解压。

其实用不到的话就不用看了, 下面的.

  1. 语法

    tar(选项)(参数)

  2. 选项

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    -A或--catenate:新增文件到以存在的备份文件;
    -B:设置区块大小;
    -c或--create:建立新的备份文件;
    -C <目录>:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
    -d:记录文件的差别;
    -x或--extract或--get:从备份文件中还原文件;
    -t或--list:列出备份文件的内容;
    -z或--gzip或--ungzip:通过gzip指令处理备份文件;
    -Z或--compress或--uncompress:通过compress指令处理备份文件;
    -f<备份文件>或--file=<备份文件>:指定备份文件;
    -v或--verbose:显示指令执行过程;
    -r:添加文件到已经压缩的文件;
    -u:添加改变了和现有的文件到已经存在的压缩文件;
    -j:支持bzip2解压文件;
    -v:显示操作过程;
    -l:文件系统边界设置;
    -k:保留原有文件不覆盖;
    -m:保留文件不被覆盖;
    -w:确认压缩文件的正确性;
    -p或--same-permissions:用原来的文件权限还原文件;
    -P或--absolute-names:文件名使用绝对名称,不移除文件名称前的“/”号;
    -N <日期格式> 或 --newer=<日期时间>:只将较指定日期更新的文件保存到备份文件里;
    --exclude=<范本样式>:排除符合范本样式的文件。
  3. 参数

    文件或目录:指定要打包的文件或目录列表。

    -f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。

    1
    2
    3
    4
    5
    - z:有gzip属性的
    - j:有bz2属性的
    - Z:有compress属性的
    - v:显示所有过程
    - O:将文件解开到标准输出
  4. 实例

    1. zip格式
    1
    2
    3
    压缩: zip -r [目标文件名].zip [原文件/目录名]
    解压: unzip [原文件名].zip
    注: -r参数代表递归
    1. tar格式(该格式仅仅打包,不压缩)
    1
    2
    3
    打包:tar -cvf [目标文件名].tar [原文件名/目录名]
    解包:tar -xvf [原文件名].tar
    注:c参数代表create(创建),x参数代表extract(解包),v参数代表verbose(详细信息),f参数代表filename(文件名),所以f后必须接文件名。
    1. tar.gz格式(方式二常用)
    1
    2
    3
    4
    5
    6
    7
    8
    # 方式一:利用前面已经打包好的tar文件,直接用压缩命令。
    压缩:gzip [原文件名].tar
    解压:gunzip [原文件名].tar.gz

    # 方式二:一次性打包并压缩、解压并解包
    打包并压缩: tar -zcvf [目标文件名].tar.gz [原文件名/目录名]
    解压并解包: tar -zxvf [原文件名].tar.gz
    注:z代表用gzip算法来压缩/解压。
    1. tar.bz2格式
    1
    2
    3
    4
    5
    6
    7
    8
    方式一:利用已经打包好的tar文件,直接执行压缩命令:
    压缩:bzip2 [原文件名].tar
    解压:bunzip2 [原文件名].tar.bz2

    方式二:一次性打包并压缩、解压并解包
    打包并压缩: tar -jcvf [目标文件名].tar.bz2 [原文件名/目录名]
    解压并解包: tar -jxvf [原文件名].tar.bz2
    注:小写j代表用bzip2算法来压缩/解压。
    1. jar格式
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    压缩:jar -cvf [目标文件名].jar [原文件名/目录名]
    解压:jar -xvf [原文件名].jar

    # 注:如果是打包的是Java类库,并且该类库中存在主类,那么需要写一个META-INF/MANIFEST.MF配置文件,内容如下:
    Manifest-Version: 1.0
    Created-By: 1.6.0_27 (Sun Microsystems Inc.)
    Main-class: the_name_of_the_main_class_should_be_put_here

    # 然后用如下命令打包:
    jar -cvfm [目标文件名].jar META-INF/MANIFEST.MF [原文件名/目录名] 这样以后就能用“java -jar [文件名].jar”命令直接运行主类中的public static void main方法了。
    1. 7z格式
    1
    2
    3
    4
    5
    压缩:7z a [目标文件名].7z [原文件名/目录名]
    解压:7z x [原文件名].7z
    注:这个7z解压命令支持rar格式,即:

    7z x [原文件名].rar
    1. 其它例子

      参考网址

7. Linux开关机和重启

开机:开机键

关机:shutdown,halt,init 0,poweroff

重启:reboot,init 6

Shutdown命令详解:

shutdown -h now ## 立刻关机

shutdown -h +10 ## 10分钟以后关机

shutdown -h 12:00:00 ##12点整的时候关机

如果帮到你, 可以给我赞助杯咖啡☕️
0%