Linux 基础

Linux 开始

虚拟机 Linux 准备工作

Linux 安装步骤

  • 选择稍后安装

  • 网络类型选择 NAT

  • 修改最大磁盘大小(这里最大磁盘大小指给虚拟机分配的,但不真正使用不是这么多)

注意: Linux 版本根据自己的Linux 版本选择。列如:我这用的是 CentOS-6.5-x86_64-minimal.iso,

所以选择 Linux 版本时选择时 Centos 64位

  • 添加 ISO 镜像文件,之后开启虚拟机即可

    1. 选择编辑虚拟机设置

​ 2. 挂载 iso 镜像文件

  • 虚拟机安装配置(若特殊说明,则选择默认即可)

    • 跳过磁盘检查,否则磁盘检查时间会很长

    • 语言、键盘都选择英文即可。

    • 选择第一个

    • 选择 yes,discard any data

    • 自定义 Linux 虚拟机名称

    • 选择时区

    • 密码设置要简单、透明(大家都知道的,不属于个人重要密码)

    • 自定义磁盘分区

注意事项:

  1. VM 安装选择自定义安装,便于之后的自定义硬件配置(如:磁盘大小等)
  2. 语言、键盘都选择英文
  3. 时区选择亚洲/上海
  4. 密码设置要简单透明
  5. 磁盘需要手动分区 boot(200MB) swap(2G) /(剩余所有)

Linux 静态 IP 设置

# 设置静态 IP
# 编辑   vi   /etc/sysconfig/network-scripts/ifcfg-eth0
[root@node01 network-scripts]# cd /etc/sysconfig/network-scripts/
[root@node01 network-scripts]# vi ifcfg-eth0 # ifcfg-eth0 网卡配置,使用打开后编辑,
# ONBOOT=on 开机自启
# BOOTPROTO=static 表示 IP 使用静态IP
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.170.101
NETMASK=255.255.255.0
GATEWAY=192.168.170.2
DNS1=144.144.144.144
DNS2=8.8.8.8# 删除 rm -f 70-persistent-net.rules
# 70-persistent-net.rules  该文件的作用是将 IP 地址与 MAC 地址绑定
[root@node01 etc]# cd /etc/udev/rules.d/
[root@node01 rules.d]# ll
total 16
-rw-r--r--. 1 root root 316 Nov 22  2013 60-raw.rules
-rw-r--r--. 1 root root 789 Sep 21 19:33 70-persistent-cd.rules
-rw-r--r--. 1 root root 420 Sep 21 19:28 70-persistent-net.rules
-rw-r--r--. 1 root root  54 Dec  8  2011 99-fuse.rules
[root@node01 rules.d]# rm -f 70-persistent-net.rules # 关机
poweroff # 修改主机名
[root@node01 ~]# vi /etc/sysconfig/network
# 编辑 network 文件
NETWORKING=yes
HOSTNAME=node01
Linux 网络配置文件位置
文件位置 文件作用说明
/etc/sysconfig/network-scripts/ifcfg-eth0 配置静态 IP 地址
/etc/udev/rules.d/70-persistent-net.rules 将 IP 地址与 MAC 地址绑定
/etc/sysconfig/network 配置主机名

使用 VM 软件 记录快照

Linux 关机和重启命令

关机 重启
poweroff reboot
init 0 init 6

Linux 常用命令

命令 作用
ls 显示目录内容 ll --i
pwd 显示当前目录的绝对路径
cd 切换目录
mkdir 文件夹 -p {}
cp 复制 -r
mv 移动
touch 创建文件夹、文件
type 命令名 查看指定命令的文件的存放位置 外部命令 & 内部命令
cat 查看文件内容
file 查看文件详细信息 (ELF 表示二进制文件)
echo 回声,打印标椎输出
echo $PATH 查看环境变量路径
echo $$ 当前shell的PID
help 查看内部命令
man 查看外部命令命令
whereis 定位命令位置
hash 查看 hash 表
ps -ef 查看当前进程信息
df -h 显示文件系统使用情况[甩锅]
du -h 查看某种文件使用状况[甩锅]
mount/unmout 挂载/卸载磁盘文件

ls 命令

文件类型:
-:普通文件 (f)
d: 目录文件

​ b: 块设备文件 (block)
​ c: 字符设备文件 (character)

​ l: 符号链接文件(symbolic link file)

​ p: 命令管道文件(pipe)
​ s: 套接字文件(socket)
文件权限:9位,每3位一组,3组 权限(U,G,O)每一组:rwx(读,写,执行), r–
文件硬链接的次数
文件的属主(owner)
文件的属组(group)
文件大小(size),单位是字节
时间戳(timestamp):最近一次被修改的时间
​ 访问:access
​ 修改:modify,文件内容发生了改变
​ 改变:change,metadata,元数据

使用 ls 同时展示多个目录

[root@node01 god]# ls ~  /usr/local
/root:
anaconda-ks.cfg  install.log  install.log.syslog/usr/local:
bin  etc  games  include  lib  lib64  libexec  sbin  share  src

使用 mkdir 命令同时创建多个文件夹

[root@node01 c]# mkdir Hello/{a,b,c}A -p
[root@node01 c]# ll
total 4
drwxr-xr-x. 5 root root 4096 Sep 22 00:45 Hello
[root@node01 c]# cd Hello
[root@node01 Hello]# ll
total 12
drwxr-xr-x. 2 root root 4096 Sep 22 00:45 aA
drwxr-xr-x. 2 root root 4096 Sep 22 00:45 bA
drwxr-xr-x. 2 root root 4096 Sep 22 00:45 cA

查看文件系统和文件使用情况

[root@node01 /]# du -h /etc/udev
4.0K    /etc/udev/makedev.d
20K /etc/udev/rules.d
32K /etc/udev
[root@node01 /]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        97G  842M   91G   1% /
tmpfs           491M     0  491M   0% /dev/shm
/dev/sda1       194M   28M  157M  15% /boot
/dev/sr0        398M  398M     0 100% /mnt

使用硬链接和软链接

  • 硬链接类似于拷贝,即使原文件被删除了,硬链接生成文件仍可使用
ln --l  原文件名 硬链接文件名
  • 软链接,原文件删除了,软链接生成文件不可使用
ln -s 原文件名 软链接文件名

安装 man 命令

yum install man man-pages

Linux命令执行流程

​ 用户通过客户端命令行输入命令以及命令参数, bash 解释器会根据空白符切割,得到的第一个元素,作为命令 command。通过判断该 command 命令是外部命令还是内部命令,若内部命令,则由 bash 执行器直接执行。若是外部命令,则 根据 $PATH 中给定的目录中从左向右寻找该命令文件的可执行程序文件,然后由 bash 执行器执行。

[root@node01 ~]# type ls
ls is aliased to `ls --color=auto'
[root@node01 ~]# type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
[root@node01 ~]# type ifconfig
ifconfig is /sbin/ifconfig
[root@node01 ~]# file /sbin/ifconfig
/sbin/ifconfig: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
[root@node01 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@node01 ~]# type yum
yum is hashed (/usr/bin/yum)
[root@node01 ~]# file /usr/bin/yum
/usr/bin/yum: a /usr/bin/python script text executable

小技巧:使用 xshell 登录 Linux ssh root:123456@192.168.170.101

ssh 用户名:密码@IP地址

Linux 文件系统

boot 目录的挂载与卸载

[root@node01 /]# umount /boot
[root@node01 /]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        97G  842M   91G   1% /
tmpfs           491M     0  491M   0% /dev/shm
[root@node01 /]# mount /dev/sda1 /boot
[root@node01 /]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        97G  842M   91G   1% /
tmpfs           491M     0  491M   0% /dev/shm
/dev/sda1       194M   28M  157M  15% /boot

File System Hierarchy Standard

文件系统层次化标准

目录
/boot 系统启动相关的文件,如内核、initrd,以及grub(bootloader)
/dev 设备文件
/etc 配置文件
/home 用户的家目录,每一个用户的家目录通常默认为/home/USERNAME
/root 管理员的家目录
/lib 库文件
/media 挂载点目录,移动设备
/mnt 挂载点目录,额外的临时文件系统
/opt 可选目录,第三方程序的安装目录
/proc 伪文件系统,跟硬件设备相关的属性映射文件
/sys 临时文件, /var/tmp
/tmp 可变化的文件
/bin 可执行文件, 用户命令
/sbin 管理命令

系统启动必须:

  • **/boot:**存放的启动Linux 时使用的内核文件,包括连接文件以及镜像文件。

  • /etc:存放所有的系统需要的配置文件和**子目录列表,**更改目录下的文件可能会导致系统不能启动。

  • /lib:存放基本代码库(比如c++库),其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。

  • /sys: 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中

指令集合:

  • **/bin:**存放着最常用的程序和指令

  • **/sbin:**只有系统管理员能使用的程序和指令。

外部文件管理:

  • **/dev :**Device(设备)的缩写, 存放的是Linux的外部设备。**注意:**在Linux中访问设备和访问文件的方式是相同的。

  • /media:类windows的**其他设备,**例如U盘、光驱等等,识别后linux会把设备放到这个目录下。

  • /mnt:临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。

临时文件:

  • /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。

  • /lost+found:一般情况下为空的,系统非法关机后,这里就存放一些文件。

  • /tmp:这个目录是用来存放一些临时文件的。

账户:

  • /root:系统管理员的用户主目录。

  • /home:用户的主目录,以用户的账号命名的。

  • /usr:用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。

  • **/usr/bin:**系统用户使用的应用程序与指令。

  • **/usr/sbin:**超级用户使用的比较高级的管理程序和系统守护程序。

  • **/usr/src:**内核源代码默认的放置目录。

运行过程中要用:

  • /var:存放经常修改的数据,比如程序运行的日志文件(/var/log 目录下)。

  • /proc:管理**内存空间!**虚拟的目录,是系统内存的映射,我们可以直接访问这个目录来,获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件来做修改。

扩展用的:

  • /opt:默认是空的,我们安装额外软件可以放在这个里面。

  • /srv:存放服务启动后需要提取的数据**(不用服务器就是空)**

挂载 cdrom 到 /mnt 目录下

mount /dev/cdrom  /mnt

文本操作命令

command 作用
cat 显示全部文本文件内容
more 逐页显示文本文件内容
less 一次性读取全部文件内容,相比more,可以往回看
head 显示前 n 行的内容
tail 显示后 n 行的内容
| 管道
xargs

使用 head 和 tail 命令遍历每行

[root@node01 god]# cat profile | head -3 | tail -1
# System wide environment and startup programs, for login setup

xargs 用法

[root@node01 god]# echo "/"  |xargs ls -l
total 90
dr-xr-xr-x.  2 root root  4096 Sep 21 19:29 bin
dr-xr-xr-x.  5 root root  1024 Sep 21 19:29 boot
drwxr-xr-x. 18 root root  3680 Sep 21 22:21 dev
# ....

vi 全屏文本编辑器

打开方式

vim /path/to/somefile
vim +# :打开文件,并定位于第#行
vim +:打开文件,定位至最后一行
vim +/PATTERN : 打开文件,定位至第一次被PATTERN匹配到的行的行首

关闭文件

末行模式:
:q  退出  没有动过文件
:wq 保存并退出   动过了,不后悔
:q! 不保存并退出  动过了,后悔了
:w 保存
:w! 强行保存
:wq --> :xZZ: 保存并退出   不需要冒号,编辑模式   # 重点*

三种模式

按键具有编辑文本功能:默认打开进入编辑模式
输入模式:按键本身意义
末行模式:接受用户命令输入

  • 编辑模式

    #编辑-->输入:i: 在当前光标所在字符的前面,转为输入模式;*a: 在当前光标所在字符的后面,转为输入模式;*o: 在当前光标所在行的下方,新建一行,并转为输入模式;O:在当前光标所在行的上方,新建一行,并转为输入模式;    I:在当前光标所在行的行首,转换为输入模式A:在当前光标所在行的行尾,转换为输入模式输入-->编辑:
    ESC
    #编辑-->末行:
    :
    #末行-->编辑:
    ESC, ESC
    #移动光标
    字符
    h: 左;j: 下;k: 上;l: 右
    # 单词
    w: 移至下一个单词的词首*
    e: 跳至当前或下一个单词的词尾
    b: 跳至当前或前一个单词的词首
    # 行内
    0: 绝对行首
    ^: 行首的第一个非空白字符*
    $: 绝对行尾*
    # 行间
    G:文章末尾
    3G:第3行
    gg:文章开头
    # 翻屏
    ctrl:f,b# 删除&替换单个字符
    x:删除光标位置字符
    3x:删除光标开始3个字符
    r:替换光标位置字符
    # 删除命令 : d
    dw,dd
    # 复制粘贴&剪切
    yw(复制一个词),yy(复制一行)
    p(向下粘贴)
    P(向上粘贴)
    # 撤销&重做
    u   撤销*
    ctrl+r  重做 撤销的操作*.  重复上一步的操作
    
  • 末行模式 (进入末行模式 shirt+: )

    set:设置
    set nu  number
    set nonu nonumber
    set readonly/:查找
    /after
    n(向下查找),N(向上查找)
    ?向上查找
    !:执行命令
    :!ls -l /s查找并替换
    s/str1/str2/gi
    /:临近s命令的第一个字符为边界字符:/,@,#
    g:一行内全部替换(若没有选择,则替换当前行的第一个替换)
    i:忽略大小写
    范围
    n:行号
    .:当前光标行
    +n:偏移n行
    $:末尾行,$-3
    %:全文# 替换查找从当前光标处,到文件末尾处
    eg: .,$s/str1/str2/gi
    

末行模式小技巧

编辑模式下 :
:Gd  清空内容
:.,$d 删除从当前光标到末尾所有行
:n,md 删除从第 n 行到 m 行的所有内容
:n,my 复制从第 n 行到 m 行的所有内容

正则表达式

grep:显示匹配行
- v:反显示
- e:使用扩展正则表达式匹配操作符
\                  转义字符
.                    匹配任意单个字符
[1249a],[^12],[a-k]  字符序列单字符占位
^                 行首
$                  行尾
\<,\>:\<abc           单词首尾边界*
|                   连接操作符
(,)              选择操作符
\n           反向引用重复操作符:
?       匹配0到1次。
*       匹配0到多次。
+      匹配1到多次。
{n}     匹配n次。
{n,}    匹配n到多次。
{n,m}      匹配n到m次。
与扩展正则表达式的区别:grep basic
\?, \+, \{, \|, \(, and \)
匹配任意字符
.*

注意:在未扩展正则表达式时,若匹配规则中含有 ?,+,{,},|,(,) ,都需要通过 \ 转义,否则匹配不到

查询文章中包括4位整数的行

grep -E  "([^0-9][0-9]|^[0-9])([0-9]{2})([0-9][^0-9]|[0-9]$)"  grep.txt

查看指定单词

grep “\<单词名\>”  file

反向引用

[root@node01 god]# grep  -E ".*(god).*(good).*\2.*\1" test
asgodssgoodsssagoodssgod
[root@node01 god]# grep  -E ".*(god).*(good).*\1.*\2" test
asgodssgoodsssagodssgood

文本处理

cut 命令

cut:显示切割的行数据
f:选择显示的列
s:不显示没有分隔符的行
d:自定义分隔符

测试

[root@node01 god]# cut -d' ' -s  -f1-3 grep.txt
ooxx 12121212
oox 12121212
1212 ooxx 1212
[root@node01 god]# cut -d' ' -f1,2,3 grep.txt
ooxx12121212ooxx
ooxx 12121212
oox 12121212
1212 ooxx 1212
oo3xx
oo4xx
ooWxx
oomxx
$ooxx
oo1234xx
ooxyzxx

sort命令

sort:排序文件的行
n:按数值排序
r:倒序
t:自定义分隔符
k:选择排序列
u:合并相同行
f:忽略大小写
[root@node01 god]# sort  -k2 -n -r  fruits.txt
orange--27
banana--15
apple--20
apple--20
[root@node01 god]# sort  -k2 -n -r fruits.txt

wc 命令

wc 打印每个文件的换行数、单词数和字节数
[root@node01 god]# wc fruits.txt 4  4 42 fruits.txt
[root@node01 god]# cat fruits.txt | wc4       4      42
[root@node01 god]# cat fruits.txt | wc -l
4

统计当前目录中文件的个数

ls ./ | wc

行编辑器

sed 命令

sed [options] 'AddressCommand' file ...-n: 静默模式,不再默认显示模式空间中的内容-i: 直接修改原文件*-e SCRIPT -e SCRIPT:可以同时执行多个脚本-f /PATH/TO/SED_SCRIPT-r: 表示使用扩展正则表达式*d: 删除符合条件的行;
p: 显示符合条件的行;
a \string: 在指定的行后面追加新行,内容为string*
\n:可以用于换行
i \string: 在指定的行前面添加新行,内容为string*
r FILE: 将指定的文件的内容添加至符合条件的行处
w FILE: 将地址指定的范围内的行另存至指定的文件中;
s/pattern/string/修饰符: 查找并替换,默认只替换每行中第一次被模式匹配到的字符串*
g: 行内全局替换
i: 忽略字符大小写
s///: s###, s@@@ \(\), \1, \2   *sed:行编辑器Address
可以没有
给定范围
查找指定行/str/

模糊匹配指定行,并替换

# id:9:initdefault:sed "s/\(id:\)[0-9]\(:initdefault:\)/\19\2/" inittab

模糊匹配 IP 地址,并替换最后的主机号

sed "s/\(IPADDR=\(\([0-9]\|[1-9][0-9]\|1[0-9][0-9]\|2[0-4][0-9]\|25[0-5]\)\.\)\{3\}\).*/\1144/" ifcfg-eth0[root@node01 god]# num=100
[root@node01 god]# sed "s/\(IPADDR=\(\([0-9]\|[1-9][0-9]\|1[0-9][0-9]\|2[0-4][0-4]\|25[0-5]\)\.\)\{3\}\).*/\1$num/"  -i ifcfg-eth0

注意: \. 表示真实的点,不作为正则匹配中任意字符

awk 命令

awk是一个强大的文本分析工具。
相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。
简单来说awk就是把文件逐行的读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk -F '{pattern + action}' {filenames}
支持自定义分隔符
支持正则表达式匹配
支持自定义变量,数组  a[1]  a[tom]  map(key)
支持内置变量
ARGC               命令行参数个数
ARGV               命令行参数排列
ENVIRON            支持队列中系统环境变量的使用
FILENAME           awk浏览的文件名
FNR                浏览文件的记录数
FS                 设置输入域分隔符,等价于命令行 -F选项
NF                 浏览记录的域的个数*
NR                 已读的记录数*
OFS                输出域分隔符
ORS                输出记录分隔符
RS                 控制记录分隔符
支持函数
print、split、substr、sub、gsub
支持流程控制语句,类C语言
if、while、do/while、for、break、continue
#--------------------------------------------------------------------------------#
只是显示/etc/passwd的账户:CUT
awk -F':' '{print $1}' passwd
只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行开始前添加列名name,shell,在最后一行添加"blue,/bin/nosh"(cut,sed)
awk -F':' 'BEGIN{print "name,shell"} {print $1 "," $7} END{print "blue,/bin/nosh"}' passwd
搜索/etc/passwd有root关键字的所有行
awk  '/root/ { print $0}'   passwd

注意:

  1. $0 表示一整行内容

  2. 代码块{} 外加单引号,不能是双引号,即 '{}'

  3. awk 默认以空白、TAB作为分隔符 delimiter,即若以空白、TAB为分隔号,不需要指定 -F参数

统计/etc/passwd文件中,每行的行号,每行的列数,对应的完整行内容

awk -F":" 'BEGIN{ print "NR\tNF\tContent" } {print NR "\t" NF "\t" $0 }' passwd
# 结果
NR  NF  Content
1   7   root:x:0:0:root:/root:/bin/bash
2   7   bin:x:1:1:bin:/bin:/sbin/nologin
3   7   daemon:x:2:2:daemon:/sbin:/sbin/nologin
# ....

打印报表功能

# awk.txt
Tom      0   2012-12-11      car     3000
John     1   2013-01-13      bike    1000
vivi     1   2013-01-18      car     2800
Tom      0   2013-01-20      car     2500
John     1   2013-01-28      bike    3500# awk.sh
{split($3,date,"-")if(date[2] == "01"){name[$1] += $5  #把名字作为数组下标,对应的value为工资}if($2 == "0"){role[$1] = "manager"}else{role[$1] = "worker"}
}
END{for (i in name){print i "\t" role[i] "\t" name[i]}
}#  使用
[root@node01 god]# awk -f awk.sh awk.txt
vivi    worker  2800
Tom manager 2500
John    worker  4500

Linux 用户管理

命令 说明
id 打印输出有效用户的自身的ID 和 所在组的 ID
useradd 添加用户
userdel 删除用户
groupadd 添加组
groupdel 删除组
passwd 设置或修改密码
sudo * 提升权限
su 切换用户

删除用户

若要删除用户,再创建同名用户,需要在创建前删除原 /home 目录和 /var/mail 目录下的内容

[root@node01 /]# userdel god
[root@node01 /]# useradd god
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
Creating mailbox file: File exists
[root@node01 /]# rm -rf /home/god/
[root@node01 /]# useradd god
useradd: user 'god' already exists
[root@node01 /]# rm -fr /var/
cache/    empty/    lib/      lock/     mail/     opt/      run/      tmp/
db/       games/    local/    log/      nis/      preserve/ spool/    yp/
[root@node01 /]# rm -fr /var/mail/god
[root@node01 /]# useradd god

权限

命令 说明
r 读权限 r=4
w 写权限 w=2
x 可执行权限 x=1
usermod 修改用户权限
chown 修改文件的属主和属组
chmod 修改文件操作权限 (RWX) augo

注意:

  1. 一个文件只能有一个属主和一个属组

  2. 文件夹的执行权限 x ,表示用户是否可以进入到该文件夹下

useradd sxt01
passwd sxt01
useradd sxt02
passwd sxt02mkdir /var/swapdata
1,权限修正:
chmod  770  swapdata   |  chmod  o-rwx g+rwx   swapdata
2,修正属组
groupadd sxtswap
usermod -a -G sxtswap sxt01
usermod -a -G sxtswap sxt02
chown  root:sxtswap swapdata
chown :sxtswap   ooxx.file
chmod  770 ooxx.file
id  username

Linux 编译安装

执行顺 说明
./configure 生成编译依赖关系
make 编译
make install 新建文件夹、拷贝文件
1,下载源码包
2,解压缩:tar xf filename
3,cd:vi README
4,./configure
检查操作系统
检查编译环境
yum install gcc
pcre 依赖库
yum search pcre
yum install pcre-devel
openssl
yum install opssl-devel
./configure --help
./configure --prefix=/opt/sxt/nginx   #配置安装路径
5,Makefile
6,make
7,make install
8,cd /opt/sxt/nginx/sbin     ./nginx
9,浏览器访问测试
10,祝君好运~!

Linux RPM 安装

Redhat提供了rpm管理体系
已经编译的软件包:针对不同的平台系统编译目标软件包
操作系统维护安装信息
软件包包含依赖检查,但还需人为解决

安装 rpm 软件

rpm -ivh  xxxx.rpm

rpm 命令使用

rpm安装:
-ivh  filename
--prefix
rpm升级:
-Uvh
-Fvh
rpm卸载:
-e PACKAGE_NAME# rpm查询
rpm -qa : 查询已经安装的所有包
rpm -q  PACKAGE_NAME: 查询指定的包是否已经安装
rpm -qi PACKAGE_NAME: 查询指定包的说明信息
rpm -ql PACKAGE_NAME: 查询指定包安装后生成的文件列表
rpm -qc PACEAGE_NEME:查询指定包安装的配置文件
rpm -qd PACKAGE_NAME: 查询指定包安装的帮助文件
rpm -q --scripts PACKAGE_NAME: 查询指定包中包含的脚本
rpm -qf /path/to/somefile: 查询文件是由哪个rpm包安装生成的
如果某rpm包尚未安装,需查询其说明信息、安装以后会生成的文件
rpm -qpi /PATH/TO/PACKAGE_FILE
rpm -qpl

Linux YUM 安装

yum 命令

yum命令:
yum repolist
yum clean all
yum makecache
yum update
查询:
yum list
yum search
yum info
安装&卸载:
yum install
remove|eraseyum命令:分组
yum grouplist
yum groupinfo
yum groupinstall
yum groupremove
yum groupupdate

更换安装为阿里源

# 备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup# 下载阿里 yum 源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo# 更新缓存
yum makecache

本地 yum 源

  1. 为当前虚拟机挂载镜像文件

  1. 操作
# 挂载 cdrom
mount /dev/cdrom /mntrepo:
/etc/yum.repos.d/
[repoID]
baseurl=
http://
file://
ftp://
#gpgchkeck= 有1和0两个选择,分别代表是否是否进行gpg校验,如果没有这一项,默认是检查的。
gpgcheck=1/0
#当某个软件仓库被配置成 enabled=0 时,yum 在安装或升级软件包时不会将该仓库做为软件包提供源。使用这个选项,可以启用或禁用软件仓库。
enable=0/1#[base]
name=local
failovermethod=priority
baseurl=file:///mnt
gpgcheck=1
enable=1

注意: 若包名中间包括空格,一定使用双引号括起来

中文显示,查看中文文档

# yum 的 repo 变成aliyun  || 本地DVD
yum grouplist
yum groupinstall "Chinese Support"
echo $LANG
en_US.UTF-8
LANG=zh_CN.UTF-8#增加epel的repo:
http://mirrors.aliyun.com
epel>>>>>help
wget centos6.......yum clean all
yum makecache
yum search man-pages
yum install man man-pages man-pages-zh-CN
【【【【 man bash 】】】】

文本流

变量
引用&命令替换
退出状态&逻辑判断
表达式
流程控制

重定向:不是命令
程序自身都有I/O
0:标准输入
1:标准输出
2:错误输出
控制程序I/O位置
一切皆文件
/proc/$$/fd
程序是否处理I/O?
绑定顺序:从左到右

输出重定向

输出重定向 说明
1>xxx 标准输出覆盖重定向
1>>xxx 标准输出追加重定向
2>xxx 错误覆盖重定向
2>>xxx 错误追加重定向
>&或者&> xxx 向 xxx 文件添加错误和标准输出信息

注意: 重定向符号左边都不能包括空格

[root@node01 god]# ls /yy 2>error
[root@node01 god]# ll
total 8
-rw-r--r--. 1 root root 140 Sep 22 22:39 a
-rw-r--r--. 1 root root  49 Sep 22 22:40 error
[root@node01 god]# cat error
ls: cannot access /yy: No such file or directory
[root@node01 god]# ls /123 2>>error
[root@node01 god]# cat error
ls: cannot access /yy: No such file or directory
ls: cannot access /123: No such file or directory[root@node01 god]# ls / /suibian 1>ls02.out 2>&1
[root@node01 god]# cat ls02.out
ls: cannot access /suibian: No such file or directory
/:
abc
bin
# ... 省略
[root@node01 god]# ls / /suibian >& ls01.out
[root@node01 god]# cat ls01.out
ls: cannot access /suibian: No such file or directory
/:
abc
bin
boot
# ... 省略

注意: 若一条命令中既包括错误输出,也包括正确输出,则先输出错误输出

输入重定向

输入重定向 说明
<<< 从字符串中读取输入
<<E 从键盘中读取输入,E表示结束符
< 从文件中读取输入
[root@node01 god]# read aaa <<<"HelloWord"
[root@node01 god]# echo $aaa
HelloWord
[root@node01 god]# read aaa<<GG
> ljasf
> ajlsdfj;la
> ;ajdfkl
> GG  #跟 GG 一样,表示输入退出
[root@node01 god]# echo $aaa
ljasf# input.sh 脚本
cat <<AABB
print error info
AABB
echo "you know me .."
# 执行
source input.sh[root@node01 god]# cat 0< /etc/in
init/    init.d/  inittab  inputrc
[root@node01 god]# cat 0< /etc/inittab
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.

全重定向

exec 8<> /dev/tcp/www.baidu.com/80
echo -e "GET / HTTP/1.0\n" >& 8
cat <& 8

Shell 编程

bash

shell  bash
解释器,启动器
解释器:
用户交互输入
文本文件输入*
脚本本质:
#! /bin/bash
#! /usr/bin/python
读取方式:
当前shell:source/.
新建子shell:/bin/bash  file   /   ./file.sh  《chmod +x file.sh》
执行方式 说明
source xxx.sh 在当前 bash 中执行脚本
./xxx.sh 开启一个子 bash 执行脚本

注意:在不同 bash 中执行的结果有可能不相同,即要理清父子 bash 之间的关系

[root@node01 sh]# echo $$
1132
[root@node01 sh]# source sh01.sh
abc  boot  etc   lib    lost+found  mnt  proc  sbin     share  sys  usr
bin  dev   home  lib64  media       opt  root  selinux  srv    tmp  var
Hello World
1132
init─┬─auditd───{auditd}├─crond├─dbus-daemon───{dbus-daemon}├─master─┬─pickup│        └─qmgr├─6*[mingetty]├─rsyslogd───3*[{rsyslogd}]├─sshd───sshd───bash───pstree└─udevd───2*[udevd]
[root@node01 sh]# ./sh01.sh
abc  boot  etc   lib    lost+found  mnt  proc  sbin    share  sys  usr
bin  dev   home  lib64  media       opt  root  selinux  srv    tmp  var
Hello World
1296
init─┬─auditd───{auditd}├─crond├─dbus-daemon───{dbus-daemon}├─master─┬─pickup│        └─qmgr├─6*[mingetty]├─rsyslogd───3*[{rsyslogd}]├─sshd───sshd───bash───bash───pstree└─udevd───2*[udevd]

变量

类型 作用
本地变量 作用于当前 bash 中
局部变量 local,只作用于当前代码块
位置变量 $1,$2,,从脚本文件后,读取参数
特殊变量 $#: 位置参数个数
$*: 参数列表,双引号引用为一个字符串
$@: 参数列表,双引号引用为单独的字符串
$$:当前 shell 的 PID:接收者
$BASHPID:真实
管道 *
$?:上一个命令退出状态
- 0 成功
-other: 失败
环境变量 - export 定义变量
- 导出到子 shell
- fork() Copy On Write 时间复杂度 O(1)
适用用于函数
unset: 取消变量
set: 查看shell 的变量
[root@node01 sh]# num=1
[root@node01 sh]# myfunc(){> echo $num
> echo HelloWorld
> }
[root@node01 sh]# myfunc
1
HelloWorld# 本地变量 local
[root@node01 sh]# myfunc(){> local fun=1
> echo $fun
> echo ok
> }
[root@node01 sh]# myfunc
1
ok
[root@node01 sh]# echo $fun# -------------------------------
# 位置参数
[root@node01 sh]# cat sh02.sh
echo $1
echo $2
[root@node01 sh]# vi sh02.sh
[root@node01 sh]# source sh02.sh 1 2
1
2# 特殊参数
[root@node01 sh]# cat sh02.sh
echo $1
echo $2
echo ${11}
echo "---------"
echo {'position parameters:'}$#
echo $@
[root@node01 sh]# source sh02.sh a b c d e f j h k m n o
a
b
n
---------
{position parameters:}12
a b c d e f j h k m n o#查看上一个命令的执行状态
[root@node01 sh]# ls /
abc  bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  share  srv  sys  tmp  usr  var
[root@node01 sh]# echo $?
0
[root@node01 sh]# ls /asf
ls: cannot access /asf: No such file or directory
[root@node01 sh]# echo $?
2# 数组使用
[root@node01 sh]# arr=(1 2 3)
[root@node01 sh]# echo $arr[1]
1[1]
[root@node01 sh]# echo ${arr[1]}
2
[root@node01 sh]# echo ${arr[0]}
1
[root@node01 sh]# echo ${arr[2]}
3# 变量与其他字符串的拼接,需要使用花括号 {},标识为变量
[root@node01 sh]# num=1
[root@node01 sh]# echo $num1231[root@node01 sh]# echo ${num}111
1111# 管道--管道两边分为在两个子 bash 中,  子 bash 可以使用父 bash 中的引用
[root@node01 sh]# dd=1
[root@node01 sh]# dd=10 | echo $dd
1# export 导入不共享
[root@node01 sh]# cat sh04.sh
echo $k
echo "-------------"
sleep 10
echo $k
[root@node01 sh]# export k=5
[root@node01 sh]# ./sh04.sh &  # $ 表示在后台运行
[1] 1729
[root@node01 sh]# 5
-------------
^C
[root@node01 sh]# k=8
[root@node01 sh]# 5
^C
[1]+  Done                    ./sh04.sh

注意:

  1. 数组元素之间通过空格分隔,使用逗号分号,bash 会把数组整体当做字符串使用
  2. export 导出非共享

引用

双引号:弱引用,参数扩展
单引号:强引用,不可嵌套
花括号扩展不能被引用
命令执行前删除引用

[root@node01 sh]# kk=12
[root@node01 sh]# echo "$kk"
12
[root@node01 sh]# echo '$kk'
$kk
# 花括号扩展不能被引用
[root@node01 b]# cp  "/etc/{passwd,inittab}" ./
cp: cannot stat `/etc/{passwd,inittab}': No such file or directory

命令替换

反引号:`ls -l /`
$(ls -l /)
可以嵌套
[root@node01 sh]# echo "`echo 123`"
123[root@node01 sh]# abc=$(echo $(echo "sxt"))
[root@node01 sh]# echo $abc
sxt[root@node01 sh]# abc=$(ls -l /)
[root@node01 sh]# echo $abc
total 98 drwxrw-r-x. 3 root root 4096 Sep 22 13:53 abc dr-xr-xr-x. 2 root root 4096 Sep 22 21:34 bin dr-xr-xr-x. 5 root root 1024 Sep 21 19:29 boot drwxr-xr-x. 18 root root 3680 Sep 22 21:45 dev drwxr-xr-x. 76 root root 4096 Sep 22 21:45 etc drwxr-xr-x. 4 root root 4096 Sep 22 13:04 home dr-xr-xr-x. 8 root root 4096 Sep 22 14:16 lib dr-xr-xr-x. 10 root root 12288 Sep 22 21:34 lib64 drwx------. 2 root root 16384 Sep 21 19:28 lost+found drwxr-xr-x. 2 root root 4096 Sep 23 2011 media drwxr-xr-x. 2 root root 4096 Sep 23 2011 mnt drwxr-xr-x. 2 root root 4096 Sep 23 2011 opt dr-xr-xr-x. 87 root root 0 Sep 22 21:45 proc dr-xr-x---. 5 root root 4096 Sep 23 03:26 root dr-xr-xr-x. 2 root root 12288 Sep 22 17:58 sbin drwxr-xr-x. 7 root root 0 Sep 22 21:45 selinux drwxrwx---. 2 root share 4096 Sep 22 13:51 share drwxr-xr-x. 2 root root 4096 Sep 23 2011 srv drwxr-xr-x. 13 root root 0 Sep 22 21:45 sys drwxrwxrwt. 3 root root 4096 Sep 23 02:02 tmp drwxr-xr-x. 14 root root 4096 Sep 22 17:50 usr drwxr-xr-x. 17 root root 4096 Sep 21 19:28 var

逻辑判断*

退出状态
echo $?
逻辑判断
command1 && command2
command1 || command2

表达式

算术表达式

let  算术运算表达式
let  C=$A+$B
$[算术表达式]
C =$[$A+$B]
$((算术表达式))
C=$(($A+$B))
expr  算术表达式
注意:表达式中各操作数及运算符之间要有空格。而且要使用命令引用
C=`expr $A + $B`
help let
[root@node01 sh]# a=1
[root@node01 sh]# b=2
[root@node01 sh]# let c=$a+$b
[root@node01 sh]# echo $c
3
[root@node01 sh]# c=3
[root@node01 sh]# d=4
[root@node01 sh]# e=$(($c+$d))
[root@node01 sh]# echo $e
7
[root@node01 sh]# j=1
[root@node01 sh]# k=2
[root@node01 sh]# c=$((j+k))
[root@node01 sh]# echo $c
3[root@node01 sh]# echo $a
2
[root@node01 sh]# ((a++))
[root@node01 sh]# echo $a
3

条件表达式

[  expression  ]
test expression
[[ expression ]]
help test
[root@node01 sh]# test -a /etc/adf
[root@node01 sh]# echo $?
1
[root@node01 sh]# test -a /etc/password
[root@node01 sh]# echo $?
1[root@node01 sh]# [ $a -gt $b ]
[root@node01 sh]# echo $?
0[root@node01 sh]# [3 -gt 2]
-bash: [3: command not found
[root@node01 sh]# [ 3 -gt 2 ]
[root@node01 sh]# echo $?
0

注意: 靠近 [] ,需要有空格间隔

添加用户脚本

#添加用户
#用户密码同用户名
#静默运行脚本
#避免捕获用户接口
#程序自定义输出#! /bin/bash
[ ! $# -eq 1 ] && echo "args error ! " && exit 3
id $1 >&/dev/null && echo "user exits" && exit 4
useradd $1 >& /dev/null && echo $1 | passwd --stdin $1 >& /dev/null && echo "useradd user success!" && exit 0
echo "don't know, user add error!"

流程控制

if

[test06@node01 sh]$ if [ 3 -gt 1 ]; then echo ok; fi
ok
[test06@node01 sh]$ a=1
[test06@node01 sh]$ b=2
[test06@node01 sh]$ if [ $b -lt $a ];then echo ok;elif [ $b -gt $a ];then echo ojbk;fi
ojbk
[test06@node01 sh]$ if [ $b -lt $a ];then echo lt;else echo gt;fi
gt

while

[test06@node01 sh]$ while ls /;do echo ok;break;done
abc  boot  etc   lib    lost+found  mnt  proc  sbin     share  sys  usr
bin  dev   home  lib64  media       opt  root  selinux  srv    tmp  var
ok
[test06@node01 sh]$ a=1
[test06@node01 sh]$ while [ $a -le 5 ];do echo $a;((a++));done
1
2
3
4
5

for

[test06@node01 sh]$ for ((ab=1;ab<5;ab++));do echo ab=$ab;done
ab=1
ab=2
ab=3
ab=4
[test06@node01 sh]$ for i in 1 2 3 4 5;do echo $i;done
1
2
3
4
5
# 用户给定路径
# 输出文件大小最大的文件
# 递归子目录
#! /bin/bash
oldIFS=$IFS
IFS=$'\n'
for i in `du -a $1 | sort -nr`;dofilename=`echo $i | awk '{print $2}'`if [ -f $filename ];thenecho $filenamebreak;fi
done
IFS=$oldIFS

注意: 变量的赋值等于号前面两边不能有空格,bash 对空格敏感

循环遍历文件输出

#! /bin/bash
oldIFS=$IFS
IFS=$'\n'
num=0
for i in `cat file.txt`;doecho $i((num++));
done
#! /bin/bash
oldIFS=$IFS
IFS=$'\n'
num=0
for i in `cat file.txt`;doecho $i((num++));
done
echo "num:$num"
IFS=$oldIFS
echo "---------------"
lines=`cat file.txt | wc -l`
for ((i=1;i<=lines;i++));doecho `head -$i file.txt | tail -1`((line++))
done
echo "line:$line"
echo "---------------"
num=0
while  read line ;doecho $line((num++ ))
done < file.txt
echo "num:$num"
echo "-----------------"
num=0
cat file.txt | while  read line;doecho $line((num++))
done
echo "num:$num"

#### while ####

[test06@node01 sh]$ while ls /;do echo ok;break;done
abc boot etc lib lost+found mnt proc sbin share sys usr
bin dev home lib64 media opt root selinux srv tmp var
ok
[test06@node01 sh]$ a=1
[test06@node01 sh]$ while [ $a -le 5 ];do echo $a;((a++));done
1
2
3
4
5


#### for ####```shell
[test06@node01 sh]$ for ((ab=1;ab<5;ab++));do echo ab=$ab;done
ab=1
ab=2
ab=3
ab=4
[test06@node01 sh]$ for i in 1 2 3 4 5;do echo $i;done
1
2
3
4
5
# 用户给定路径
# 输出文件大小最大的文件
# 递归子目录
#! /bin/bash
oldIFS=$IFS
IFS=$'\n'
for i in `du -a $1 | sort -nr`;dofilename=`echo $i | awk '{print $2}'`if [ -f $filename ];thenecho $filenamebreak;fi
done
IFS=$oldIFS

注意: 变量的赋值等于号前面两边不能有空格,bash 对空格敏感

循环遍历文件输出

#! /bin/bash
oldIFS=$IFS
IFS=$'\n'
num=0
for i in `cat file.txt`;doecho $i((num++));
done
#! /bin/bash
oldIFS=$IFS
IFS=$'\n'
num=0
for i in `cat file.txt`;doecho $i((num++));
done
echo "num:$num"
IFS=$oldIFS
echo "---------------"
lines=`cat file.txt | wc -l`
for ((i=1;i<=lines;i++));doecho `head -$i file.txt | tail -1`((line++))
done
echo "line:$line"
echo "---------------"
num=0
while  read line ;doecho $line((num++ ))
done < file.txt
echo "num:$num"
echo "-----------------"
num=0
cat file.txt | while  read line;doecho $line((num++))
done
echo "num:$num"

大数据之Linux 基础相关推荐

  1. 大数据之Linux基础认识

    Linux的起源和发展 在上世纪70年代开始,操作系统比较火的是Unix操作系统. Unix操作系统虽然比较火,但是有一系列的问题(版权.开放源码等) 在市面上就有许多的公司或个人,基于Unix去进行 ...

  2. 大数据薪资一再飙升 学习大数据需要哪些基础?

    2018年6月19日,备受关注的个人所得税法修正案草案迎来第七次大修,个税起征点由每月3500元提高至每月5000元(每年6万元).对于大多数人来说这绝对是个好消息,但人们更愿意参加培训班实现高薪.近 ...

  3. 大数据学习方法,学习大数据需要的基础和路线

    大数据基础学习 大数据基础入门 为什么要学习大数据 1.目的:要份很好工作(钱) 2.对比:Java开发和大数据开发 什么是大数据? 举例: 1.商品推荐:问题: (1)大量的订单如何存储? (2)大 ...

  4. 大数据第二阶段Python基础编程学习笔记(待完善)

    大数据第二阶段Python基础编程学习笔记(待完善) 第一章 Python基础语法 3.8 1-1Python概述 python基础部分: ●Python基础语法: 标识符,关键字,变量,判断循环.. ...

  5. 大数据及Linux安装

    大数据及Linux安装 大数据背景 现在的社会发展相当迅速,科技发达,信息流通,使得人们之间的交流越来越密切,生活也越来越方便,在智能手机.智能穿戴设备基本普及的高科技时代的背景下,大数据应运而生. ...

  6. python可以处理多大的数据_科多大数据之Python基础教程之Excel处理库openpyxl详解...

    原标题:科多大数据之Python基础教程之Excel处理库openpyxl详解 科多大数据小课堂来啦~Python基础教程之Excel处理库openpyxl详解 openpyxl是一个第三方库,可以处 ...

  7. 【2017年第4期】大数据平台的基础能力和性能测试

    姜春宇1,2,魏凯1,2 1.中国信息通信研究院移动互联网与大数据部,北京 100191 2. 数据中心联盟大数据发展促进委员会,北京 100045 摘要:目前整个大数据技术还处于以开源方式为主导.多 ...

  8. 【大数据之Linux】

    学习笔记来源于尚硅谷,如有侵权请联系删除 [大数据之Linux] centos及Vmware配置 下载地址:链接: https://www.centos.org/download/ 网络设置说明:1桥 ...

  9. 学习编程第一章 `大数据应用` linux系统jdk安装

    学习编程第三章 大数据应用 linux系统jdk安装 下载jdk 下载网址: https://www.oracle.com/technetwork/java/javase/downloads/java ...

最新文章

  1. 使用qrcode类制作二维码
  2. python subprocess communicate_Python中的Subprocess模块
  3. 昨天安装复习中遇到的问题小结
  4. 让UpdatePanel支持文件上传(4):数据传输与解析机制
  5. java 接口与包_java常用类包接口
  6. 剑指Offer字符串转换成整数
  7. tp3.2 模型page和limit方法区别
  8. Maven查看依赖树
  9. 自己做的小游戏希望大家能喜欢
  10. g++ 安装python_一个有意思还有用的Python包汉字转换拼音
  11. python的快速认识(二)
  12. 计算机审计简答题,审计简答题总结.doc
  13. 前端Pako.js 压缩/解压库 与 Java 的 zlib 压缩与解压 的互通实现
  14. (5)Scrum Master的7种武器之长生剑和孔雀翎
  15. 上云十年:阿里云的奇幻漂流
  16. uni-app分享小程序卡片给微信好友
  17. 计算机有关书籍读书心得,关于计算机学习心得体会5篇.doc
  18. 阿里云服务器 开放端口
  19. 通信:从功耗角度出发,5G相比4G,基站和终端功耗是降低了还是升高了?
  20. 契约锁解读四川、山东新规,推动采购合同电子化

热门文章

  1. 港湾公园 Haven Park for Mac(好玩的探索建造冒险游戏)
  2. 信号完整性--串接22ohm源端电阻或者接收端接上下拉匹配电阻
  3. dmp格式怎么转换_如何生成转储(dmp)文件--工具篇
  4. SEAL开源库源码10
  5. (附源码)APP+springboot垃圾自动分类管理系统 毕业设计 160846
  6. BeanUtils只拷贝对象中属性值不为null的属性
  7. python安装第三方库re_音频处理 windows10下python三方库librosa安装教程
  8. java、C语言数组反转
  9. 深度学习——模型构建
  10. 金额按千分位划分、数字按千分位划分