运维
--
运维 云计算 架构 大数据
在linux os上用开源软件(或商业软件或自已开发的软件)实现企业级应用
闭源
开源
物联网 互联网+ 大数据 人工智能 虚拟化 云 容器
================================================================
操作系统OS
windows
linux
unix --- linux
unix
AIX IBM
HP-UNIX HP
solaris SUN (ORACLE)
linux (内核+软件)
rhel
redhat centos
fedora
opensuse
ubuntu
debian
......
===================================================================
os安装
1,光驱 安装盘(用iso文件使用nero这种软件刻录到光盘上)
2,u盘 用iso文件使用nero这种软件刻录到U盘上
3,硬盘
4,网络 手动
自动
BIOS 里主要的设置
intel VT 技术 (支持虚拟化的,在windows上使用虚拟机也要打开这个选项)
(BIOS EFI UEFI)顺序
分成下面几种安装场景:
1,硬盘里的原有windows想要保存的人
干掉一到两个盘(在windows磁盘管理器里删除掉,使之成为未分配空间),大概留出200G甚至以上的未分配来安装双系统
2,不能成功安装双系统的人(可能电脑太新或太老,兼容有问题),那么先用windows下的虚拟机来使用linux
建议物理机分区方式:
/boot 200M
/ 100G-150G
swap 4G
/soft 50G-100G 存放笔记和软件等
/vm 100G-150G 存放vmware虚拟机
===============================================================================
# ll rhel-server-6.5-x86_64-dvd.iso
-rwxr-xr-x 1 root root 3853516800 Jul 18 10:42 rhel-server-6.5-x86_64-dvd.iso
===============================================================================
# dhclient eth0 --自动dhcp获取ip地址(此ip是临时获取,不是固定的,重启电脑后可能要再次获取)
# ping 172.16.19.253 --测试一下网络能否和此ip通迅
# wget http://172.16.19.253/1.sh --下载此文件,默认下载到当前目录 (此文件是一个帮助你自动配置yum的脚本)
# sh 1.sh --执行此脚本 (执行完后就配置好了yum)
# yum install firefox tigervnc -y --安装浏览器,vnc客户端 -y参数代表直接确认
# vncviewer 172.16.19.253 --然后就可以远程vnc连接我了,密码为123456
==================================================================================
linux终端 (操作命令的工具)
打开终端的方法:
方法一:桌面 鼠标右键 --》 open in terminal
方法二:alt +F2 --> 输入 gnome-terminal
ctrl+shift+加号 放大
ctrl+减号 缩小
ctrl+shift+t 再开一个终端
方法三:字符界面(文本界面)
切换方法 ctrl+alt+F2到F6 ctrl+alt+F1是切换到图形界面
图形界面打开的终端,设备文件对应/dev/pts/0,/dev/pts/1......等
字符界面的终端,设备文件对应/dev/tty1,/dev/tty2......等
================================================================================
linux可以把它看作是 linux= kernel + N个开源soft
www.kernel.org 内核官方网站
==========================================
# ls /
bin dev lib media net root share tmp
boot etc lib64 misc opt sbin srv usr
cgroup home lost+found mnt proc selinux sys var
目录结构:是一个树状的目录结构,最底层的目录是/(根目录)
bin(binary):放命令,一般是普通用户能使用的命令
sbin(super binary): 放命令,只能是管理员能使用的命令
usr(user):放用户数据的(编译安装的软件,用户的软件源码,等等,相当于是一个用户的根)
dev(device):设备目录(linux下有一句话可以这样说,任何设备都是文件)
lib或lib64(library):放库文件
root:超级管理员的家目录
home:其它普通用户的家目录
tmp(temporary):临时目录,存放很多软件运行的一些临时文件(此目录建议新手不要去做任何的操作)
boot:存放开机启动有关的一些文件
etc:大部分的软件的配置文件都会存放在这
proc: 这两个是伪文件系统,记录系统动态的一些信息(当前系统的各种状态:比如 cat /proc/cpuinfo查看cpu相关的信息;cat /proc/cpuinfo |grep -E "vmx|svm"查看cpu是否支持vmx或svm指令集)
sys:
(以前就只有一个proc,现在分成了两个proc就是processes的缩写,sys是system的缩写)
var:一个比较综合的目录,存放了日志,pid文件,邮件等等
selinux:存放selinux(security enhanced linux)规则的目录
mnt
media
misc 三个空目录,一般用于挂载用的
opt 空目录,用于安装扩展软件包
[root@li Desktop]# pwd --查看你当前在哪个目录
/root/Desktop --这个就是你的桌面
=============================================================================
/dev/sda 代表第一个硬盘
/dev/sdb 代表第二个硬盘
/dev/sdc 代表第三个硬盘...以此类推
还有一些其它不同类型或不同接口的硬盘可能叫/dev/hda,/dev/vda等
s代表(如sata,scsi,sas,U盘,移动硬盘等设备)
h代表ide硬盘
v代表virtio硬盘(kvm虚拟化会用到)
/dev/sda1 代表第一个硬盘的第一个分区
windows c盘 d盘 e盘 .......
linux 管理员不能直接访问分区,分区需要挂载到一个目录,然后管理员通过访问挂载的目录去访问分区里实际存放的数据
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 194M 47M 137M 26% /boot
/dev/sda2 97G 74G 18G 81% /
假设我现在就是下面这样的分区情况,如果我拷贝一个100M大小的文件到/boot目录下,请问这100M会占哪一个分区的空间?
答案:
占/dev/sda1分区的空间
如果我umount /boot后,再拷贝到/boot目录,请问这100M会占哪一个分区的空间?
答案:
umount后,那么/boot没有分区挂载了,那就属于/目录对应分区了,也就是/dev/sda2这个分区
如果拷贝到/opt/目录呢,请问这100M会占哪一个分区的空间?
答案:
同上,只要没有单独的分区挂载的目录,全部都属于/目录对应的分区(我这里为/dev/sda2)
==========================================================================
文件系统:组织和管理文件的软件
windows: FAT32,NTFS
linux:ext2,ext3,ext4(rhel6默认),xfs(rhel7默认),Reiserfs(suse默认),btrfs,zfs等
问题:
linux上能否使用所有的文件系统呢?
答案:
linux的内核会把所有的和计算机相关的技术都会支持(文件系统只是它其中的一个小部分而已),但是你使用的内核不一定都支持(因为内核都是经过了功能选择配置的,不是所有功能都选上了)
redhat的内核就把支持ntfs格式的功能去掉了,那么你要支持ntfs格式的U盘挂载,怎么做?
方法一:重编内核再加上支持ntfs的功能
方法二:不用重编内核,安装一些软件就像打补丁的方式再让内核支持ntfs
# fdisk -l --查看当前系统上的设备
Disk /dev/sda: 500.1 GB, 500107862016 bytes --这是我的硬盘500G
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x90ad9350
Device Boot Start End Blocks Id System
/dev/sda1 * 1 26 204800 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 26 12774 102400000 83 Linux
/dev/sda3 12774 13029 2048000 82 Linux swap / Solaris
/dev/sda4 13029 60802 383732736 5 Extended
/dev/sda5 13030 25778 102400000 83 Linux
/dev/sda6 25778 32152 51200000 83 Linux
/dev/sda7 32152 47902 126508032 83 Linux
/dev/sda8 47902 54429 52434959 83 Linux
/dev/sda9 54430 56979 20480000 83 Linux
Disk /dev/sdb: 31.0 GB, 31001149440 bytes --这是一个连接的U盘
3 heads, 9 sectors/track, 2242560 cylinders
Units = cylinders of 27 * 512 = 13824 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xd6fdd6fd
Device Boot Start End Blocks Id System
/dev/sdb1 * 29052 2242560 29882368 7 HPFS/NTFS --这里是这个U盘分区的文件系统格式
===================================================================================
命令基础
内部命令 --bash软件自带的命令
终端相当于bash的接口
终端
|
shell(壳) bash ksh csh
|
内核
|
硬件
man cd
bash, :, ., [, alias, bg, bind, break, builtin, caller,
cd, command, compgen, complete, compopt, continue,
declare, dirs, disown, echo, enable, eval, exec, exit,
export, false, fc, fg, getopts, hash, help, history, jobs,
kill, let, local, logout, mapfile, popd, printf, pushd,
pwd, read, readonly, return, set, shift, shopt, source,
suspend, test, times, trap, true, type, typeset, ulimit,
umask, unalias, unset, wait - bash built-in commands, see
bash(1)
外部命令 --除了内部命令以外的都叫外部命令
==================================================================================
命令帮助
man ls --退出键为q(常规的一些退出方式:q,exit,quit,logout,ctrl+c,ctrl+d)
info ls
ls --help
help cd --只有内部命令才能用
ls /usr/share/man/ --man文档的位置
/usr/share/man/man1/ls.1.gz
man的数字只是一个分类而已,不用太在意
------------------------------------
命令串讲
ls
ls -l 或 ll --详细列表形式查看
ls -a --查看到隐藏文件(在linux下就是以.开头的文件)
# nautilus /root/ 以图形的方式打开/root目录,这样是看不见以.开头的文件的
ls -l -a 或 ls -a -l 或 ls -al 或 ls -la
ls -S 从大到小排
ls -Sr 从小到大排
ls -t 按时间排
# which ls --查看ls命令路径和别名情况
alias ls='ls --color=auto'
/bin/ls
# dir --没色彩
# alias dir='dir --color=auto' --做个别名
# dir --有了
unalias dir --取消别名
# ls -l /etc/fstab
-rw-r--r-- 1 root root 1077 Jun 7 17:34 /etc/fstab
- 普通文件
d 目录
p pipe管道文件
s socket文件(socket是一种程序的连接方式)
l 链接文件(symbolic link,符号链接,软链接;类似windows的快捷方式)
b block块设备文件
c character字符型设备文件
# file /dev/tty1 --file命令也可以查看一个文件的类型
/dev/tty1: character special
# file /dev/sda1
/dev/sda1: block special
=============================================================================
文件查看有关的基础命令 cat head tail more less tac rev
# cat /etc/inittab --查看文件所有内容
# head /etc/inittab --查看文件前十行内容
# tail /etc/inittab --查看文件后十行内容
# head -3 /etc/inittab --指定查看文件的前三行
# tail -3 /etc/inittab --指定查看文件的后三行
# tail -f /var/log/messages --动态监控文件的末尾(/var/log/message日志文件是系统最常见的日志文件,会记录系统大部分的通知或错误信息)
(常用于监控日志文件,因为日志文件都是从上往下记录,并且是变化的。那么动态监控文件末尾其实就是随时可以看到日志最近的变化)
小实验;
第1步:一个终端 tail -f /var/log/messages
第2步:另一个终端logger -t "任何的标题信息" " 任何的正文信息" --logger就是一个可以往/var/log/messages文件里写日志信息的命令(t是tag的意思,也就是标签或标题的意思)
第3步:再观察第一个终端的变化
# more /etc/rc.sysinit --回车向下移一行,空格向下移一页,q键退出
# less /etc/rc.sysinit --向上向下箭头可以移,page up 和page down键移页,q键退出
[root@li ~]# cat /test/1.txt
12345
23456
34567
45678
56789
[root@li ~]# tac /test/1.txt --上下行倒序
56789
45678
34567
23456
12345
[root@li ~]# rev /test/1.txt --左右字符倒序
54321
65432
76543
87654
98765
========================================================================
文件操作有关的命令 cd pwd mkdir touch cp mv rm
# mkdir /test --创建目录;mkdir -p /a/b/c/d/ 使用-p参数可以一次创建多级目录
# ls -l -d /test
drwxr-xr-x 2 root root 4096 Jul 20 10:15 /test
# cd /test
# pwd
/test
# touch file1
# stat file1
File: `file1'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 802h/2050d Inode: 20 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-07-20 10:19:34.242423555 +0800
Modify: 2017-07-20 10:19:34.242423555 +0800
Change: 2017-07-20 10:19:34.242423555 +0800
block 块,操作系统块是一次IO(input and output)的单位,系统块默认大小为4096字节;以后oracle里也会学到块的概念,oracle块默认为8192字节
inode 是文件系统给文件的一个编号,类似于文件的一个门牌号码
一个优化有关的问题:
块大好,还小好?
块大,一次IO数据量大,IO吞吐量大,空间浪费较多
块小,正好和块大相反
# ll -i file1 --i参数可以看到文件的inode
20 -rw-r--r-- 1 root root 0 Jul 20 10:19 file1
我想创建多个文件怎么做?
第一种: touch a b c
第二种:touch {1..10}
第三种: seq 11 2 20 | xargs touch --seq产生一个序列, |符号是管道(表示把前面的结果传到后面);xargs是把前面的多行结果转成一行
第四种:写shell脚本做循环
cd 切换目录命令
cd ~ 或 cd --切换到当前用户家目录
cd - --切换到上一次的目录
. 代表当前目录
.. 代表上级目录
# pwd
/test
# cd /usr/share/man --绝对路径,相对根目录的路径
# cd ../usr/share/man/ --相对路径,相对当前目录的路径
cp 拷贝命令
cp 源 目标
对比下面这两条的区别
# cp /etc/fstab /test
# cp /etc/fstab /test/
mv 重命名和粘贴命令
mv 1 2 --重命名
mv /test/3 /test/4
小实验:
# ll -i 1
2883587 -rw-r--r--. 1 root root 0 Jul 15 10:56 1
# cp 1 2
# ll -i
total 0
2883587 -rw-r--r--. 1 root root 0 Jul 15 10:56 1
2883588 -rw-r--r--. 1 root root 0 Jul 15 10:56 2
# mv 1 3
total 0
2883588 -rw-r--r--. 1 root root 0 Jul 15 10:56 2
2883587 -rw-r--r--. 1 root root 0 Jul 15 10:56 3
这个实验说明:cp一个文件,新文件有新的inode,mv 一个文件,inode不变(准确来说,是在同一个分区里mv才不变,不同分区还是会变)
批量重命名
# pwd
/test
# rm * -rf --此命令非常危险,用的时候一定要注意
# touch {1..100}.php
问题:把这100个.php结尾的文件重命名成.html结尾
man rename
# rename .php .html *.php --把当前目录下所有.php结尾的文件后缀都替换成.html
# rename .html .php {20..50}.html --指定只改一定范围的文件
rmdir rm 删除命令
rmdir只能删除空目录
rm能删除任何文件
rm -rf /test/ --r参数表示递归,f参数表示不用确认
题目:
如何把/etc/skel/目录里以.开头的隐藏文件拷到/test/目录
# cp /etc/skel/* /test/ -rf --错误用法,*号不能代表隐藏文件
# cp /etc/skel/.* /test/ -rf --错误用法, .*也包括..,也就是会把上级目录的东西也拷过去
# cp /etc/skel/.[a-Z]* /test/ -rf --正确做法(这里是用到了特殊的正则表达式来实现的)
扩展:
因为cp命令在拷贝大文件时没有进度条,所以很多新手会不知道什么时候才能拷完,我这里用shell脚本写了一个新的cp命令,可以有进度条
# wget http://172.16.19.253/newcp -O /bin/newcp --下载此文件并拷贝到/bin下(参数为大写的O字母)
# chmod 755 /bin/newcp --确认有能执行的权限
使用方法:
# newcp /share/soft/rhel-server-6.5-x86_64-dvd.iso /test/
--注意:我这个叫newcp的脚本目前只能拷文件,不能拷贝目录(等你学完shell脚本,可以自行修改)