一:Linux 的产生和发展
1.在1946年宾夕法尼亚大学制造出第一台计算机ENIARC。每秒运算5000次但依旧有缺陷首先用户独占全机,资源利用率低。其次CPU要等待手工操作,CPU利用不充分。 2.兼容分时系统和键盘显示器等终端的产生产生大大提高了计算机的性能。 3.1965年,Mutics计划让大型主机可以同时支持300个以上的终端机,1969年贝尔实验室退出计划失败。 4.1970年,Unix诞生,1974年公之于众。 5.1978年,SCO研发商业版Unix 6.1988年,Microsoft研发出xenix。 7.塔能鲍姆教授研发出MINIX系统(类Unix系统)。 8.1991年 linus Torvalds 写出linux系统。 9.1993年,大约有100余名程序员参与了Linux内核代码编写/修改工作,此时Linux 0.99的代码有大约有十万行,用户大约有10万左右。 10.1994年3月,Linux1.0发布,代码量17万行,当时是按照完全自由免费的协议发布,随后正式采用GPL协议。至此, Linux的代码开发进入良性循环。很多系统管理员开始在自己的操作系统环境中尝试linux,并将修改的代码提交给核心小组。由于拥有了丰富的操作系统 平台,因而 Linux的代码中也充实了对不同硬件系统的支持,大大的提高了跨平台移植性。
二:操作系统的安装
操作系统的安装我们不在赘述,详细安装过程请点击下面的链接:操作系统安装教程 在这里我就讲一下我再安装过程中遇到的问题以及解决的方法: 问题:Intel VT-x 处于禁用状态 解释:Intel VT-x 即Virtualization Technology, 虚拟化技术,英特尔处理器内更出色的虚拟化支持Intel VT-x 有助于提高基于软件的虚拟化解决方案的灵活性与稳定性。换句话说是在单CPU上支持多系统的技术。 解决方法: (1)重启系统,进入BIOS (2)选择advanced选项卡,选择CPU setup,按enter键进入 (3)选择Intel Virtualization Technology,选择,按enter (4)选择Enable,按enter键,保存退出。
三:Linux基础知识
1:终端
linux终端可以分为以下几类: (1)设备终端:键盘,鼠标,显示器。 (2)物理终端(/dev/console):控制台console (3)虚拟终端:共有6个,其中有一个是图形化终端(Ctrl+Alt+F1),其余终端分别对应Ctrl+Alt+F2~F6。 (4)串行终端(/dev/ttyS#):通过串行端口登录,终端名为、dev/ttys (5)伪终端(pty):字符或图形化界面打开的终端。 (6)通过tty命令可以查看当前终端的终端名。
2:SSH
SSH为Secure Shell的缩写,由IETF的网络工作小组(Network Working Group)所制定;SSH为建立在应用层和传输层基础上的安全协议。 SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。透过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。 SSH之另一项优点为其传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、POP、甚至为PPP提供一个安全的“通道”。 想要远程控制服务器就要安装SSH的客户端:x-shell或SecureCRT。
3:shell
shell是一种人机交互语言,是用户和Linux操作系统之间的接口。它接收用户输入的命令并把它送入内核。Shell也被称为Linux的命令解释器,是一种高级程序语言。
例子:
echo $SHELL 查看当前的shell类型
cat /etc/shells 查看当前系统所安装的Shell
4:命令提示符
命令提示符格式: [root@centos6 ~]# [用户名@主机名前缀 目录路径后缀]#|$ (root是为#,普通用户时为$) echo $PS1显示当前的提示符格式 PS1="[\e[32m][\u@\h \W]\$[\e[0m] ":将命令提示符颜色改为红色。(如果想要命令提示符一直变色则要讲此命令存在/etc/bashrc文件下)
5:内部与外部命令(重点)
内部命令:集成在内存中的命令,这类命令使用频率非常高。 外部命令:存储在硬盘中的命令,这类命令使用频率不高。 那么如何知道一条命令是外部还是内部命令呢?我们可以通过type command 命令来查询该命令是内部还是外部命令。 我们还可以用enable命令来激活,禁用,显示内部命令: enable 显示所有已激活的内部命令 enable command 激活被禁用的内部命令 enable |wc -l 显示激活中的内部命令的数量 enable -a 显示所有的内部命令 enable -a |wc -l 显示所有的内部命令的数量 enable -n 显示所有被禁用的内部命令 enable -n command 禁用某个内部命令 命令的查找顺序问题: 例子: (1)执行echo 123 (2)禁用echo (3)执行echo 456 结果发现echo虽然被禁用了,但依旧打印出456在上了,接着用type命令查询echo,发现echo被hash在了/bin/echo目录。Echo被禁用后变为外部命令,系统会根据PATH变量从左到右寻找echo,最终在/bin/下找到了echo,并存储在hash中。 (4)将 /sbin/ifconfig 移到/usr/bin下取名为echo (5)创建一个/root/bin目录,并将/bin/echo移入/root/bin下,再执行echo命令结果出错,这是什么原因呢?首先当执行命令时,系统先到内存中查找被激活的内部命令,如果找不到就到外部中查找,但由于之前已经查找过一遍,并将查找结果(路径)存到hash中,由于我们已经移走了,系统就找不到了。 (6)hash -r 清空所用的hash表,再执行echo命令 结果我们发现系统给我们的是IP地址。这是因为我们清空了hash表系统重新从PATH变量中寻找echo,并在/usr/bin下找到了echo,不过这是我们改的用来查IP的。并重新存在hash表中。 (7)enable echo 激活echo后运行echo命令。发现输出空行,这是因为内部命令激活,系统重新从内存中找,不在找hash表。 总结来看系统以已下顺序查找命令: 内部命令 外部命令 hash PATH
6:别名
alias 显示所有的别名信息 alias 别名='command -选项 参数' unalias 别名 unalias -a 取消所有别名 别名的保存 nano /etc/bashrc 使命令不受别名影响的方式 \command 'command' "command" /path/command
7:$的3个作用:
(1)$() 或 ``引用命令执行的结果
(2)$(()) 或$[]进行运算
(3)使用${}或"$变量名" 划定变量名的起止范围。
8:目录结构
(1)文件有两类数据:数据和元数据,元数据是指文件的权限,文件类型,UID,gid,数据区位置,大小,时间,文件链接数等等。 (2)Linux文件的后缀名并不重要。
9:查找帮助
当我们遇到忘记一些指令时,我们可以通过linux系统来查找命令的用法 对于内部命令我们可以用help command 来查找该命令的用法。 对于外部命令我们可以用command --help来查找 但这种方式有一些问题,查找不全面,触发方式不一,所以我们可以用man来查找 Man:共分为9个章节,分别是用户命令,系统调用,C库调用,设备文件及特殊文件,配置文件格式,游戏,杂项,管理类命令还有Linux内核API。 查找命令格式为man【0-9】 command 。用该命令还可以提取关键字,翻页也方便。
10:iNode和block
当我们查找文件时都会看文件的的名字,但计算机不一样,当他从文件系统找一个文件时会根据inode号来查找文件,文件的名字与iNode号相关联,一个iNode号可以和多个文件名关联,根据iNode号系统找到文件的存储位置。iNode存储着文件的元数据;如UID,gid,文件的权限,时间戳等,一个iNode节点与一个文件相关联。 Block是存储文件数据的地方。一个文件可能由多个block组成,所以block中会带有指针。
11:硬链接与软连接
硬链接:
与文件系统上的物理文件相对应,创建硬连接时链接数递增,删除文件时,链接数递减,当连接数减到零时,文件被删除。需要注意的是,硬链接不能跨越驱动器或分区。
软连接:
软连接与文件的目录相关,可以跨分区,其大小为指向路径字符串的长度。
软硬链接最主要的区别是硬链接引用的是iNode号,创建后文件不分主次,删除原文件后新创建的文件依然存在。软连接引用的是源文件的目录,删除源文件后新文件也就没了意义。
如何保证创建的软连接不发生错误呢?我们可以以使用目录作为参照,这样就不会发生错误。
ln filename linkname
不能跨分区
ln -s filename linkname
可以跨分区,源被删除,链接也不可用
12:输入输出重定向:
例子:echo 123 > test.txt :将123输出重定向到test.txt文件
echo 133> test.txt :将133输出重定向到test.txt文件,并将之前的文件内容123覆盖
echo 123 > >test.txt :将123追加输出重定向到test.txt文件。不覆盖。
Cat 11.txt 2> test1.txt :若无文件11.txt,将错误输出重定向到test1.txt。
Cat 11.txt 2>> test1.txt :若无文件11.txt,将错误输出追加重定向到test1.txt。
find /etc/ -name “*.conf” &> find.all 将正确结果错误结果一起输入到find.all。
当文件不存在时,>和>> 都能创建新文件,文件已存在时 >表示覆盖,>>表示追加。Set -c 可以禁止覆盖。Set +c:就解除禁止覆盖。 >| :强制覆盖。
2>&1 把错误的结果转成正确的结果
1>&2 把正确的结果转成错误的结果
Cat > file2.txt < /etc/fastab :将/etc/fastab的内容输出到file2.txt中。
Cat > file4.txt << EOF :从键盘往file4.txt 文件中输入,直到遇到EOF停止输入,EOF要另起一行。
四:Linux常用命令
1:用户登录信息查看
whoami 显示当前用户名 who am/are/is 任意字符 显示当前的终端信息 who 显示所有终端的信息 w 显示所有终端的详细信息及所做的操作
2:设置时间
date 102013112020.45 月日时分年[.秒] date -s '年-月-日 时:分:秒'
3:开关机
poweroff关机 reboot重启 init 0 关机 init 6 重启 shutdown -r 重启 shutdown -h 关机 shutdown +1 shutdown 20:00 shutdown -c 取消计划关机
4:echo
echo 用来在终端上输出。 -E 不开始解释功能,默认 -n 不自动换行 -e 开启解释功能 "" \a 警告声 \b 退格 \c 不换行 \n 回车换行 \r 回车,即光标移至行首,但不换行 \t 插入tab \ 插入\
5:cp
复制文件和目录命令:cp
(1)执行该命令时,如果目标文件不存在,则会创建一个目标文件,若目标文件存在,则将将会被覆盖。如果目标是一个目录,则在该目录下新建与原文件同名同内容的文件。
(2)当原文件为单个文件,目标文件不存在时,新建与原文件同名同内容的目标文件,当目标文件存在时,原目标文件将被覆盖(名字不一定相同,内容一定相同),当目标存在且为目录时,将在该目录下新建与原文件同名同内容的文件。
(3)当原文件为多个文件时,目标必须存在且为目录,在该目录下新建若干与原文件同名同内容的文件。
(4)当cp源头是目录时,此时命令中必须使用-r选项,若目标不存在则创建同名目录,复制源目录下文件到该目录。当目标存在时则必须为目录,此时将在该目录下新建若干与源目录下文件相同的文件。
(5)常用指令选项
-i:覆盖前提示 –n:不覆盖,注意两者顺序
-r, -R: 递归复制目录及内部的所有内容
-a: 归档,相当于-dR --preserv=all
-d:--no-dereference --preserv=links 不复制原文件,只复制链接名
--preserv[=ATTR_LIST]
mode: 权限
ownership: 属主属组
timestamp:
links
xattr
context
all
-p: 等同--preserv=mode,ownership,timestamp
-v: --verbose 显示复制的过程
-f: --force 当普通用户对某目录有rx权限时,使用-f可以将没有修改权限的文件强制覆盖。即删除再创建。
(6)例子:
6: tr 命令 替换字符的命令
例子:
Tr [a-z] [A-Z]:将小写换成大写
Tr -d asb :除去字符串中的asb
Tr -s 12 :除去字符串中重复的1 2
Tr -cd 12 :只保留12字符
7:管道
管道可以将前一个命令的标准输出传送到后一个命令。
例子:ls | tr [a-z] [A-Z]
2>&1 | 或 |& 将所有的结果传递给管道处理
五:常用快捷键
Ctrl+L 清屏
Ctrl+O 执行当前命令,并重新显示本命令
Ctrl+s 锁定,但仍可以运行命令。
Ctrl+q 解锁
Ctrl+C 强制结束
Ctrl+D 正常终止
Ctrl+Z 挂起(暂停)命令
Ctrl + a 光标移到命令行首,相当于Home
Ctrl + e 光标移到命令行尾,相当于End
Ctrl + xx 光标在命令行首和光标之间移动
Ctrl + u 删除光标之前的内容
Ctrl + k 删除光标这后的内容
Alt + r 清除全部内容
Alt + N 提示输入指定字符后,重复显示该字符N次(N表示具体的数字)
六:总结
在这一周的学习中,我学到了很多Linux的基础知识,这些知识不难,但很零碎,而且需要记忆。同时在学习的过程中也不能一昧死记硬背,要理解的同时合理使用man功能。在学习的过程中也出现了很多错误,在练习的过程中也有很多和老师演示不同的情形,这些都要理解透彻,搞明白。这样才能更好地提高自己。