学习Linux前必备专业知识
glibc库文件
应用程序
库
内核
硬件
GNU提供程序/Linux内核
POS库兼容 Portable Operating System
POSIX Linux 遵循POSIX
API规范 Application ProgramInterface
ABI:Application Binary Interface
CPU
Redhat 针对特定平台将Linux内核+GNU+安装程序
靠服务赚钱
Redhat 6.0
补丁
桌面版 redhat 6.0 8.0 9.0 2003年不见了给了这个组织 Fedora 最新版本17 支持新功能 支持新设备为目的
企业版 Redhat Enterprise Linux 3 稳定压倒一切
RHEL3
CentOS 社区企业级操作系统 Community Enterprise OS 延迟RedHat一个月
Debian 稳定社区维护 Ubuntu在Debian基础上二次研发 Mint
SUSE 属于Novel公司 欧洲统治地位
LFS Linux From Scratch 从0安装linux
Linux内核版本 https://www.kernel.org/
Redhat版本
Linux 程序版本
ALpha内测版
Beta版
RC:release candidate
3.5.4 重大变化 分支功能变化 修复bug
1994年 1.0
2.0
2.2 大众
2.4
2.6 支持对称多处理器
3.0
RHEL 5
RHEL 6
基本法则
1.一切皆文件
2.体积短小且目的单一的程序
3.组合小程序完成复杂任务
4.尽可能避免捕获用户的接口
5.配置数据保存至文本文件
发行商 发行版
文件存放路径 名称 语法格式
软件包管理 有所不同
默认工具有所不同
http://mirrors.163.com/
http://mirrors.sohu.com/
VMWareWorkstation
虚拟机只能支持32位 要想在虚拟机中运行64位虚拟机需要CPU支持虚拟化 物理机可以是32位的
Linux起始课程--引导终端和Shell
物理终端
虚拟终端
Ctrl+Alt+F#(1-6) RHEL mintetty程序生产虚拟终端 TTY
Shell(应用程序)两大类
GUI
Linux是真正可替换的图形界面
Gnome Linux默认 使用C语言
KDE Linux默认 使用C++
Xface 轻量级的图形界面
CLI
sh
bash
ksh
tcsh
zsh
除了提供命令输入 还能进行编程 将命令组合起来 形成脚本
内核--库--应用程序(服务)
Linux叫守护进程
用户进程
shell和输入输出相关用户登录后就是shell 登录前就是终端
严格区分大小写
查看当前启用的终端
echo $SHELL
查看bin下的shell
/bin/csh
能够看到终端
#tty
模拟终端
远程连接过来的 图形界面
Windows的图形界面固化到内核更改界面只是显示风格
第一次在红帽启用图形界面 startx $
工作在虚拟机终端在第七个虚拟终端 Ctrl+Alt+F7
再启动一个图形界面 startx -- :1 $
startx -- :2 $
使用ssh 连接就是模拟终端
物理终端 /dev/console
虚拟终端 /dev/tty(1-6)
模拟终端 /dev/pts
图形终端
一切接文件 /dev/keyboard
提示符 # root用户管理员
$ 普通用户登录
shell为每一个用户提供工作环境
靠环境变量
变量是内存空间 命名的空间 echo $SHELL
可以改变的都在配置文件中 配置文件的值 会存储在变量中
Name=Tom
echo $Name
Name=Jerry
echo $Name
查看变量
printenv
命令
内部命令 shell程序自带的命令
外部命令 在系统的某个路径下 有一个与命令同名的可执行程序
使用type查看命令是内部还是外部命令
type cd
type builtin
type type
文件路径
绝对路径
相对路径
工作目录 当前目录
pwd 显示当前目录 print working directory
Linux文件名称命名方式 除了回车都可以不建议使用空白 / ? * 不要超过255个字符
不考扩展名区分类型
文件和文件夹不能重名
命令 选项
command [options] [arguments]
选项
短选项 -h -l -s 选项之间使用空格隔开
短选项命令可以组合 -l -h -lh
有些命令的短选项可以不带- 通常称作BSD风格的选项 ps aux ,tar xf
有些短选项需要带参数 -L 512M
ls -lh
ls -l -h
ls --help 可以看到长参数和段参数
长选项 --help , --list
长选项不能组合
如果需要参数 长选项的参数通常需要=号 --size=1G
参数:命令的作用对象
ls /root
-L 512M
如何获取命令帮助信息
内部命令
help COMMAND
外部命令
COMMAND --help
绝大多数命令都有实验手册
man COMMAND
man 手册分章节
1.用户命令
2.系统调用 man 2 read 更改系统语言 export LANG=en
3.和库调用相关
4.特殊文件 /dev/tty1
5.文件格式(命令的配置文件的语法)
man 5 passwd能够看到配置文件
6.游戏相关
7.杂项
8.管理员命令
向后翻:SPACE键
向前翻:b键
向后:Enter键 或 向下键
向前:k键 或 向上键
q键
/KEYWORD 从文件首部向尾部搜索
?KEYWORD 从文件尾部向首部搜索
n:next
N:previos
man fdisk 查看帮助的语法格式
[]可选内容
<>必须指定的内容
| 多选一 a|b|c
… 可以有多个
{}
man date 查看date帮助
设定系统时间 07月10日10点56 2014年
Linux有两个时钟从主板读取时间后 操作系统安排时间
使用date看到的是系统时间
使用hwclock查看主板BIOS上的时间
将硬件时间更改为系统时间
man hwclock
显示日历
Cal 2014
Cal –y
显示2014年3月份日历
清屏 clear
有超链接的文档 是man的补充
Ls /use/share/doc/
Readme INSTALLATION
最好是找官方网站
Poweroff
Reboot 重启系统
Halt 切断电源
man halt
man shutdown
立即关机
shutdown –h now
30秒后关机
shutdown –h 30
在其他终端可以shutdown –c取消 关机
Shutdow -r 12:00 & 到12点就关机
6分钟后关机
Shutdown –h +6
change directory
ls
直接cd
回到用户的home目录
cd ~
cd ~student 可以切换到其他用户的home目录
相对目录
. 当前路径
..
cd ../.. 上级目录的上级目录
cd student/相对路径
cd /student 绝对路径
cd –
当前路径和上一路经来回切换
Echo $PWD两个环境变量会保存上一个路径和当前路径
cd 自己写的脚本必须 ./home/student
cd ./home/student
cd home/stduent
升序
降序
显示隐藏文件
Linux所有.开始的文件为隐藏文件
格式化的过程 就是将磁盘划分为簇
路径
严格区分大小写
可以使用任意字符除了回车和/
.开头隐藏文件
最长255字符
1.普通文件 标识为- f
2.目录文件 标识为 d
3.链接文件
软连接 符号连接 快捷方式 标识为l
硬链接 标识为-
4.特殊文件用于作为硬件设备访问的文件
块设备 随机 按块进行存取 标识为 b
字符设备 有前后顺序的 线性的按字符逐个存取的字符设备 标识为c
5.套接字文件 socket 让两个进程进行通信使用软件模拟的设备 标识为s
6.命名管道 pipe 标识为p
查看dev下面的文件
-a
-l 长格式
-r 逆序
-R 递归显示
-I 节点号
文件类型 权限 文件硬链接的个数文件的属主 属组文件大小 文件最后一次被修改的时间文件名
文件夹 不大于4K 和文件夹中文件数量和目录数量有关系
想查看目录本身属性
ls –dl /dev
显示子目录中的内容
ls –lR /dev 递归显示
/bin 二进制,为所有用户使用的可执行程序
/sbin system binaries 系统二进制程序 为管理所用
/boot static files of the boot loader 和系统启动相关的内核和bootloader的存放位置,系统必须能够访问boot目录
/dev 设备文件的存放位置
/etc Host-specific system configuration 主机相关的系统配置
/etc/X11 X Windows专门为图形界面存放配置的文件的目录
/home 用户主目录(可选的)在home中存放用户名同名的目录
/lib 基本共享库和内核模块 Essential
/media Mount Point for removeable media 为移动设备提供挂载点 光盘和U盘默认挂载点
/mnt 挂载点 第二个硬盘一般挂载到mnt
/opt add-on application softwarepackage 可选的软件安装路径 Oracle默认安装到此
/root 管理员的主目录
/srv data for service provided by this system 服务使用的数据
/tem 临时文件公共场所
/usr 最后一个r read only 不允许更改的目录存放诸系统运行相关的目录 这个目录非常大
/usr/share
/usr/bin
/usr/sbin
/usr/lib 用户为了某个服务
第三方应用程序
/usr/local/bin
/usr/local/sbin
/usr/local/lib
/usr/include 包含头文件的路径 应用开发相关的头文件的路径
/usr/src 源程序
/var 变量存放经常变化的文件
/var/spool/ Application spooldata 打印缓冲邮件缓冲
/var/log 系统日志
/var/run 而且往往新安装的程序在运行后也会在/var/run目录下面产生自己的pid文件。
pid文件的内容:pid文件为文本文件,内容只有一行, 记录了该进程的ID。
/var/lock 锁 资源争用都要加 防止多用户同时修改文件 那些进程锁那些文件记录在此
/var/cache 缓存 application cache data 缓存数据
/var/lib Variable stateinformation 软件的变化状态
/var/mail 存放用户的邮件
伪文件系统关机后这两个文件时空的
/proc存放内核信息已经启动起来的内核信息 定义内核软件功能 TCP/IP协议也在内核中 是否ping 是否启用路由
/sys 内核信息 跟硬件设备相关 磁盘 总线 配置磁盘的调度队列
每一个分区都有
Lost+found
Selinux 红帽常见的两个目录配置Linux安全
mkdir
mkdir /tmp/media
mkdir –p /tmp/m/n 先创建m再在m中创建n 参数可以放到前 也可以放到后
mkdir /tmp/m1/n1 –pv 显示创建详细过程
如何实现以下功能
mkdir /tmp/p/a/b
/tmp/q/a/b
mkdir /tmp/{h,w}/zz/bb
bash: 支持多项式展开 a*(b+c)=ab+ac
mkdir {}
思考:
使用一个命令在 /tmp下创建
etc/init.d etc/sysconfig usr/lib usr/bin usr/sbin usr/include var/spool var/run proc sys bin lib media mnt
mkdir /tem/{etc/{init.d,sysconfig},usr/{lib,bin,sbin,include},var/{spool,run},proc,sys,bin,lib,media,mnt}
rmdir 只能用于删除空目录
rmdir –p/tmp/m/n/p/q 先删除q 再删除p 再删除n
tree 用来查看目录结构 我的Linux不能用
cp 拷贝文件
cp a b c d 将a b c拷贝到d目录
cp /etc/passwd /tmp/abc
如果abc不存在则将文件passwd拷贝成abc abc父路径存在
如果abc是文件现有abc被覆盖
如果abc是目录将passwd文件将被复制到abc文件夹保留原来的文件名
cp –r /etc/sysconfig /tmp/ 复制目录
man cp
可以看到 –i参数 覆盖时是否提示覆盖
输入alias可以看到默认添加了-i参数
如果打算使用命令本身而不是别名
\cp
Cp命令默认不提示是否覆盖直接覆盖
下面的命令实际上是别名带了-i参数
-r -R 递归复制目录
-p拷贝文件保留文件的原有的权限 属主和时间戳只有管理员可以 普通用户不能保留
创建用户useradd han
修改密码 passwd han
-d 保留文件链接属性
-a 保留所有属性 相当于-dr
mv /tmp/abc /tmp/abc3
将多个文件移动到一个目录下
目录不能覆盖文件
-i
rm /tmp/a.txt
rm –r /tmp/d/* 删除d目录下的全部文件和文件夹 不删除d目录
rm –r /tmp/d 删除d文件夹和里面的文件
只有管理员能够有别名
Rm –rf /tmp/* 强制删除tmp目录下的全部文件不提示
\rm –r /tmp/* 直接删除不需确认
每一个文件都有三个时间
最近一次访问时间
最近一次修改时间 modify 文件内容变化 内容变了 属性肯定变
最近一次改变时间 元数据 文件属性的改版
文件数据
数据
元数据 文件名 大小 权限 属主属组 时间戳
查看文件的元数据 touch一下所有时间戳 都跟着变化
Stat查看文件的元数据
只更改更改时间
更改访问时间
更改访问时间为指定时间–t CCYYMMHH
如果touch的命令不存在会自动创建
-c 如果文件不存在不创建
nano 编辑器
用来显示文件类型
查看文件类型
cat可以显示文本文件内容也可以同时显示多个文本文件内容
Shift+pageup向上翻页
看显卡缓存大小 决定了翻页
cat –n 显示行数
显示非打印字符 换行符
-E
按行号逆向显示文本内容
分屏显示文本内容从前往后翻
More b键往前翻 到尾部后 不能向前翻
Space
B
Enter
K
/
?
N
N
-n 显示行数
只有tail 有下面的参数
tail –f follow一直跟踪不再退出 在另一个tty登陆编辑nano name 增加两行 ctrl+O保存 可以看到这个增加两行
Ctrl+C退出tail –f name
:分隔列
创建一个记事本文件student.txt,空格分割,一定是单个空格
显示第1列和第3列
只显示第3列
使用k字符做分隔符
translate 不能带文件 能够把文件中指定字符进行替换
将dv.txt中的内容k替换成空格
替换的字符个数最好一样h替换成A a替换成A
把小写全部转成大写
删除文本中的a
文本统计命令
4行 12个单词 63个字符
-l 行数
-w 单词数
-c 字符数
将行进行排序
降序排序
创建记事本
默认按字符排序
按数值排序 -n指定数值排序
按第3列数值排序 –t 做指定分割符 -k指定按第几个字段排序
全局配置
个人配置
BASH
配置文件
全局配置文件/etc目录下
Profile 将配置文件换分为多个 profile.d/* bashrc
用户配置文件
~目录下 ~/.bash_profile ~/.bashrc
SHELL 外壳也就是和用户交互面
bsh Borne这个人7几年研发的功能很弱 为Unux提供shell
sh 最安全和稳定
BSRG,伯克利大学Bill Joy这个人 研发了csh 和C语言接近 Csh功能比sh功能强大
ksh 商业版本的 ksh改进了csh 没有流行开来-->GNU组织开发了免费的ksh 比ksh商业版功能少
GNU:融合了Ksh csh 和sh特性重新开发 bash 学会bash可以操作Linux和Unix
功能
文件名通配符
命令补全 路径补全
命令历史
命令行编辑
命令行展开 {} 多项式
管道和重定向
命令别名
命令行编辑
光标快速移动
Ctrl+A 快速跳到行首
Ctrl+e 跳转到命令行尾
Ctrl+-->一个一个单词跳转
Ctrl+u快速删光标到行首的字符
Ctrl+k 快速删除光盘到行尾的字符
Ctrl+l clear清屏的 Windows下cls
Ctrl+c取消命令不再执行
命令补全
内部命令:shell自带的
外部命令:位于某路径下有于命令名相同的可执行程序 /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin
打印当前用户的环境 printenv 显示外部命令
正常执行命令 应该执行下面的命令
查看$PATH命令
命令补全
搜索$PATH变量定义的命令
第一次执行会搜索命令
以后直接从哈希表中搜索 可以看到命令执行了几次hits
移动命令后 再次执行 将会报告找不到文件
查看hash命令 内部命令
查看hash帮助
把WC从hash表中删除
命令加速搜索功能是bash内置功能
-r删除所有缓存
路径补全
搜索目录 根据你给出的打头路径进行搜索
cd /etc/
命令历史
bash 执行的命令 缓存至内存中 正常退出bash 重启后也能看到以前执行过的所有命令
环境变量 规定命令历史数量
保存在用户的配置文件中
查看历史大小
执行!+行数 标识执行第几条命令
执行!!就执行上一条命令
调用上一条命令的最后一个参数
ESC松开.
Alt 不松开按. 使用上一个命令最后一个参数 补齐命令
!$可以补齐上一个命令的最后一个参数
环境变量$HISTCONTROL
控制history
Ignorespace
Ignoredups
ignoreboth
重复的命令 连续重复的命令 只让出现一次
输入history只出现一次
空白字符打头的命令不想记录在
下图 命令前面有空格
输入history也记录下来
将这个参数设置为忽略以空格开始的命令
history不记录以空格开始的命令 但记录重复的命令了
忽略空格开头的命令消除重复的命令
history前面空格不记录在历史记录中 重复命令只记录一个
以下命令清除全部历史记录
helphistory
-c 清空历史记录
-w 保存缓存中的历史命令保存到历史文件
-a 附加历史命令–w覆盖历史文件
-d 4 删除第4条
将缓存的命令写入历史文件
glob通配符
特殊字符,元字符不表示字符的表面意义 而是能够匹配符合指定特征的字符串
* 任意长度字符 a
? 匹配任意单个字符
[]指定范围内的任意单个字符
匹配a-z之间任意一个字符
中间是1-9的数字文件名
文件名中间有空格
有专门的方法标识特定字符
man 7 glob
[[:alpha:]] = [a-zA-z]
[[:digit:]] == [0-9]
[[:lower:]] == [a-z]
[[:upper:]] == [A-Z]
[[:alnum:]] == [a-zA-Z0-9]
[[:space:]] == 空格
[^a-b] 除了a到b 之外的任意单个字符
[^a-z] = [^[:lower:]]