一、安装与配置

千万不要点击 “我已复制该虚拟机”,会引起MAC地址的冲突,因为每一台linux服务器都有一个MAC地址,如果复制,MAC地址也会被拷贝

可以通过Xshell 进行远程连接

 

node1 node2 node3 在以后做 大数据开发中可以作为三个hadoop节点

现在需要打开 node3 后续会安装 docker应用

为node3设置ip,选择网卡时,可以直接按 Tab 键,自动补全存在的网卡

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33

BOOTPROTO=dhcp    意思是计算机启动时,分配ip 是动态分配,dhcp指动态分配

TYPE=Ethernet

PROXY_METHOD=none

BROWSER_ONLY=no

# BOOTPROTO=dhcp

BOOTPROTO=static

DEFROUTE=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=yes

IPV6_AUTOCONF=yes

IPV6_DEFROUTE=yes

IPV6_FAILURE_FATAL=no

IPV6_ADDR_GEN_MODE=stable-privacy

NAME=ens33

UUID=7bfe3a1c-3e6c-476c-bf7e-4be727e6602c

DEVICE=ens33

ONBOOT=yes

DNS1=192.168.56.2

IPADDR=192.168.56.130

GATEWAY=192.168.56.2

Ip地址每台不同,DNS1和Gateway node1 node2 node3和CentOS 6这些台都是相同的

 

ip地址改完后,需要输入以下命令

[root@localhost ~]# service network restart

就会把修改的配置重新加载,才能成功

 

如果想修改主机名

[root@localhost ~]# vi /etc/sysconfig/network

# Created by anaconda

NETWORKING=yes

HOSTNAME=node3

[root@localhost ~]# vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

:1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.56.130 node3

这样以后就可以不用通过ip访问,而是可以直接通过主机名访问了

 

安装操作系统

● 设置IP:

● VM:编辑>虚拟网络编辑器

● vi/etc/sysconfig/network-scripts/ifcfg-eth0

● 删除UUID和MAC地址

● ONBOOT=yes

● BOOTPROTO=static

● IPADDR=172.16.233.131

● NETMASK-255.255.255.0

● GATEWAY=172.16.233.2

● DNS1=172.16.233.2

● rm-fr/etc/udev/rules.d/70-persistent-net.rules

拷贝虚拟机,MAC地址会改变,刚刚选择已移动,所以vmware自动解决了这个问题,如果是 老版本的vmware或者不小心选择我已复制,则 需要删除规则,使它失效,目前是没有必要用 rm-fr/etc/udev/rules.d/70-persistent-net.rules 处理的

 

● VM:

● 默认维护,每一台克隆,或新建的虚拟机,MAC地址不重复

 

● 如果虚拟机保留/etc/udev/rules.d/70-persistent-net.rrules这个文件,在通过该虚拟机克隆的时候:

● 1.文件被带到新的虚拟机中

● 2.vm变更了新的虚拟机的mac地址

● SO:新机器不能使用eth0接口

● 你配置的/etc/sysconfig/network-scripts/ifcfg-eth0就不能应用

 

● 关闭防火墙&Selinux

● service iptables stop

● chkconfig iptables off

 

● vi/etc/selinux/config

● SELINUX=disabled

● 关机

● 拍摄快照

● 注意:日后,虚拟机一定要用快照克隆

 

二、Linux介绍

Linux概况

Linux简介

什么是Linux

简单地说,Linux是一套免费使用和自由传播的类Unix操作系统,它主要用于基于Intel x86系列CPU的计算机上。其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的Unix兼容产品

 

内核

库:.so共享对象,windows:dll动态链接库,应用程序

Unix是需要付费的

linux命令分为内部命令和外部命令 ,内部命令都在kernel内核中

 

Linux核心

● LINUX的内核:内核是系统的核心,是运行程序和管理像磁盘和打印机等硬件设备的核心程序。

程序启动时,首先主板有一个Bios系统,上面有一小块内存,会把kernel加载进去,kernel在通过各种目录调用linux的功能,比如bash人机交互界面等;把操作系统需要的文件一个又一个的加载到内存里,成为我们的操作系统,操作系统也是一个程序,只是这些程序全都运行在内存里

Win10需要更多的内存运行,所以比win7更吃内存

● LINUX SHELL:Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。

● LINUX文件系统:Linux文件系统是文件存放在磁盘等存储设备上的组织方法。Linux能支持多种目前浒的文件系统,如EXT2、EXT3、FAT、VFAT、ISO9660、NFS、SMB等。

● LINUX应用系统:标准的Linux系统都有一整套称为应用程序的程序集,包括文本编辑器、编程语言、XWindow、办公套件、Internet工具、数据库等。

 

三、Linux简单命令

简单命令

● type:命令类型

● 外部命令 & 内部命令

[root@localhost ~]# type ifconfig

ifconfig 是 /usr/sbin/ifconfig

[root@localhost ~]# cd /sbin

[root@localhost sbin]# ll -l | grep ifconfig

-rwxr-xr-x. 1 root root       82000 8月   3 2017 ifconfig

-rwxr-xr-x. 1 root root        3104 6月  10 2014 pifconfig

type+命令 后,如果返回一个路径,那么这个命令就是外部命令,是通过调用文件系统中的命令启动的

内部命令都是在linux内核里的,比如

[root@localhost sbin]# type echo

echo 是 shell 内嵌

● help:内部命令帮助

● help:内部命令清单,附带语法格式,描述

● help  具体内部命令

通常用于内部命令

● man:帮助手册manual

● yum install man man-pages -y

通常用于外部命令,man也是一个操作文档软件,可以通过 yum install man的方式安装

用type 区分外部命令和内部命令

● whereis:定位命令位置,定位外包命令。

[root@localhost ~]# whereis ifconfig

ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz

[root@localhost ~]# whereis bash

bash: /usr/bin/bash /usr/share/man/man1/bash.1.gz

bash是一个shell程序,一个bash文件可以读取标准输入流,或者从脚本文件进行读取

● file:文件类型

[root@localhost ~]# file /sbin/ifconfig

/sbin/ifconfig: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=dff548da1b4ad9ae2afe44c9ee33c2365a7c5f8f, stripped

ELF相当于windows中的可执行文件

bash可以理解为脚本解释器,相当于linux的脚本解释器,可以把命令写到文件里,通过bash执行

● echo:打印到标准输出

[root@localhost ~]# echo "hello"

hello

● $PATH:环境变量:路径

环境变量是系统中的整体变量,可以理解为全局变量,所有程序,包括shell程序

这里是linux的全局变量,所以程序只要进入linux系统,都能够定义它

[root@localhost ~]# $PATH

-bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin: 没有那个文件或目录

sbin在全局变量中,所以即使不在当前文件夹,ifconfig也可以执行

就是通过环境变量找到文件夹的

linux系统以冒号进行隔离

[root@localhost ~]# echo $aaa

[root@localhost ~]# aaa=66

[root@localhost ~]# echo $aaa

66

这个叫shell变量,输入之后才可以有,但是环境变量相当于java中的全局变量

● $LANG

[root@localhost ~]# echo $LANG

zh_CN.UTF-8

$LANG 也是一个环境变量,表示系统是英(中)文的,同时支持utf-8

 

linux内核通过shell程序(壳)调用bash解释器,bash相当于脚本解释器,会解释用户输入的命令,执行后会在path中给定的目录从左向右进行寻找

外部程序ifconfig能够执行起来就是通过bash解释器执行的程序

空白符用于切割不同的命令

 

[root@localhost ~]# type yum

yum 已被哈希 (/usr/bin/yum)

所以yum 也是一个外部命令,作用是安装

 

[root@localhost ~]# file /usr/bin/yum

/usr/bin/yum: Python script, ASCII text executable

可以看出这是一段python的脚本,进入目录查看一下

 

[root@localhost ~]# vi /usr/bin/yum

#!/usr/bin/python 注入了解释器,#!/,代表注入解释器,以下的程序都用解释器执行

import sys

try:

    import yum

except ImportError:

    print >> sys.stderr, """\

如果是bash解释器执行,同样的是 #!/

 

[root@localhost ~]# yum install man

实际上是调用python文件/usr/bin/yum脚本去指定做相应操作

 

● type yum

● file /usr/bin/yum

● /usr/bin/yum:a /usr/bin/python script text executable

● vi /usr/bin/yum

● #!/usr/bin/python

● ps -fe进程列表

● type ps

● man ps

ps就相当于任务管理器,PID就相当于windows中的进程

[root@localhost ~]# ps

  PID TTY       TIME CMD

 57179 pts/2    00:00:00 bash

 58836 pts/2    00:00:00 ps

如果想查看更多的信息

[root@localhost ~]# ps -ef

UID         PID   PPID  C STIME TTY          TIME CMD

root          1      0  0 08:45 ?        00:00:08 /usr/lib/systemd/systemd --switch

root          2      0  0 08:45 ?        00:00:00 [kthreadd]

……

……

 

[root@localhost ~]# type ps

ps 已被哈希 (/usr/bin/ps)

ps也是一个外部命令,所以可以输入man ps查看

 

● echo

● type echo

● help echo

● echo hello

 

变量

● a=3

● echo $a

[root@localhost ~]# a=3

[root@localhost ~]# echo $a

3

[root@localhost ~]# echo $a=3

3=3

● b=(1,2,3)

● echo $b

[root@localhost ~]# b=(1,2,3)

[root@localhost ~]# echo $b

1,2,3

 

● b=(1 2 3)

● echo $b

● echo ${b[2]}

[root@localhost ~]# b=(1 2 3)

[root@localhost ~]# echo $b

1

[root@localhost ~]# echo $b[2]

1[2]

[root@localhost ~]# echo ${b[2]}

3

因为linux默认识别空格为分隔符,逗号是不行的。所以 b=(1 2 3)相当于输入了三个数,就是一个数组了,echo $b[2]的结果是1[2],相当于是把 1 和 [2]连接起来的,并不认为b[2]是一个数组,用大括号标注起来,相当于做一个转义,整个作为一个变量

linux是从左到右,一个一个解释的

 

● echo hello$agod

● echo hello${a}god

[root@localhost ~]# echo hello$agod

hello

[root@localhost ~]# echo $a

3

a有值,echo hello$agod 只打出了hello,因为把 agod整体当成了一个变量,但是agod是没有值得

[root@localhost ~]# echo hello${a}god

hello3god

${a}表示a是一个变量名传给$

 

● unset myurl

如果给一个变量赋值后,想要取消掉,unset系统中就没有这个变量了,可以通过这种方式取消变量

[root@localhost ~]# myurl=baidu

[root@localhost ~]# echo $myurl

baidu

[root@localhost ~]# unset myurl

[root@localhost ~]# echo $myurl

 

[root@localhost ~]#

 

● echo $$ 当前shell的PID

[root@localhost ~]# echo $$

57179 → 这是一个 PID,当前shell的PID

shell也是一个程序,shell连接kernel和应用程序

既然是程序,就有一个自己的PID

通过两个不同的shell,相当于 两个接入点访问,就会有两个PID

● ps -fe

● bash

● whereis bash

● /bin/bash

● shell脚本第一行的定义~!

shell脚本第一行,#和!的意义就相当于使用bin/bash去实现

 

● PATH:windows。linux:环境变量

● 记录查询执行命令所在的路径

● 分割:

● hash -r清除缓存

[root@localhost ~]# hash

命中 命令

   3 /usr/bin/file

   6 /usr/bin/ps

   4 /usr/bin/whereis

   2 /usr/bin/yum

   1 /usr/bin/vi

   2 /usr/bin/man

相当于把应用程序调到内存中

● shell:对于命令查找的方式,在PATH记录的目录中查找,缓存到内存hash中

这样下次不用从linux系统中查找,直接在hash缓存中查找

 

● man

● 1:用户命令(/bin,/usr/bin,/usr/local/bin)

● 2:系统调用

● 3:库用户

● 4:特殊文件(设备文件)

● 5:文件格式(配置文件的语法)

● 6:游戏

● 7:杂项(Miscellaneous)

● 8:管理命令(/sbin,/usr/sbin,//usr/local/sbin)

● shell,bash:程序

● /etc/profile是bash的配置文件

● source/etc/profile   相当于加载了配置文件,把更改的东西加载到上面

 

四、文件系统命令

文件系统命令

● 文件权限:9位,每3位一组,3组权限(U,G,0)每一组:rwx(读,写,执行),r--

U User G Group O Other

[root@localhost ~]

User是root 组也就是root组,Other是除了root以外的其他的任何用户

[root@localhost etc]# ls -l

总用量 1368

drwxr-xr-x.  3 root root      101 2月   4 06:01 abrt

-rw-r--r--.  1 root root       16 2月   4 06:12 adjtime

-rw-r--r--.  1 root root     1518 6月   7 2013 aliases

-rw-r--r--.  1 root root    12288 2月   4 06:27 aliases.db

drwxr-xr-x.  2 root root       51 2月   4 06:02 alsa

……

……

rw- 给当前用户 r-- 给group组 后面的r-- 是给其他用户的

-rw-r--r--.  1 root root    数字 1 1 1 2 代表被引用的次数,被软(硬)连接的次数

相当于一个文件建一个快捷方式

1 后面的两个root分别代表所属的用户和所属组

在往后是创建时间和文件名

 

● 文件硬链接的次数

● 文件的属主(owner)

● 文件的属组(group)

● 文件大小(size),单位是字节

● 时间戳(timestamp):最近一次被修改的时间

● 访问:access

● 修改:modify,文件内容发生了改变

● 改变:change,metadata,元数据

ls 查询,前面是d的为目录,前面是 -的为文件

 

● Filesystem Hierarchy Standard(文件系统层次化标准)

● /boot:系统启动相关的文件,如内核、initrd,以及grub(bootloader)

● /dev:设备文件

[root@node3 dev]# df -h

文件系统                 容量  已用  可用 已用% 挂载点

/dev/mapper/centos-root   17G  7.5G  9.5G   45% /

……

/dev/sda1               1014M  157M  858M   16% /boot

/dev/sr0                 4.2G  4.2G     0  100% /run/media/root/Cen

/dev/mapper/centos-root /dev/sda1 可以理解为分区的概念

设备文件就是指磁盘的设备文件

● /etc:配置文件

系统启动时会调用一些配置文件

● /home:用户的家目录,每一个用户的家目录通常默认为/home/USERNAME

除了root用户,root用户在root目录下;在home下可以创建多个用户

每个用户的文件夹都是隔离的,不同的用户之间不能访问

从root权限退到普通用户,不需要输入密码

[root@node3 ~]# su wm01

[wm01@node3 root]$ pwd

/root

[wm01@node3 root]$ cd ~

[wm01@node3 ~]$ pwd

/home/wm01

[wm01@node3 ~]$ cd ..

[wm01@node3 home]$ cd wm02

bash: cd: wm02: 权限不够

cd ~ 直接进入家目录,不同的用户是隔离开的

 

● /root:管理员的家目录;

● /lib:库文件

● /media:挂载点目录,移动设备

● /mnt:挂载点目录,额外的临时文件系统

● /opt:可选目录,第三方程序的安装目录

比如nginx可以安装在这里

● /proc:伪文件系统,内核映射文件

linux一切皆为文件,所以进程相关的文件都会在这里

[root@node3 ~]# cd /proc/$$ 进入当前进程

[root@node3 66448]# ls

attr             cwd       map_files   oom_adj        schedstat  task

autogroup        environ   maps        oom_score      sessionid  timers

cgroup           fd        mountinfo   pagemap        smaps      wchan

……

[root@node3 66448]# cd fd

[root@node3 fd]# ls

0  1  2  255

0代表输入输出和错误

 

● /sys:伪文件系统,跟硬件设备相关的属性映射文件

● /tmp:临时文件,/var/tmp

● /var:可变化的文件     一般会把日志文件放在这里

● /bin:可执行文件,用户命令

● /sbin:管理命令

 

● df:显示磁盘使用情况

[root@node3 ~]# df -h 显示disk的分配情况

● du:显示文件系统使用情况

切换用户无需退出操作系统,可以用 su 进行切换,su代表switch user 切换用户

[root@node3 var]# du -h

h代表human,人类,就是human readable

s代表summary,总结

linux是多人共用的,磁盘越来越少的情况下,查看文件夹使用是否超量

就可以用 du -sh ./* 对当前目录所有文件进行总结查找

./代表当前目录,*代表所有的

[root@node3 var]# du -sh ./*

0 ./account

0 ./adm

3.3M ./cache

0 ./crash

8.0K ./db

0 ./empty

……

[root@node3 ~]# du -sh

4.2G .

[root@node3 ~]# cd /var

[root@node3 var]# du -sh

111M .

如果想查特定的文件夹,可以 du -sh /文件夹名

[root@node3 var]# du -sh /root

4.2G /root

 

[root@node3 var]# type du

du 已被哈希 (/usr/bin/du) 存在路径,所以 du 也是一个外部程序

● ls:显示目录

● cd:切换工作目录 Linux 的目录要加 / 直接跳是跳不过去的

[root@node3 ~]# cd /

[root@node3 /]# cd /etc/sysconfig/

[root@node3 sysconfig]# cd ..

[root@node3 etc]# cd - 如果不小心返回上层,可以用这种方式进入

/etc/sysconfig

[root@node3 sysconfig]# pwd

/etc/sysconfig

 

[root@node3 sysconfig]# cd ~    回到家目录,root回到root,其余用户回到home

[root@node3 ~]# pwd

/root

[root@node3 ~]# cd /

[root@node3 /]# pwd

/

 

● pwd:显示当前工作目录

● mkdir:创建目录

在当前目录,深度创建目录;./代表当前目录

[root@node3 ~]# mkdir -p ./em/db/v8

也可以水平创建目录,可以用变量的方式实现

[root@node3 ~]# mkdir abc

[root@node3 ~]# mkdir ./abc/{x,y,z}dir

[root@node3 ~]# cd abc

[root@node3 abc]# ls

xdir  ydir  zdir

 

● rm:删除

● cp:拷贝

● mv:移动

● ln:链接

● stat:元数据

● touch

● mkdir:创建目录

● mkdir -p./a/b/c

● mkdir a/{1,2,3}dir

● rm:删除

● rm -f

● rm -rf /

-rf r recursive f force

-r 会出现交互式提示

-rf 强制删除,不会出现交互式提示

[root@localhost tmp]# rm profile

rm:是否删除普通文件 "profile"?y

● cp:拷贝

● cp/etc/{profile,inittab} ./

● cp -r./a./new

● cp -l cp-s

当前目录下的文件需要加 点. ./代表当前目录

[root@localhost etc]# cp ./profile /tmp

[root@localhost etc]# cd /tmp

[root@localhost tmp]# ls

profile

……

如果拷贝目录,需要加 -r,有一个循环的意思,目录下面还有目录;拷贝目录不需要加 ./

[root@localhost em]# cp -r nginx /tmp

[root@localhost em]# cd /tmp

[root@localhost tmp]# ls

nginx

……

● mv:移动

其实就是剪切的意思,移动经常有两个用途,改名或者移动到另一个文件夹

现在给nginx 改名

[root@localhost tmp]# mv nginx nginx1

[root@localhost tmp]# ls

nginx1

ssh-4Bij5yBn3SJl

……

把 nginx1 移动到别的目录

[root@localhost tmp]# mv nginx1 /opt/em

[root@localhost tmp]# cd /opt/em

[root@localhost em]# ls

em1  nginx  nginx1

[root@localhost em]# rm -rf nginx1

[root@localhost em]# ls

em1  nginx

 

● ln:链接

● ln默认硬链接ln install.log wm.txt 就会生成 wm.txt文件

● ln -s 软链接 ln -s wm.txt bjwm.log

前面的数字 272678 等,叫做索引号,可以理解为在磁盘上的位置

数字相同可以 理解为两个引用变量指向同一个对象

-rw-r--r--. 2   后面的数字2 是同一个索引号被引用的次数

 

[root@localhost ~]# ll -li

总用量 8

33574978 -rw-------. 1 root root 1523 1月  25 15:15 anaconda-ks.cfg

33574987 -rw-r--r--. 1 root root 1571 1月  25 15:24 initial-setup-ks.cfg

……

[root@localhost ~]# ll -l

总用量 8

-rw-------. 1 root root 1523 1月  25 15:15 anaconda-ks.cfg

-rw-r--r--. 1 root root 1571 1月  25 15:24 initial-setup-ks.cfg

……

ll -li 可以把索引号显示出来

硬链接后,改变一个文件的内容,另一个文件的内容也会跟着改变,类似于快捷方式

不加参数项默认硬链接

加上 -s 是软链接,执行链接的文件就相当于执行很深层的文件;不需要在同一目录下操作

 

[root@localhost ~]# ln -s em.txt infmajem.log

[root@localhost ~]# ll -l

总用量 8

-rw-------. 1 root root 1523 1月  25 15:15 anaconda-ks.cfg

lrwxrwxrwx. 1 root root    6 2月   6 12:38 infmajem.log -> em.txt

-rw-r--r--. 1 root root 1571 1月  25 15:24 initial-setup-ks.cfg

……

硬链接各自是各自的,并没有谁指向谁,可以彼此理解为是一个变量,都指向统一的位置

软连接存在一种依赖关系,两个文件的索引号不同,相当于新生成了一个值,相当于创建一个快捷方式,如果把源删掉,快捷方式也会不好使

红色的意思是在报警找不到源,所以无法链接

 

• 元数据

元数据指描述文件或者数据的数据

• stat

stat用于描述 profile

[root@localhost ~]# cd /etc

[root@localhost etc]# stat profile

  文件:"profile"

  大小:1819       块:8          IO 块:4096   普通文件

设备:fd00h/64768d Inode:16787062    硬链接:1

权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)

环境:system_u:object_r:etc_t:s0

最近访问:2021-02-06 04:14:17.982017594 +0800

最近更改:2018-04-11 12:18:26.000000000 +0800

最近改动:2021-01-25 15:06:21.110000857 +0800

profile 是交互外壳启动时的配置文件,stat profile能够看到修改情况或者访问

开发的时候一般不会给root权限,只有系统管理员有系统root权限

 

|是管道相当于把文件通过管道传到另一个命令上,linux以空格切割命令

一个输入流通过管道输入到另一个命令上面

[root@localhost etc]# cat profile | more

 

• touch

可以创建文件

[root@localhost em]# ls

nginx

[root@localhost em]# touch test

[root@localhost em]# ls

nginx  test

touch后面可以跟路径,能够指定路径创建

[root@localhost em]# touch /opt/shell/tst 

 

©著作权归作者所有:来自51CTO博客作者ATaburiss的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 查找命令汇总
  2. Linux运维入门教程04-01 (用户、群组和权限)
  3. Linux文件管理——文件查找、打包及压缩【CentOS】
  4. Linux存储管理——EXT4文件系统【CenOs】
  5. Linux重定向管道——双通、三通管道一篇学会【CenOs】
  6. Linux 下CentOS文件管理、用户管理及权限,一篇学会
  7. Linux切换图形界面与命令界面【CentOS】
  8. python操作Excel文件报lrd.biffh.XLRDError
  9. 编写迷你版MVC小框架具体步骤以及心得体会

随机推荐

  1. MySql反向模糊查询
  2. 如何创建a '。sql的文件
  3. MYSQL5.5和5.6参数的差异
  4. 在MySQL数据库中存储无法访问的用户
  5. MySQL很有用的命令
  6. MySQL查询中的变量会导致错误
  7. mysql字符集浅谈
  8. 反驳"MySQL InnoDB (不行)的性能问题",千
  9. 在同一列上选择多个条件
  10. MYSQL必知必会-SQL语句查询