linux主要的应用领域:
1、基于Linux的企业服务器2、嵌入式应用
linux与windows的不同(主要的几点):
1、linux严格区分大小写.2、linux中所有内容以文件形式保存,包括硬件.
3、linux不靠扩展名区分文件类型.
约定俗成:(linux不靠扩展名区分文件,而是靠权限)
压缩包: *.gz *.bz2 *.tar.bz2 *.tgz
二进制软件包: .rmp
网页文件: *.html *.php
脚本文件: *.sh
配置文件: *.conf
字符界面:(安全稳定)
占用的系统资源少
[root@localhost ~]#
root:当前登录的用户(默认为root,管理员)
localhost:主机名
~ 波浪线:代表所在位置(默认为~,家目录)
#:超级用户提示符
$: 普通用户提示符
超级用户的家目录 :/root
普通用户的家目录 :/home/xxx
pwd:显示当前所在路径
硬件文件目录 /dev
用户,用户组:一个人,一类人
用户组:为了分配权限
-rw-r--r--. 1 root root 50606 Aug 5 17:47 install.log
第一个root :所有者
第二个root : 所属组
1 : 引用的次数
文件i节点,id号
ls -i 查看文件的id号
快捷键:
ctrl+l清屏tab 命令、文件目录的补全
date 当前系统时间
ls -l = ll
fdisk -l 识别系统中存在的硬盘
ctrl+c 终止执行当前命令
ctrl+u 从光标所在位置删除到行首
ctrl+a 光标快速跳到行首
ctrl+e 光标快速跳到行尾
ctrl+z 把命令放入后台
ctrl+r 搜索历史命令
一、目录处理命令
mkdir bolsmkdir -p japan/bols (递归创建)
cd 切换目录
cd - 进入上次所在目录
相对路径,绝对路径
cd ../usr/local/src/ 从当前目录上一级目录开始找
cd /etc/ 绝对路径
pwd 打印当前所在路径
rm -rf 删除目录 (强制删除,无保留)
rm -rf /tmp/* 删除tmp目录下的所有文件
cp -r japan/ /tmp/ 拷贝目录
cp -a japan/ /tmp/ 目标文件和原文件属性一模一样
mv japan/ /tmp/ 剪切文件和目录(不需要-r)
mv ana zy 将ana文件重命名为zy
常见目录的作用:
1>下面两个目录都是用来保存系统命令的(usr目录下也有)
bin :所有用户都可以执行的命令
sbin :只有root用户可以执行的命令
2>boot:系统的启动数据存放目录
3>etc:配置文件存放目录
4>home:普通用户家目录
root:超级用户家目录
5>lib:函数库的保存位置(用的时候调用)
6>media,mnt,misc
存储设备挂载,分配盘符
这三个空目录作为外接存储设备的盘符
7>sys,proc:内存相关目录
不能修改,因为数据放内存易丢失,数据太大会导致系统内存被填,崩溃
8>usr:系统资源目录
二、链接命令
1> 硬链接 ln (不建议使用)和原文件在文件分区表中指向同一个i节点
原文件 和 硬链接其中的某一个删了,另外一个都能正常打开
原文件 和 硬链接其中一个对文件修改了,另外一个都有修改后的 状态
2> 软链接 ln -s (相当于快捷方式,原文件删除,软链接也不能打开)
用户使用软链接 -> 找到软链接的i节点 -> 找到对应的数据块block -> 找到数据块中的原文件的i节点 -> 找到原文件对应的数据块block
注意,这里创建软链接需要写绝对路径
三、文件搜索命令
1>locate 文件名(数据库为每天更新一次,updatedb手动更新数据库)在后台数据库中按文件名搜索,搜索速度快
2>find 搜索范围 搜索条件 文件名
find / -name book.xml
通配符:
* 任意内容
? 任意一个字符
[] 任意一个中括号中的字符
find /root -name "*?[abcdvh]"
find /var/log -mtime +10
在对应目录下查找10天前修改过的文件
find . -size -25k
查找当前目录下小于25k的文件
find /etc -size +20k -a -size -50k
find /etc -size +20k -o -size -50k
-a:and 查找etc目录下大小大于20k小于50k的文件
-o:or 查找etc目录下大于20k或小于50k的文件
find /etc -size +20k -a -size -50k -exec ls -l {} \;
第一条命令 -exec 第二条命令 {} \;
-exec {} \;配套使用
将第一条命令的执行结果交给第二条命令处理
grep搜索文件中符合条件的字符串
grep "size" anaconda-ks.cfg
grep -v "size" anaconda-ks.cfg
-v 取反,搜索文件中不包含size的内容
grep -rnl "size"
搜索包含响应内容的文件
四、压缩与解压缩
zip压缩格式的文件与windows中的zip格式是通用的zip longzls.zip longzls 压缩文件
zip -r jp.zip jp 压缩文件夹
unzip longzls.zip 解压文件
unzip jp.zip 解压文件夹
gzip longzls 压缩文件为.gz格式,并且删除原文件
gzip -r jp 压缩目录,将目录中的子文件压缩为.gz格式
gzip -d longzls.gz 解压缩文件
gunzip -r jp 解压目录
tar -cvf jp.tar jp 打包文件/文件夹
tar -xvf jp.tar 解包
tar -zcvf jp.tar.gz jp 将文件压缩为tar.gz格式
tar -zxvf jp.tar.gz 解压缩.tar.gz格式的文件
tar -zxvf jp.tar.gz -C /tmp/ 解压缩文件到指定的目录下(tmp)
tar -zcvf /tmp/test.tar.gz jp anaconda-ks.cfg
压缩多个文件到指定目录下
tar -ztvf jp.tar.gz 只查看压缩文件中的内容,不解压
五、关机重启命令
shutdown -r now 指定重启时间shutdown -c 撤销重启命令
shutdown -h 关机(服务器在远程,不要去关机,关机就不方便开)
reboot 重启(推荐使用)
logout 退出登录命令(特别是管理window少用户的服务器)
六、挂载命令(分盘符)
[root@localhost ~]# mount (查看当前盘符挂载情况)/dev/sda3 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
gvfs-fuse-daemon on /root/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev)
自动挂载配置: /etc/fstab
mount -a 自动挂载
可执行文件:xxx.sh
标准的格式:第一行 #!/bin/bash
执行文件一般操作步奏:
vi hello.sh
chmod 755 hello.sh 改权限才能执行
./hello.sh
挂载命令格式:
mount -o remount,noexec /home/ 重新挂载并且不能执行
**挂载光盘:(步奏)
1>虚拟机双击右下方的光盘,把对应的iso文件导入,相当于插入光盘。设备状态 --> 已连接
2>建立挂载点:(任何空目录都可以做挂载点)
mkdir /mnt/cdrom
3>挂载
mount /dev/sr0 /mnt/cdrom/
/dev/sr0为系统固定的光盘挂载的设备文件名
挂载时,默认的权限是读写,但是光盘压缩以后只能读
4>linux中用完光盘,需要卸载(注意要在要卸载的挂载目录外)
umount 设备文件或者挂载点
**挂载U盘:
挂载硬盘相当于在系统设置除系统硬盘(sda1,sda2,sda3...)外的另外一块硬盘(sdb1,sdc1...)
1>查看U盘设备文件名
如果插入U盘之后,fdisk -l 就会显示对应硬盘,是sdb1还是sdc1
2>挂载
mount -t vfat /dev/sdb1 /mnt/usb/
vfat:表示fat32文件系统,只能支持小于4G
七、查看系统登录信息,系统用户信息
w,who,last,lastloglast查看有无用户入侵
八、shell基本操作
用户的命令为ASCII通过shell转换为机器可识别的二进制值,交给内核处理.(相当于windows中的图形化界面,方便用户与系统内核交流)Shell两种:Bourne Shell 和 C Shell,因为C Shell语法与C语言的语法很相似.
echo -e "hell \n o" 加-e识别转义字符,调整输出格式 颜色输出
**脚本编写:(一系列的命令)
#!/bin/bash
#The First program #号表示注释
echo -e "\e[1;34m 哈哈哈 \e[0m"
**脚本运行:
1>chmod 755 hello.sh
./hello.sh
2>bash hello.sh
**别名与快捷键
alias ls='ls --color=never' 设置别名将别名写入下面文件就会用久生效:
vi /root/.bashrc 配置用户执行环境变量(每个用户都有对应的.bashrc文件)
source .bashrc
unalias 删除别名
**历史命令(不建议清理)
history 查看历史命令
history -w 更新历史命令到相关文件
history -c 删除历史命令
vi /etc/profile
HISTSIZE=10000 修改历史命令保存的条数
history
!n 执行历史命令中的第n条命令
!! 执行上一条命令
**输出重定向(命令输出到文件中)
linux一切皆文件
键盘对应的文件 /dev/stdin 0 标准输入
显示器对应文件 /dev/stdout 1 标准输出
/dev/stderr 2 标准错误输出
ifconfig > test.log 命令执行结果以覆盖的方式写入文件
这条命令方便于系统每天定时把日志写入文件中
ls >> test.log 命令执行结果追加到文件后面
cat okkj 2>>test.log 将命令执行的错误信息追加到文件
注意:大于号两侧不能有空格
命令 &>> 文件
这条命令是无论命令执行真确与否都写入对应文件
ifconfig &>> test2.log
ifconfig uuuu &>> test2.log
ls &>/dev/null
/dev/null为垃圾站,将命令执行的结果直接删除,有些不关心 执行过程的命令可以直接这样.
cat xdy >> success.log 2>>error.log
将命令执行的正确信息写入到success.log
错误信息写入error.log
**输入重定向:
wc < error.log 统计文件的字符数,行数,等
**管道符
date ; ls ; pwd
; :连接多个命令,多命令顺序执行
date ; ls ; date
这样可以查看ls这条命令的执行时长
但是使用;号,无论命令执行正确与否,都会执行下一条命令
ljhdn && echo i
&& :顺序执行命令,只有正确执行命令才能往下执行
jhdihhd || echo i
|| :命令一执行正确命令二不执行,命令一执行错误命令二执 行
ifjhudh && echo y || echo n
判断命令是否正确执行,正确:y,错误:n
命令1 | 命令2
命令1的执行结果作为命令2的操作对象
ls -l /etc | more
netstat -an 查看本机的网络连接
LISTEN 等待连接
ESTABLISH 正在使用
netstat -an | grep ESTABLISHED
这句表示查询正在连接的用户
netstat -an | grep ESTABLISHED | wc -l
统计正在连接的用户数
**通配符
ls hell*
ls j?
ls h[0-9][0-9]
ls hello.s[^0-9] 列出s后面没有包含0到9的文件
ls hello.s[^0-9]*
[root@localhost ~]# a=123 变量赋值
[root@localhost ~]# echo $a
123
[root@localhost ~]# echo '$a' 单引号输出
$a
[root@localhost ~]# echo "$a" 双引号输出
123
[root@localhost ~]# aa=$(ls)
$()代表赋值的是系统命令
[root@localhost ~]# echo "$aa"
先执行命令再把结果赋值给a
anaconda-ks.cfg
Desktop
Documents
Downloads
error.log
hello.sh
install.log
install.log.syslog
echo \$a \转义符
九、VI编辑器(类似于widows中的记事本)
VI --> VIM(VI的升级版)VI 按u撤销上一步的操作
设置 alias vi='vim'
过程:vi abc(创建文件) --> 进入命令模式
--> 输入i --> 进入输入模式 -->
内容写入文件 --> Esc --> 进入命令模式--> :wq(保存退出)
vi + abc 进入文件后光标定位到最后一行
vi +3 abc 进入文件后光标定位到第三行
vi +/zy abc 进入文件后光标定位到zy第一次出现的那一行,并且按n可以在出现zy的这几行中来回切换
vi aa bb cc 创建多个文件
:n编辑下一个文件
:N编辑上一个文件
**常用指令
:wq 保存退出
:q! 强制退出(忽略之前的修改)
:ls 列出当前编辑器中所有文件
:15 光标快速定位到第15行
/xxx 从光标所在位置向后搜索xxx
?xxx 光标位置向前搜索
命令模式常用指令
ctrl + f/b/d/u 翻页
dd 删除光标所在行
yy 复制光标所在行
p 在光标所在行的下一行黏贴
P 在光标所在行的上一行黏贴
...
十、磁盘管理
df -h查看磁盘空间使用的大致状况df -T查看磁盘的类型
df -lhT多个指令一起用
df -lhT -t ext4查看磁盘类型为ext4的使用情况
du -h统计磁盘上的文件大小
du -s .gconf/统计出.gconf文件的总大小
du -h *.zip统计zip文件的大小
磁盘分区和格式化:
1、主分区和扩展分区总数不能超过4个
2、扩展分区最多只能有一个
3、扩展分区不能直接存取数据(逻辑分区)
**当磁盘空间消耗殆尽,需要在保留原硬盘的基础上给服务器添加新的硬盘(通过命令行的模式)
**虚拟机中添加硬盘:
过程:关闭虚拟机 --> 编辑虚拟机设置 --> 添加 --> 硬盘 --> 创建一个新的虚拟磁盘 -->SCSI --> 设置大小 --> 启动虚拟机
linux中硬件都是以文件的形式存储于跟目录的dev目录下,硬件设备都是linux系统自动识别的,但是并不能立即使用,必须对硬盘进行分区、挂载后才能使用(分区挂载到指 定的挂载点上,才能存储数据)
**1>MBR分区模式(主分区少于4个,单个分区容量少于2TB)
fdisk 查看磁盘分区信息
-->fdisk -l
-->新增的磁盘dev/sdb已被识别,但还没有可用的分区
fdisk + 设备路径,对设备进行分区
-->fdisk /dev/sdb
输入m查看命令帮助
-->输入n创建新的分区
主分区/扩展分区 p/e
-->p
指定分区的编号1-4
-->1
指定扇区的起始位置(给出了范围)
-->回车(默认从给定的最小值开始)
指定扇区的终止位置
-->+3000M(总共大小3000M)
硬盘主分区添加成功
-->p(查看添加的硬盘的信息)
继续添加分区
-->n
添加扩展分区
-->e
指定分区的编号1-4
-->2
指定扇区的起始位置(给出了范围)
-->回车(默认从给定的最小值开始)
指定扇区的终止位置
-->回车(把剩余的都分给此分区)
硬盘扩展分区添加成功
扩展分区不能直接使用,要添加逻辑分区
-->n
系统中的扩展分区只能有一个,所以此刻出现 此扩展分区的逻辑分区
-->l(创建逻辑分区)
指定扇区的起始位置(给出了范围)
-->回车(默认从给定的最小值开始)
指定扇区的终止位置
-->+2000M(总共大小2000M)
磁盘逻辑分区添加成功
继续添加逻辑分区,并把剩余的空间都给这个 逻辑分区
-->n
-->l
-->回车
-->回车
磁盘逻辑分区添加成功
-->p(查看分区后的分区情况)
但是此时,并未把分区方式写入磁盘,感觉需要两个主分区才合理(删除分区,重新配置)
-->d(删除分区)
-->2(输入需要删除的分区编号,2为刚刚设置的扩展分区)
因为逻辑分区是在扩展分区内部的,所以删除了扩展分区,逻辑分区也被删除了
-->p(此时查看到的只有一个主分区了)
创建一个3G的主分区(同上)
-->n
-->p
-->2
-->回车
-->+3G
其余的空间分给扩展分区
-->n
-->e
-->3
-->回车
-->回车
最后在扩展分区中添加两个逻辑分区
-->n
-->l
-->回车
-->+1G
-->n
-->l
-->回车
-->回车
最后磁盘分区方案妥当,将方案写入磁盘
-->w(分区方案写入)
查看分区状况
-->fdisk -l
**2>GPT分区模式(主分区个数不限制,单个分区容量不限制,不存在主分区、扩展分区,都是一样的概念)
上述MBR模式分区,由于容量的限制,导致一些大型的服务器存储需求不足(主分区个数、单个分区容量的限制),因此学习GPT模式
为了演示,在虚拟机中添加第三块硬盘
-->parted(启动GPT分区工具)-->help帮助信息
默认的分区硬盘是系统的第一块硬盘(这里需要切换至我们需要进行分区的硬盘)
-->select /dev/sdc
给目标硬盘添加分区表的类型,之后才能添加分区
msdos为使用mbr分区表,gpt为gpt分区表
-->mklabel msdos/gpt
-->print all 查看当前硬盘的分区详情
使用parted有两种模式,交互模式/命令模式
交互模式:系统提示要操作的选项,选择y/n进行
命令模式:指令后面跟参数,不需要y/n询问,直接一步到位
-->mkpart 开始分区,这里首先使用交互模式
(parted) mkpart
Partition name? []? zy 这里指定分区的名字
File system type? [ext2]? 这里指定格式
Start? 0 这里指定哪里开始
End? 2000 哪里结束
Warning: The resulting partition is not properly aligned for best performance. 提示数据块不对齐不能达到最佳的性能
Ignore/Cancel? cancel 这里为了数据块对齐,取消重新分区
-->mkpart
Partition name? []? zy
File system type? [ext2]?
Start? 1 预留1mb给数据块进行对齐
End? 2000
现在就不会出现性能的提示了
接下来使用命令模式进行分区的创建
-->mkpart test 2000 3000 分区名加分区起始结束位置
-->mkpart abc 2500 3500 当与已分的区域有重合
Warning: You requested a partition from 2500MB to 3500MB.The closest location we can manage is 3000MB to 3500MB.
Is this still acceptable to you?
Yes/No? yes
询问是否愿意分到从3000到3500,因为2500到3000已经分到上个分区
-->rm 3 删除分区,这里rm 跟上分区的序号
继续进行分区的添加,看gpt模式分区是否可以超过5个的限制
-->mkpart abc 3000 4000
-->mkpart aa 4000 5000
-->mkpart bb 5000 6000
Number Start End Size File system Name Flags
1 1049kB 2000MB 1999MB zy
2 2000MB 3000MB 1000MB test
3 3000MB 4000MB 1000MB abc
4 4000MB 5000MB 999MB aa
5 5000MB 6000MB 1000MB bb
轻松超过5个的限制,并且gpt模式中没有主分区和扩展分区的概念,都 是分区。
分区的起始和结束的单位是MB
-->unit GB 这条命令修改设置分区起始和结束的单位
-->quit 退出parted,自动对分区进行保存
**分区的格式化
-->mkfs.ext3 /dev/sdb2 或者 mkfs -t ext3 /dev/sdb2
mkfs为makefilesystem的简写,指定文件格式和格式对象即可
**挂载分区
对分区进行格式化之后要'挂载'才能存储数据
理论上说可以把分区挂载到系统的任意位置,默认的位置是/mnt
--> mkdir /mnt/zy 创建挂载点
--> mount -t ext3 /dev/sdb1 /mnt/zy 挂载(设置文件系统类型)
--> umount /mnt/zy 卸载挂载分区
mount命令进行挂载的分区不具有永久性,系统重启就失效
-->vim + /etc/fstab
添加这行,系统就会启动时自动进行挂载
/dev/sdb1 /mnt/zy ext3 defaults 0 0
**swap分区
Swap分区在系统的物理内存不够用的时候,把硬盘空间中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自 一些很长时间没有什么操作的 程序,这些被释放的空间被临时保存Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。
如何为硬盘添加swap交换分区:
建立一个普通的linux分区 --> 修改分区类型的16进制编码 --> 格式化交换分区 --> 启用交换分区
十一、用户和用户组
用户:使用操作系统的人用户组:具有相同系统权限的一组用户
/etc/group 中存储当前系统所有用户组信息
Group : x : 123 : abc,def,xyz
组名 组密码占位符 组编号 组中用户名列表
/etc/gshadow存储当前系统中用户组的密码信息
Group : * : : abc,def,xyz
组名 组密码 组管理者 组中用户名列表
/etc/passwd存储当前系统中所有用户的信息
user : x : 123 : 456 : xxxxxxxx : /home/user : /bin/bash
用户名:密码占位符:用户编号:用户组编号:用户注释信息:用户主目录:shell类型
/etc/shadow存储当前系统中所有用户的密码信息
**用户和用户组的基本命令
groupadd sexy 添加一个组
groupmod -n market sexy 修改组名称
groupmod -g 668 market 修改组编号
groupdel market 删除用户组(必须先删除组内用户)
useradd -g sexy sdf 组内添加用户sdf
useradd -d /home/xxx zy 指定创建用户zy的家目录
usermod -l cls sdf 将用户名sdf改名为cls
userdel cls 删除用户
userdel -r cls 删除用户,并且删除用户所属文件
touch /etc/nologin 创建这个空文件就可以使普通用户不能登录系统,只有root可以登录
passwd -l cls 锁定用户cls
passwd -u cls 解锁用户cls
passwd -d cls 清除用户密码,用户可以无密码登录
**主要组和附属组
gpasswd -a cls boss 将用户cls添加到附属组boss中,这样cls就属于两个组
这里用户cls属于两个组,但是当这个用户创建文件时,默认是属于主要组的,如果要以附属组的角色创建文件,就要切换(这里需要组密码)
修改用户组的组密码
gpasswd boss
gpasswd -d cls boss 删除用户cls的附属组boss
创建用户的时候进行主要组和附属组的设置
useradd -g group1 -G group2... sdf
-g 设置主要组 -G 设置附属组