基本概念
概述
计算机有硬件和软件组成,操作系统就是硬件上面的第一层软件,它是硬件和其它软件沟通的桥梁。
Unix
1965 年,MIT、Bell(贝尔实验室)和GE(美国通用电气公司)合作准备搞个超级操作系统,取了个霸气的名字:Multics (Multiplexed Information and Computing System),多路复用信息和计算机系统。能让多个人可以同时干很多事,也叫多用户多任务操作系统。
1969 年,Multics 项目进展缓慢,被迫停止,参与项目的两个人 Ken Thompson(肯·汤普森)和 Dennis Ritchie(丹尼斯·里奇) 也闲了下来。他们都是贝尔实验室的人。没活干了,就打游戏。他们俩找了一台破电脑(PDP-7)准备玩以前开发的一个游戏(travel space:遨游太空),为了能在PDP-7 计算机上运行他的游戏,于是在1969 年夏天Ken Thompson(肯·汤普森)趁他夫人回家乡加利福尼亚渡假期间,在一个月内开发出了UNIX 操作系统的原型,UNIX于是就在1970年正式问世了,这就是Unix元年。自 1970 年后,UNIX 系统在贝尔实验室内部的程序员之间逐渐流行起来,当时使用的是BCPL 语言(基本组合编程语言),后经Dennis Ritchie 于1973 年用移植性很强的C语言进行了改写。
UNIX 的出现是由人 Ken Thompson(肯·汤普森)和 Dennis Ritchie(丹尼斯·里奇)在贝尔实验室工作期间开发出来的,自然版权属于贝尔实验室所有。一开始贝尔实验室并没有重视这个系统,导致这个系统的源代码在程序员之间不断分发导致美国很多机构、组织和高校都有非常多的人在使用这个UNIX,这就为UNIX的发展带来的高速的发展,但是随着UNIX发展的越来越好,这时候贝尔实验室就开始了商业运作了,他们决定要收回版权。但是从原来的免费获取使用变成后面的高价版权费用,很多人甚至是公司是接受不了的,所以这个商业运作进展缓慢,后面不得已就变成了,贝尔实验室收回版权,但是针对一些有合作的高校和机构,收取廉价或者是几乎免费的版权费用。
于是在20世纪70年代后期,与教育机构和外部商业组织共享了Unix,从而导致了许多不同版本Unix的诞生。其中最突出的是由加州大学伯克利分校的计算机系统研究小组构建的教育版本(BSD)。当然BSD又是另一段传奇故事了。
GUN
1983年9月,Richard Stallman宣布引入GNU计划(GNU代表的是GNU,不是Unix)。1985年,理查德(Richard)建立了自由软件基金会(FSF),这是一个非营利性组织,旨在促进软件开发的自由。GNU项目创建了许多重要的产品,如GNU Compiler Collection (gcc)、GNU Debugger、GNU Emacs text editor (Emacs)、GNU build automator (make)等,还有今天使用最广泛的:GNU通用公共许可证(GPL)。GNU项目取得了许多伟大的成就,创造了许多与Unix相似的工具。然而,GNU仍然缺少一个重要的组成部分:内核(用于处理与硬件设备(CPU、RAM、设备等)的控制和通信的部分)。
GNU项目的目标是创建一个自由的、类unix的操作系统,在这个系统中,人们人们可以自由地复制,开发,修改和分发软件,并且不受限制。
Minix
Minix诞生于1987年,由Andrew S. Tanenbaum(安德鲁·斯图尔特·塔能鲍姆,谭邦宁)教授编写,用作教学的微内核架构的类Unix系统。当时Unix系统由于AT&T的使用许可问题,Unix不能被大学使用,谭邦宁教授为了让学生能看到操作系统的运行机理,自己重新写了一个操作系统,就叫它Minix。
Linux
Linux内核最初只是由芬兰人Linus Torvalds(林纳斯·托瓦兹)在赫尔辛基大学上学时出于个人爱好而编写的。
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
目前市面上较知名的发行版有:Ubuntu(乌班图)、RedHat(红帽)、CentOS、Debain()、Fedora、 、OpenSUSE
下载地址
网易镜像:http://mirrors.163.com/
搜狐镜像:http://mirrors.sohu.com/
Linux特点
Linux里面一切皆是文件
Linux里面没有后缀名这一说
Linux和Windows区别
目前国内Linux更多的是应用与服务器上,而桌面操作系统更多使用的是window。主要区别如下。
比较 | Window | Linux |
---|
界面 | 界面统一,外壳程序固定所有Windows程序菜单几乎一致,快捷键也几乎相同 | 圆形界面风格依发布版本不同而不同,可能互不兼容。GNU/Linux的终端机是从UNIX传承下来,基本命令和操作方法也几乎一致。 | 驱动程序 | 驱动程序丰富,版本更新频繁。默认安装程序里面一般包含有该版本发布时流行的硬件驱动程序,之后所出的新硬件驱动依赖于硬件厂商提供。对于一些老硬件,如果没有了原配的驱动有时候很难支持。另外,有时硬件厂商未提供所需版本的Windows下的驱动,也会比较头痛。 | 由志愿者开发,由Linux核心开发小组发布,很多硬件厂商基于版本考虑并未提供驱动程序,尽管多数无需手动安装,但是涉及安装则相对复杂,使得新用户面对驱动程序问题会一筹莫展。但是在开源开发模式下,许多老硬件尽管在Windows下很难支持的也容易找到驱动。HP、Intel、AMD等硬件厂商逐步不同程序支持开源驱动,问题正在得到缓解。 | 使用 | 使用比较简单,容易入门。圆形化界面对没有计算机背景知识的用户使用十分有利。 | 圆形界面使用简单,容易入门。文字界面,需要学习才能掌握。 | 学习 | 系统构造复杂、变化频繁、且知识、技能淘汰快,深入学习困难 | 系统构造简单、稳定,且知识、技能传承性好,深入学习相对容易 | 软件 | 每一种特定功能可能都需要商业软件的支持,需要购买相应的授权 | 大部分软件都可以自由获取,同样功能的软件选择较少。 |
目录结构
目录 | 描述 |
---|
/ | 第一层次结构的根、整个文件系统层次结构的根目录。 | /bin/ | 需要在单用户模式可用的必要命令(可执行文件);面向所有用户,例如:cat、ls、cp,和/usr/bin类似。 | /boot/ | 引导程序文件,例如:kernel、initrd;时常是一个单独的分区[6] | /dev/ | 必要设备, 例如:, /dev/null. | /etc/ | 特定主机,系统范围内的配置文件。关于这个名称目前有争议。在贝尔实验室关于UNIX实现文档的早期版本中,/etc 被称为/etcetra 目录,[7]这是由于过去此目录中存放所有不属于别处的所有东西(然而,FHS限制/etc存放静态配置文件,不能包含二进制文件)。[8]自从早期文档出版以来,目录名称已被以各种方式重新称呼。最近的解释包括反向缩略语如:“可编辑的文本配置”(英文 “Editable Text Configuration”)或"扩展工具箱"(英文 “Extended Tool Chest”)。[9] | /home/ | 用户的家目录,包含保存的文件、个人设置等,一般为单独的分区。 | /lib/ | /bin/ and /sbin/中二进制文件必要的库文件。 | /media/ | 可移除媒体(如CD-ROM)的挂载点 (在FHS-2.3中出现)。 | /lost+found | 在ext3文件系统中,当系统意外崩溃或机器意外关机,会产生一些文件碎片在这里。当系统在开机启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。当系统发生问题。可能会有文件被移动到这个目录中,可能需要用手工的方式来修复,或移到文件到原来的位置上。 | /mnt/ | 临时挂载的文件系统。比如cdrom,u盘等,直接插入光驱无法使用,要先挂载后使用 | /opt/ | 可选应用软件包。 | /proc/ | 虚拟文件系统,将内核与进程状态归档为文本文件(系统信息都存放这目录下)。例如:uptime、 network。在Linux中,对应Procfs格式挂载。该目录下文件只能看不能改(包括root) | /root/ | 超级用户的家目录 | /sbin/ | 必要的系统二进制文件,例如: init、 ip、 mount。sbin目录下的命令,普通用户都执行不了。 | /srv/ | 站点的具体数据,由系统提供。 | /tmp/ | 临时文件(参见 /var/tmp),在系统重启时目录中文件不会被保留。 | /usr/ | 默认软件都会存于该目录下。用于存储只读用户数据的第二层次;包含绝大多数的(多)用户工具和应用程序。 | /var/ | 变量文件——在正常运行的系统中其内容不断变化的文件,如日志,脱机文件和临时电子邮件文件。有时是一个单独的分区。如果不单独分区,有可能会把整个分区充满。如果单独分区,给大给小都不合适。 |
远程连接主机的工具
通过SSH连接到远程主机有2种方式:
-
通过市面上常用的软件来进行连接。 远程ssh客户端软件:putty(开源免费的,超级轻量级的ssh连接工具),xshell(海螺,收费,但是可以试用)。 远程ftp客户端软件: xftp,filezilla, FlashFXP 远程ssh和ftp的客户端软件:FinalShell、Terminus、electerm -
通过终端命令来进行ssh连接。 基于ssh协议远程登录的命令:ssh、ssh-keygen ? ssh root@10.0.0.130 基于ftp协议进行传输的命令:scp
xshell的快捷键:
Ctrl+S 锁屏幕
Ctrl+Q 解除屏幕
shift+insert 把内容粘贴到远程终端。
Ctrl+C 终止操作
exit 退出
常用命令
系统信息
arch 显示机器的处理器架构
uname -m 显示机器的处理器架构
uname -r 显示正在使用的内核版本
dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI)
hdparm -i /dev/hda 罗列一个磁盘的架构特性
hdparm -tT /dev/sda 在磁盘上执行测试性读取操作
cat /proc/cpuinfo 显示CPU info的信息
cat /proc/interrupts 显示中断
cat /proc/meminfo 校验内存使用
cat /proc/swaps 显示哪些swap被使用
cat /proc/version 显示内核的版本
cat /proc/net/dev 显示网络适配器及统计
cat /proc/mounts 显示已加载的文件系统
lspci -tv 罗列 PCI 设备
lsusb -tv 显示 USB 设备
date 显示系统日期
cal 2007 显示2007年的日历表
date 041217002007.00 设置日期和时间 - 月日时分年.秒
clock -w 将时间修改保存到 BIOS
系统关机
关机 (系统的关机、重启以及登出 )
shutdown -h now 关闭系统
init 0 关闭系统
telinit 0 关闭系统
shutdown -h hours:minutes & 按预定时间关闭系统
shutdown -c 取消按预定时间关闭系统
shutdown -r now 重启
reboot 重启
logout 注销
文件和目录
查看文件目录信息
cd /home
cd ..
cd ../..
cd
cd ~user1
cd -
pwd
ls
ls -F
ls -l
ls -a
ls *[0-9]*
tree
管理文件目录
mkdir dir1
mkdir dir1 dir2 ....
mkdir {dir3,dir4,dir5}
mkdir dir{1..3}
mkdir user{01..3}
mkdir goods{0..10..2}
mkdir -p /tmp/dir1/dir2
rm -f file1
rmdir dir1
rm -rf dir1
rm -rf dir1 dir2
mv dir1 new_dir
cp file1 file2
cp dir/* .
cp -a /tmp/dir1 .
cp -a dir1 dir2
cp -r dir1 dir2
文件搜索
find / -name demo*
find / -name *demo
find / -name *demo*
find /root -name *demo*
[root@localhost ~]
/root/dir8/demo.txt
/root/dir9/demo.txt
/root/dir007/dir6/demo.txt
/root/dir007/demo333.txt
/root/dir007/demo333_bak.txt
/root/dir007/dir006/demo.txt
find / -user user1
find / -type f -atime +100
find / -type f -mtime -10
locate *.txt
whereis tree
which tree
查看文件内容
echo "hello
world
python
baidu" > demo.txt
cat demo.txt
cat -n demo.txt
tac -n demo.txt
wc demo.txt
wc demo.txt /etc/passwd
[root@localhost dir8]
行数 单词数 字数 文件路径
1 3 19 demo.txt
23 47 1127 /etc/passwd
24 50 1146 总用量
cat << EOF >>demo2.txt
青青园中葵,朝露待日晞。
阳春布德泽,万物生光辉。
常恐秋节至,焜黄华叶衰。
百川东到海,何时复西归?
少壮不努力,老大徒伤悲。
青青园中葵,朝露待日晞。
阳春布德泽,万物生光辉。
常恐秋节至,焜黄华叶衰。
百川东到海,何时复西归?
少壮不努力,老大徒伤悲。
青青园中葵,朝露待日晞。
阳春布德泽,万物生光辉。
常恐秋节至,焜黄华叶衰。
百川东到海,何时复西归?
少壮不努力,老大徒伤悲。
EOF
more demo2.txt
less demo2.txt
head -4 demo2.txt
tail -2 demo2.txt
tail -f /var/log/messages
文本处理
grep Aug /var/log/messages 在文件 '/var/log/messages'中查找关键词"Aug"
grep ^Aug /var/log/messages 在文件 '/var/log/messages'中查找以"Aug"开始的词汇
grep [0-9] /var/log/messages 选择 '/var/log/messages' 文件中所有包含数字的行
grep Aug -R /var/log/* 在目录 '/var/log' 及随后的目录中搜索字符串"Aug"
ps aux|grep django
sed "s/baidu/aliyun/g" demo.txt
sed -i "s/baidu/aliyun/g" demo.txt
sed '/^$/d' demo2.txt
sed -i '/^$/d' demo2.txt
sed '/ *#/d; /^$/d' demo2.txt
sed -n '/hello/p' demo.txt
sed -e 's/ *$//' demo.txt
sed -e 's/world//g' demo.txt
sed -n '1,5p;5q' demo.txt
sed -n '2,4p;4q' demo.txt
sed -n '5p;5q' demo.txt
cat demo.txt | awk 'NR%2==1'
echo a b c | awk '{print $1}'
echo a b c | awk '{print $1,$3}'
echo "hello" > t1.txt
echo " world" > t2.txt
paste t1.txt t2.txt
sort t1.txt t2.txt
echo "hello" >> t2.txt
sort t1.txt t2.txt | uniq
sort t1.txt t2.txt | uniq -u
sort t1.txt t2.txt | uniq -d
打包压缩文件
bzip2 demo2.txt
bunzip2 demo2.txt.bz2
gzip demo2.txt
gunzip demo2.txt.gz
gzip -9 demo2.txt
rar a dir8.rar dir8
rar a dir8.rar file1 file2 dir1
rar x dir8.rar
tar -cvf dir8.tar dir8
tar -cvf dir8.tar file1 file2 dir1
tar -tf dir8.tar
tar -xvf dir8.tar
tar -xvf dir8.tar -C /tmp
tar -cvfj dir8.tar.bz2 dir1
tar -jxvf dir8.tar.bz2
tar -cvfz dir8.tar.gz dir1
tar -zxvf dir8.tar.gz
zip file1.zip file1
zip -r file1.zip file1 file2 dir1
unzip file1.zip
系统网络
磁盘空间
df -h
ls -lSr |more
du -sh dir8
du -sk * | sort -rn
网络进程
ping 网络地址/IP
ping www.baidu.com -c 3 -i 2
ifconfig
ifconfig ens33
ifup ens33
ifdown ens33
route -n
hostname
hostnamectl set-hostname moluo
host www.baidu.com
nslookup www.baidu.com 对域名解析成IP地址,也可以对IP地址解析成域名
whois www.baidu.com
ps ef
ps aux
netstat -tup
netstat -tupl
tcpdump tcp port 80
tcpdump -i ens33
tcpdump host 10.0.0.131
vi&vim编辑器
用户与权限管理
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
每个用户账号都拥有一个唯一的用户名和各自的口令。
用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
实现用户账号的管理,要完成的工作主要有如下几个方面:
- 用户账号的添加、删除与修改。
- 用户口令的管理。
- 用户组的管理。
用户管理:
组管理:
批量管理用户:
- 成批添加/更新一组账户:
newusers - 成批更新用户的口令:
chpasswd
组成员管理:
- 向标准组中添加用户
gpasswd -a <用户账号名> <组账号名> usermod -G <组账号名> <用户账号名> - 从标准组中删除用户
gpasswd -d <用户账号名> <组账号名>
口令维护(禁用、恢复和删除用户口令):
- 设置用户口令:
- 禁用用户账户口令
- 查看用户账户口令状态
- 恢复用户账户口令
- 清除用户账户口令
用户切换命令:
su
sudo
- 直接使用 sudo 命令前缀执行系统管理命令。执行系统管理命令时无需知道超级用户的口令,使用普通用户自己的口令即可
权限 | 对文件的影响 | 对目录的影响 |
---|
r(读取) | 可读取文件内容 | 可列出目录内容 | w(写入) | 可修改文件内容 | 可在目录中创建删除内容 | x(执行) | 可作为命令执行 | 可访问目录内容 | 目录必须拥有 x 权限,否则无法查看其内容 | | |
ssh、ssh-keygen 和 scp
安装nginx、redis、mysql(MarilDB),crontab计划任务
|