1.Linux介绍:
|--open source
|--based on unix
|--it consists of kernel and shell .
|--centos ubuntu redhat...... (centos 就是拿 redhat 的源码重编译了一次)
|--linux 安装注意:|---安装选项存在memory test ,install(存在两个选项:加载显卡与无显卡)
|---养成使用英语,无论是安全性还是学习效果,英语是必须的。
|---
2.|--用户通过shell控制kernel
|--shell :GUI CLI
gnome bash
|--用户名$主机名 $(普通用户) #(root用户)
|--命令行基本组成:命令+选项+参数.
|
|--tab 自动补全命令和文件名(不包括参数)
|--history(还可以使用上下键)
|--历史记录简化操作:|--!!
|--!字符
|--!num (历史记录的序号:history查看)
|--!?abc (历史记录中含有abc的命令)
|--!-k (历史记录中倒数第几个命令)
|
|--ctl加r 搜索命令
|--esc后跟一个. 重复调用上一个命令的参数.
|--支持正则表达式:* ? [0-9] [abc] [^abc]
3. |--cd ls clear (注意用man help 多学习他们的参数.)
|--su sudo
|--shutdown reboot
|--id passwd
|
|--作业管理:虽然bash是一个多进程的程序,但是每个命令会占用当前位置,所以:
|--后台运行当前命令 (命令后加一个&)
|--暂停当前命令 (ctl加z)
|
|--管理后台作业 |--jobs 查看作业表
|--bg 2 继续后台作业2
|--fg 1 把后台作业1放到前台运行.
4.文件结构:
|--倒置树状结构:|--/根分区
|--路径: .这是当前目录 .. 上一级目录
|--严格区分大小写 /是分隔符 文件名只禁止/并且小于255个字符
|--.开头为隐藏文件,用ls -a 显示出来.
|--pwd 任何一个进程都存在一个当前工作目录
|--ls -a -l -R -ld
|--file (显示文件类型)
|--cd . .. / - ~
5.文件和目录的基本操作:|--创建:touch vim mkdir (touch 还可以修改文件的创建时间.)
|--查看:cat vim
|--删除:rm (-i -r -f -v) (rm -rf 删除一个非空目录)
|--修改:vim
|--复制和移动:cp mv (-r -v ) (mv和cp还可用来重命名)
6.目录架构基础:
7.基础命令:|--日期时间:|--date -u +%y--%m--%d (格式化地显示当前系统时间)
|--date -s 2015--02--24 (修改系统时间)
|
|--hwclock:硬件显示时间
|--cal :查看日历
|--uptime :系统运行时间
|--输出和查看:|--echo cat
|--head -n (默认10行) tail -n -f(追终文件更新,一般用于日志)
|--more (向下翻页) less(上下翻页)
|--查看硬件信息:lspci lsusb lsmod -v
|--关机重启:|--shutdown -h -r 时间 (-h now -h +10{这里是分钟为单位} -h now -r 23:23 )
|--poweroff reboot
|--归档和压缩:zip filename.zip file1 file2
unzip filename.zip
gzip filename
tar -cvf outfilename.tar file1 file2
tar -xvf outfilename.tar
tar -cvzf outfilename.tar.gz file1 file2
这个解压缩并解归档嘛:???
|--查找: locate keyword (必要时需要手工更新数据库:updatedb)
|--find 查找:条件很多: -name -type -user -group -perm -ctime -size
|-- find . -name *.conf
|-- find / -name helloworld?.net
|-- find /etc -type d
|-- find /root -perm 777
|-- find . -name "a*" -exec ls -l {} \ 立即重启(如何理解???)
8.vim编辑器
9.磁盘基础:|--磁盘基本概念:|--cylinder,sector,head
|--磁盘(硬件)在linux中抽象表示:文件 /dev/
|--磁盘分区(便于组织数据):|--MBR :不支持超过2t, BIOS启动,支持32bit和64bit的机器;
四个主分区,每个主分区可作为一个扩展分区,
在扩展分区里面分逻辑分区.
占用磁盘头512字节(446分区表+66启动标识:55AA)
|--GPT :支持磁盘容量极大,EFI启动, 仅支持64bit.
主分区支持很多.
|--fdisk管理磁盘(基于MBR):分区|--超级权限才可以使用fdisk
|--fdisk /dev/sdb (注意完成修改后要写入硬盘再退出)
|--partprobe (更新硬盘)
查看分区|--fdisk -l
|--linux文件系统:|--类型:ext3 ext4 (linux文件类型) fat fat 32 ntfs xsf
|--在硬盘上创建文件系统:|--mke2fs -t ext4 /dev/sdb5
|--参数:-b -c -L -j (精细化控制)
|--mkfs.ext4 /dev/sdb1 (速度快但不能精细化控制)
|--查看文件系统:dumpe2fs /dev/sdb2
|--带日志的文件系统:好处是“两阶段提交”,稳定性好,意义是当执行某操作出现硬盘故障,日志可 以进行恢复数据.
|--给文件系统的分区打标签:(利与管理)e2label /dev/sdb2 e2label /dev/sdb2 LINUXCAST
|--fsck /dev/sdb5
-y(当交互提示太多取消提示) -t(文件系统损坏严重要加上类型)
(注意检查某分区的时候,必须先卸载;而且,损坏的文件放在lost + found)
|--文件系统挂载:|--mount
|--mount /dev/sdb3 /mnt
|--参数:-t -o
(挂载选项:ro, rw{默认的}, sync, async, noatime, atime{每次挂载时更新访问时间},remount)
|--unmount 卸载:|--unmount /dev/sda1 unmount /mnt
|--fuser -m /mnt (查看什么进程在占用这个文件系统)
|--lsof /mnt (查看什么文件正在被使用)
|--配置系统的自动挂载:|--自动挂载的系统文件:/etc/fstab
|--fstab的配置格式: /etc/fstab /mnt ext4 noatime,rw 0 0
(如果此文件系统存在label,也可以用label)
LINUXCAST /mnt ext4 defaults 0 0
|--注意:需要对文件系统的结构进行操作,必须先卸载.
10.获取帮助:
|-- 参数 -h或者--help
|-- man ls man 1 ls (1-9代表不同类型的文档,见视频介绍.) man -k passwd (文档标题中含有该关键字的文档 .)
|-- info su (比man更详细)
|--查doc文档: /usr/share/doc
|--google一下.
11.用户和组:|--通过用户来限制进程的权限,通过组来组织管理用户.
|--每个用户拥有一个uid,每个用户属于一个主组,属于一个或多个附属组.
|--每个组有一个gid.
|--每个用户拥有一个指定的shell.(默认是bash.)
|--文件都有一个隶属的用户和组,而用户和组存在权限,所以文件存在权限. {默认的“组和用户”与当前操作用户同名}
|--uid : 0 root
1-499 系统用户(专门为某些服务{例如打印机}或进程准备,它们不需要登陆.)
500-60000 普通用户
|-- id passwd
|-- /etc/passwd /etc/shadow /etc/group
用户 加密后的密码 组
|-- /etc/passwd 的用户结构(:隔开):用户名 密码 uid gid 描述信息(可无) 用户home目录 shell
!!表示空 /bin/nologin
x代表有密码 /bin/flase
表示没有shell.
|-- /ect/group 组名 组密码 gid 包括的用户
(现在不用)
|-- who whoami w
|--创建用户:useradd nash_su (系统自动生成的-G就是用户名,密码为空.)
|--参数: -u(这是uid) -g -G(附属组) -d(home目录) -s(这是shell)
|--passwd
|--修改用户:usermod 参数 newname oldname
|--参数:-l(用户名) -u -g -G -d -L(锁定用户) -U(给用户解锁)
|--删除用户:userdel nash_su (保留家目录)
userdel -r nash_su (不保留家目录)
|--创建组: (基于部门和功能)
groupadd linuxcast
|--修改组: groupmod -n newname oldname group -g newgid oldgid
|--删除组: groupdel linuxcast
(修改信息可以在 /etc/passwd /etc/shadow /etc/group 修改.但不建议这么做)
12.权限机制:|-- r w x (注意目录如果有r,w,必须有x)
|--文件的格式(权限基于UGO模型):drwx-wxr-x nash_su traning 1024 Oct 17:28 linuxcast.net
lr--rwxr-- nash_su traning 2048 Jan 13:14 hello
-rwx---rw- nash_su traning 3072 Oct 15:16 index.php
|--修改文件权限:
//|--先切换到当前文件或目录.
|--修改用户和组:|--chown 新用户或组 文件
|--chown new_username dirname (只修改目录权限)
|--chown -R new_username dirname (递归地修改了目录里面的全部文件)
|--chgrp new_grpname filename
|--chgrp -R new_grpname dirname
|--直接修改UGO: |--chmod 模式 文件
|-- chmod u+rw linuxcast.net chmod -R u+rw linuxcast.net
|-- chmod go-r hello.cpp
|-- chmod a-rx index.php
|-- chmod 777 linuxcast.net
|-- chmod 555 hello.cpp
|-- chmod 111 index.php
|--查看: ls -l linuxcast ls -ld linuxcast.net
|--实例:<见UGO.png>
groupadd traning
groupadd market
groupadd manage
useradd -G traning nashh_su
uaeradd -G tranig bob
useradd -G market alice
useradd -G market john
useradd -G manage steve
useradd -G manage david
cd / //放在根目录下,查询您方便
mkdir linuxcast.net //第一个要求
ls
mkdir traning //第二个要求
mkdir market 第...
mkdir manage //第二个要求
ls -l
chgrp traning traning/ //部门对应着组,要使各部门的文件夹对应各部门:即修改组。
chgrp market market/
chgrp mannage manage/
ll //查看所有文件详细信息
/*那么现在不同部门直接互相访问,就是以O的权限,咱们要禁止它互相访问,取消0即可*/
chmod o-rx traning/
chmod o-rx market/
chmod o-rx manage/ //完成第三个要求
ll
cd /traning/
mkdir nash_su
mkdir bob
ls -l
chown nash_su nash_su/
chown bob bob/
ls -l
cd /market/
mkdir alice
mkdir john
ls -l
chown alice alice/
chown john john/
ls -l
cd /manage/
mkdir steve
mkdir david
ls -l
chown steve steve/
chown david david/
ls -l
chgrp traning nash_su/
chgrp traning bob/
chgrp market alice/
chgrp market john/
chgrp manage steve/
chgrp manege david/
ls -l
/*在生产中,权限宁愿放小,不可給大,因为此处无特殊要求,所以O给他全部拿掉*/
chmod o-rx nash_su
bob
alice
john
steve
david
//完成了第四个要求,并且已经修改了他们对应的UG,以及UGO的权限
对于第五个要求,很显然,同组的不同用户,既然同组{G的权限默认就是r-x},那么互相查看本来就是可以的,
而O的权限以及撤销,所以不会修改。
//至此,完成第五个要求,当然还可以ls -l 和不同用户切换,看看权限生效了没有。
13.扩展机制:
|--默认权限:|--每个终端(分root 和 普通用户)存在umask: umask num(可修改) umask(不加任何参数)
|--dir :777-umask
file:666-umask
|--特殊权限:|--suid (passwd命令的设计:非root也能用.)
|--sgid (让目录下的所有文件和子目录继承该目录的附属组.)
|--sticky (对同一目录{隶属组X}有读写权限的不同用户{隶属同一个组X}间的文件,仅自己可删除)
|--chmod u+s linuxcast
|--chmod 4755 linuxcast
|--chmod g+s linuxcast
|--chmod 2755 linuxcast
|--chmod o+t linuxcast
|--chmod 1755 linuxcast
/*sticky的实例*/
groupadd testgroup
useradd -G testgroup user1
useradd -G testgroup user2
cd /
mkdir linuxcast.net
chgrp testgroup linuxcast.net
ls -ld linuxcast.net
chmod g+rwx linuxcast.net //把组的权限提升上来
ls -ld linuxcast.net
chmod o+t linuxcast.net //在centos上去掉这句,看看下面操作有什么不同。{对比出真知}
ls -ld linuxcast.net
su - user1 {写点东西}
cd /linuxcast.net
touch user1
exit
su - user2
cd /linuxcast.net
touch user2 {写点东西}
ls
cat user1 //查看没问题
rm -rf user1 //发现删除和修改不行
|--文件权限限制对于root没有作用,root的权限无穷大.
14.网络基础:|--ipv4(32位二进制) |--ip地址 (点分十进制): 192.168.1.1 网络部分(192.168.1)+主机部分(1)
|--子网掩码 255.255.255.0 (前24位均为1,所以前24位是网络部分.)
**:子网掩码是用来标示ip地址的网络部分,也是32位,与ip地址一一对应.
|--同网络的主机之间通信: 通过ARP协议获取彼此网卡的MAC地址.
192.168.1.1 和192.168.1.2
|--不同网络:路由功能:(这里需要配置本机的网关,而网关连接到路由器)
路由器内置一张路由表:eth1---ip1 eth2---ip2......
(接口与ip一一对应),路由器分析ip转不同接口,然后转发.
|--DNS服务器{填ip}: 解析域名 www.linuxcast.net (主机名 域名称 域类型) (主机名可自定)
|--计算机发送http至DNS服务器获取目标网站的ip,然后再定位ip通信.
15.配置网络: |--以太网在linux抽象为:eth0, eth2(1.2是网卡标号)
|--lspci lsusb
|--ifconfig -a ifconfig eth0
|--ifup eth1 ifdown eth1
|--setup
|--网络配置文件:|--网卡配置: /etc/sysconfig/network-scripts/ifcfg-eth0 (如果有其他网卡,则还有eth1...)
|--DNS配置: /etc/resolv.conf
|--主机名: /etc/sysconfig要/network
|--查看:hostname cat network
|--修改:|--临时:hostname newname(重启就无效了) |--永久:修改/etc/sysconfig/network
|--静态主机名:/etc/hosts
|--网络测试:|--测试网络连通性:ping 127.255.255.1 ping www.baidu.com
|--测试DNS服务器 :host www.baidu.com dig www.baidu.com
|--显示路由表 :ip route
|--追踪网络路径 :traceroute www.linuxcast.net (实际上是追踪途径的路由设备)
|--测试网络质量 :mtr www.linuxcast.net
|--网络故障排查:"从底层到高层,从自身到外部"
|--查自身配置: ip netmask gateway DNS
|--查网关是否可达: ping 192.168.1.1(这是gateway的ip)
|--查DNS是否正常 : host www.linuxcast.net
|--traceroute看网络路径
16.多命令协作:{协作的理论可能性:因为大多数命令的本身和它的输出结果都是纯文本,所以可以互相调用}
|--数据流:stdin stdout stderr
|--重定向:|-- echo "hello world" > hello {覆盖}
echo "hello world" >> hello {追加}
|-- ls myfile 2> trash
{myfile是一个空目录,这里把stderr重定向到trash,所以不报错,且trash保存着报错信息}
{而保存错误信息到一个固定文件就是日志}
|--2&1 :stderr和stdout一起保存到一个文件
|-- grep nash_su < pathfile
|--管道: 前一个命令的stdout作为第二个命令的stdin
grep linuxcast /etc/passwd | cut -d: -f3
find / -user linuxcast | grep linuxcast
find / -perm 777 2> /dev/null | grep Video
17.文本处理:|--文本浏览 :cat more less head tail
|--基于keyword搜文本 :grep "linuxcast" /etc/passwd {keyword支持正则}
{参数:-i -n -v -Ax -Bx}
|--列处理文本 :cut -d: -f1 /etc/passwd
cut -c2-6 /etc/passwd
|--文本统计 :wc linuxcast
{参数:-l -w -c -m}
|--文本排序 :sort linuxcast
{参数:-r -n -f -u -t c -k n}
|--删除重复行 :sort -u
uniq {默认删除相邻的重复行}
|--文本比较 :diff linuxcast linuxcast-new
{参数 -i -b -u} { diff -u hello1 hello2 >final.patch }
|--拼写检查 :aspell 文件名
|--tr处理
{只支持数据流} : tr -d 'tmd' < linuxcast{这是文件名}
tr 'a-z' 'A-Z' < linuxcast
|--搜索替换:sed 's/linux/uinx/g' 文件名
's/linux/unix/'
'1,50/linux/unix/g'
sed -e 's/linux/unix/g' -e 's/tmd/hhh/g' 文件名 {-e 支持多个正则}
sed -f sedfile 文件名 {-f 把正则全写在sedfile全部调用}
18.linux启动:(系统装好之后)
|--BIOS --按下电源后就启动BIOS
(BIOS存在于主板上的BIOS芯片)
{负责检查硬件是否正常,开机自检}
{查找可启动设备:可在BIOS中设置}
<判断依据是在设备 "扇区的第一个512字节" 的最后66字节是55AA?>
{MBR}
|--MBR (boot code:446字节) --系统运行至可启动设备(硬盘或者USB或者CD)
{扫描/boot/grub信息:kernel核心文件位置,/root将挂载的目录,
需要加载的非核心kernel模块initrd文件位置}
|--执行引导程序--GRUB --真正的boot code : /boot/grub/
{
stage1 :MBR的镜像,加载stage1_5,找到kernel.
stage1_5 :加载文件系统的驱动
stage2 :加载kernel.
}
|--加载内核kernel --底层已经加载成功
核心kernel :/boot/vmlinuz...
不常用的模块或驱动 :/boot/inintrd...
dmesg 查看内核输出信息(诊断系统故障)
|--执行init(pid为1的进程) --init是linux第一个进程,一直运行直至关机,且是所有进程的父进程.
--init功能:调用/etc/rc.d/rc.sysinit初始化系统,挂载文件系统,
并根据运行级别启动相应的服务.
|--运行级别:0-6 : 关机 单用户 不带网络的多用户 多用户 未使用
X||图形化模式 重新启动 (基本只用3和5)
|--配置默认运行级别:init 3 runlevel(显示前一个和当前运行级别)
默认级别 :/etc/inittab,
每个级别对应服务:/etc/rc.d/rc[0-6]
|--init的配置内容:/etc/init/
...修改root密码:利用单用户{在启动kernel的时候往/etc/grub里面传入参数 1 进入单用户模式}
用法:刚启动时上下键一下,然后选中kernel选项,按"e"进入kernel编辑,在最后面键入1,回车按"b"
|--避免安全隐患:给grub加密码:/etc/grub.conf 里面加入一行:
|-- passwd --md5 jia_mi_hou_de_passwd
|--生成密码: grub -md5 -crypt ,然后键入密码,复制加密后的密码
{注意不要多加空格或者漏掉哪个字符}
***:如果grub密码也忘记了,需要拆下硬盘挂载在其他机器上读写.
{如果想保证硬盘数据安全性,还可以给硬盘加密}
{如果硬盘的密码也忘了咋弄?呵呵,那你学个毛线Linux,所有密码都忘了那你自由落体去吧}
19.RPM和YUM安装软件: |--以源代码形式{.tar.gz}安装软件: {兼容性好,可修改,但是,麻烦,需手工软件的解决依赖关系}
1-- ./configure 检查编译环境和库文件和配置参数,并生成makefile
2-- make 对源代码进行编译生成二进制可执行文件.
3-- make install 将可执行文件安装到计算机.
|--RPM的方式:
|--RPM是一种全新的软件封装方式
|--RPM命名:chrome-1.2.0-30.el6.i686.rpm
{-v -h 显示详细信息和安装进度条}
|--安装:rpm -i chrome-1.2.0-30.el5.i664.rpm
|--卸载:rpm -e chrome {注意这里只需要软件名称}!!!!!
|--升级:rpm -U 。。。
|--ftp或http协议远程安装:rpm -i http://www.linuxcast.net/software.rpm
|--rpm查询软件信息:
rpm -qa
rqm -qi software {也只需要软件名称,查询已安装的.rpm文件的信息}
rpm -ql software {某已安装的软件都生成了哪些文件}
rpm -qf filename {查看生成该文件的源程序}
{再加个参数p rpm -qlp 看某未安装的软件即将生成那些文件
rpm -qip 看某未安装的.rpm文件的信息
}
|--rpm验证:|--倒入秘钥 :rpm --import software.rpm
|--验证未安装的rpm文件完整性 :rpm -K software.rpm
|--验证已安装的软件 :rpm -V software
|--YUM机制: |--引入仓库,对rpm进行分组管理,自动解决了RPM之间的依赖关系.
|--YUM不是一种全新的软件封装方式,它是拿来管理PRM的前端程序.
|--原理: |--建立仓库:|--配置文件:/etc/yum.repos.d/
这个目录下存在多个配置文件,a.repo,b.rep
|--文件格式:[linuxcast]
name =
baseurl = //mirrorlist = ... 自动升级url
enable = 1 //开启仓库配置
gpgcheck = 1 //这是校验
|--使用:
|-- yum install tigervnc
|-- yum remove tigervnc
|-- yum update tigervnc
|--yum基于keyword搜索:
|-- yum search vnc {找到tigervnc}
|-- yum list (all|installed|recent|updates)
|-- yum info packagename
|-- yum whatprovides filename
{查询哪个rpm软件包括这个目标文件}
|--手工本地创建yum仓库:
|--把所有rpm软件放到一个文件夹yum-dir
|--rpm -ivh createrepo.... {如果存在依赖,手工解决}
|--createrepo yum-dir {-v显示详情}
{在当前目录下创建一个repodata目录,
保存着所有rpm的索引配置文件}
|-- cd /etc/yum.repos.d {这是修改配置信息}
然后,新建a.repo文件并新建仓库信息
|-- yum clean all {清楚yum缓存}
*****1.createrepo -g yum-dir {即可创建组,管理rpm}
2.软件管理的图形界面的实现底层就是yum
3.如果仓库创建成功,给本机使用,
在baseurl直接file协议
作为网络repo,
通过http ftp 协议共享给其他
机器.