一. 常见的操作系统
服务器版(企业版)和客户端版(个人版)
window:
server: windows server 2000/2003/2008/2012
client: 电脑xp win7 win8 vista win10
linux:
enterprise: 企业版
rhel red hat enterprice linux
ubuntu
debian
commity: 社区版
CentOS
desktop: 桌面版
fedora (rhel/centos)
ubuntu
opensuse
unix: 商业版系统(与linux七成是相似的)
IBM AIX
HP hp-unix
sun/oracle solaris
freebsd
二. 安装linux系统
安装方法:
1,光盘
2,U盘
3,硬盘 拷盘
4,网络安装(批量自动化安装 ks文件)
网络安装需要的条件:
1,服务器 (安装并启动服务,提供系统镜像)
2,客户端 更改BIOS(basic input and output system)启动顺序
PXE技术
NFS安装路径:
IP: 10.0.0.2
路径: /yum
2. linux设备命名
sda
s代表磁盘接口类型 SCSI,SATA (如果是IDE接口,第一个用h字母表示 )
d代表disk
a代表第一个disk,同理b代表第二个,c代表第三个...以此类推(sda,sdb,sdc...)
sda1 第一个磁盘的第一个分区
sda2 第一个磁盘的第二个分区
sda3 第一个磁盘的第三个分区
sda4 第一个磁盘的第四个分区
sde4 代表第五个磁盘的第四个分电脑 区
3. 分区信息存放在分区表
分区表存放在MBR (Master bootloader record 主引导记录)
MBR在你BIOS设定的启动硬盘最前面512个字节
512=446+64+2 其中这64个字节是用来存放分区表的
16个字节一个分区,所以64个字节只能存放4个分区
主分区只能有4个
如果想超过4个分区是可以的
主分区 primary P
扩展分区 extend E
逻辑扩展分区 logical L
3P + 1E
MSDOS分区 BIOS (4个主分区;3主分区+1逻辑分区)
GPT分区 (不受4个主分区这种限制,单个分区支持大于2TB) EFI/UEFI
linux分区最简单的分法是只分一个根分区 /
在这里学习建议的分区规则:
分区 挂载目录 大小
/dev/sda1 /boot 100M-200M
/dev/sda2 / 100G
/dev/sda3 swap 4G (可以与你的内存一样大)
/dev/sda4 extend 余下的所有空间
/dev/sda5 /soft 100G
/dev/sda6 /vm 100G以上
三.终端
1. pts终端(图形下终端)
打开终端方式:
右键点桌面,选择open in terminal
快捷键alt+f2,输入gnome-terminal或konsole
ctrl+shift+加号+加号 放大
ctrl+减号+减号 缩小
ctrl+shift+t 再开一个终端
2. tty终端(文本终端)
ctrl+alt+F2到F6 文本终端(F2(tty2),F3(tty3)...)
ctrl+alt+F1 切回图形(F1(tty1)),需要安装桌面软件(gnome,kde)
四. linux文件系统组织结构
1. 文件系统
windows文件系统
硬盘
├── C:\ 分区
├── D:\ 分区
├── E:\ 分区
└── F:\ 分区
区别:
windows上叫文件夹(folder)
linux上叫目录(directory)
linux文件系统:
树状目录结构
/etc/skel /etc/ssl 等等
|--------|
|
bin sbin etc home var tmp root dev 等等
| | | | | | | |
|--------------------------------- |
|
/根目录
2. 目录存放的内容
bin:(binary)放命令文件,一般是普通用户能使用的命令
sbin: 放命令,是管理员使用的命令
usr:放用户数据的(编译安装的软件,用户的软件源码,等等,相当于是一个用户的根)
dev:设备目录(linux下有一句话可以这样说,任何设备都是文件)
计算机的物理硬件都对应一个或多个文件。
/dev/pts pts终端
/dev/tty tty终端(w,who am i,tty)
/dev/ram 内存条
/dev/input 输入设备
/dev/sda 硬盘
/dev/sda1 第一个分区
/dev/stdin 标准输入设备(键盘)
/dev/stdout 标准输出设备(显示器)
/dev/stderr 标准输出设备(显示器)
lib或lib64:放库文件(.so动态库文件 .a静态库文件)(C:\WINDOWS\system32下的.dll)
root:超级管理员的家目录
home:其它普通用户的家目录
tmp:临时目录,存放很多软件运行的一些临时文件(这个目录所有都可以使用,权限是1777)
boot:存放开机启动有关的一些文件(单独分区)
etc:大部分的软件的配置文件和操作系统的配置文件都存放在这
proc: 这两个是伪文件系统,记录系统动态的一些信息(当前系统的各种状态,系统自动维护,无需干预)
sys:
(以前就只有一个proc,现在分成了两个proc就是processes的缩写,sys是system的缩写)
var:一个比较综合的目录,存放了日志,pid文件,邮件等等(variable,可变的)
selinux:存放selinux(security enhanced linux)规则的目录
mnt nfs
media u盘
misc 光盘
三个空目录,一般用于挂载用的(外设:u盘,移动硬盘)
opt 空目录,用于安装扩展软件包(optional)
3. 相对路径和绝对路径
绝对路径:以/开头的目录
cd /etc/abrt/
相对路径:不是以/开头的目录
cd plugins/
# tty
/dev/pts/1 --绝对路径
# who am i
root pts/1 2016-01-06 11:45 (:0.0) --相对路径
4. 家目录
# pwd --查看你当前在哪个目录
/root/Desktop --这个就是你的桌面
# nautilus /root/ --图形方式打开目录
进入家目录:
cd 回车 --最快
cd ~ --~表示家目录
管理员进入普通用户家目录:
cd ~user1
普通用户家目录:
/home/user1
/home/user2
五. 命令基础
1. 内部命令
内部命令:bash软件自带的命令
查看当前使用的shell
echo $SHELL
终端相当于bash的接口
用户
|
终端
|
shell(壳) bash ksh csh --解释命令
|
内核
# cat /etc/shells --系统上支持的shell
/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/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)
退出按q
2. 外部命令
除了内部命令以外的都叫外部命令
3. 获取帮助
man是manual的缩写,manual是手册
man man --man手册的帮助
The standard sections of the manual include:
1 User Commands --用户命令
2 System Calls --系统调用
3 C Library Functions --C语言开发库函数
4 Devices and Special Files --设备和特殊文件
5 File Formats and Conventions --文件格式和转换
6 Games et. Al.
7 Miscellanea
8 System Administration tools and Deamons
man -f passwd
passwd (1) - update user's authentication tokens
passwd (5) - password file
man 1 passwd
man 5 passwd
man ls
ls --help --这2种方式都可以获得帮助信息
help cd --只有内部命令才能用
help ls --ls是外部命令,不能这样获得帮助
ls /usr/share/man/ --man文档的位置
man的数字只是一个分类而已,不用太在意
# man zcat --有文档
# mv /usr/share/man/man1/zcat.1.gz /root/
# man zcat --还是有文档,但是换成了1p这个分类里的文档
# mv /usr/share/man/man1p/zcat.1p.gz /root/
# man zcat --没有了
No manual entry for zcat
# mv /root/zcat.1.gz /usr/share/man/man2/ --移回来,但是没有放到1分类,而是放到2分类里,结果是看不到的
# man zcat
No manual entry for zcat
# mv /usr/share/man/man2/zcat.1.gz /usr/share/man/man1/
# mv /root/zcat.1p.gz /usr/share/man/man1p/ --都移回云还原
六. 命令串讲
1. 文件操作有关的命令
ls --查看目录内容
ls [OPTION]... [FILE]... --[]扩起来的内容可选的,可有可无
常用选项:
-a,--all --所有的文件,linux系统中,以点开头的文件是隐藏文件
-A --所有的文件,不包括.和.. .表示当前目录 ..表示当前目录的上一级目录
-d --目录本身
-h --文件大小的单位
-i --显示i节点信息
-l --长格式
-S --按照文件大小排序
短选项不分先后,可以一起写(长选项不能一起):
ls -l -a 或 ls -a -l 或 ls -al 或 ls -la
which
which ls --查看ls命令路径和别名情况
alias ls='ls --color=auto'
/bin/ls
# which man
/usr/bin/man
# which reboot
/sbin/reboot
alias --别名
# alias
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
临时有效:
# alias c='clear' --给clear命令取别名
# unalias c --取消别名
# dir --没色彩
# alias dir='dir --color=auto' --做个别名
# dir --有了
# unalias dir --取消别名
永久有效:
# gedit ~/.bashrc
加入自己定义的别名:
alias c='clear'
alias dir='dir --color=auto'
# source ~/.bashrc --让配置文件生效
# . ~/.bashrc --让配置文件生效
# clear --清屏命令
ls -l
看到的内容第一位表示文件类型,总共七种类型
- 普通文件(文本文件和二进制文件)
d directory目录
p pipe管道文件
s socket文件(套接字文件)
l link链接文件(windows快捷方式类似)
b block块设备文件(硬盘,内存条)
c character字符型设备文件
file命令查看文件类型
file filename
# mkfifo pipe --产生管道文件
# echo 123 > pipe --终端1
# cat pipe --终端2
123
# mksock socket --创建socket文件
# nc -lU /tmp/socket
# nc -U /tmp/socket
cd --进入某个目录 (change directory)
pwd --显示当前工作目录(print working directory)
mkdir --创建目录(make directory)
# mkdir aaa --在当前目录创建一个目录
# mkdir bbb ccc ddd --在当前目录创建多个目录
# mkdir /opt/eee --在/opt目录下创建一个目录
# mkdir -p a/b/c/d --用于常见多级目录; p参数执行多次,不报错
touch --创建一个普通文本文件
# touch 1 --创建空文件名为1 (更准确的说法为改变文件时间戳)
# touch 2 3 4 5 --创建多个文本文件
# stat 1
File: `1'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 802h/2050d Inode: 4718598 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-07-02 15:32:50.951967259 +0800
Modify: 2015-07-02 15:32:50.951967259 +0800
Change: 2015-07-02 15:32:50.951967259 +0800
block 块,操作系统块是一次IO的单位,系统块默认大小为4096字节(类似windows簇)
inode 是文件系统给文件的一个编号,类似于文件的一个门牌号码
块大小为4096的情况,一个文件占4097个字节,那么他要占两个块
一个优化有关的问题:
块大好,还小好?
块大,一次IO数据量大,IO吞吐量大,空间浪费较多
块小,正好和块大相反
我想创建多个文件怎么做?
第一种:touch {1..10} --中间的.只能有2个
第二种:seq 11 2 20 |xargs touch --seq产生一个序列, |符号是管道(表示把前面的结果传到后面)
第三种:写shell脚本做循环
产生一个序列:
# echo {1..10} --产生一个序列的数字,从1到10
1 2 3 4 5 6 7 8 9 10
# echo {10..1}
10 9 8 7 6 5 4 3 2 1
# echo {1..10..2} --2是步长
1 3 5 7 9
# seq 1 10 | xargs
1 2 3 4 5 6 7 8 9 10
# seq 1 2 10 | xargs
1 3 5 7 9
# seq -s \" \" 10 20 --s参数数字间的分割符
# seq -w -s \" \" 1 100 --宽度相等
# seq -f \"%.2f\" 1.111 10.14 --小数序列
touch {a..z} -- 产生字母序列
touch {a..z..2}
touch {A..Z}
touch {A..Z..2}
电脑touch a{1..5}
touch a{1..5}.txt
touch {1..5}{a..f}
cp --copy,复制/拷贝; 拷贝普通文件和目录,拷贝其他类型的文件有问题
cp SOURCE DEST --source是要复制的文件,dest是复制到的地方
-r --复制目录
# cp 1.txt /test/ --复制文件
# cp abc /test/ --不加-r参数会报错
cp: omitting directory `abc'
# cp -r abc /test/ --r拷贝目录
mv --move,移动文件或重命名文件
mv SOURCE DEST --source是要移动的文件,dest是移动到的地方
# mv 1.txt /test/ --移动文件
# ls /test/
1.txt
# mv abc/ /test/ --移动目录,直接移,不需要加参数
# mv 1.txt 2.txt --重命名
# mv 1.txt /root/2 --移动文件时重命名
# cp 2 /share/1.txt --复制时重命名
rm --remove,删除文件
-i --询问
-f --force,强制删除,不询问
-r --递归,用于删除目录
# rm 1.txt -f
# rm aaa --删除目录出错
rm: cannot remove `aaa': Is a directory
# rm aaa -rf --删除目录
# rm -rf /
rm: it is dangerous to operate recursively on `/'
rm: use --no-preserve-root to override this failsafe
--强烈建议:敲命令多使用TAB键自动补全
2. 文件查看有关的命令
cat --查看文件内容
# cat 1.txt --查看文本文件内容
# cat -n 1.txt --显示行号,空行也算一行
# cat -nb 1.txt --显示行号,空行忽略
head --显示文件前十行的内容(默认)
# head 1.txt
# head -n 20 1.txt --显示文件前20行的内容
# head -20 1.txt --显示文件前20行的内容
tail --查看文件最后十行的内容(默认)
# tail -n 5 1.txt --最后5行
# tail -5 1.txt --最后5行
小实验;
一个终端 tail -f 1.txt
另一个终端echo \"hello\" >> 1.txt
再观察第一个终端的变化
more
# more 1.txt --分页显示,回车显示下一行,空格显示下一页,q退出
less --分页显示,回车显示下一行,空格显示下一页,q退出,/string查找string
# less 1.txt
tac --文件内容的输出上下反,不影响源文件
# tac 1.txt tac 反过来 cat
rev
# rev 1.txt --左右反,不影响源文件
批量重命名
# touch {1..100}.php
问题:把这100个.php结尾的文件重命名成.html结尾
提示:man rename
# rename .php .html *.php
电脑