linux 基础与shell编程
linux 系统知识
linux是一个OS ,也是一个完全免费 开源 自由软件
linux 1991 荷兰大学生课程设计 unix
GPL协议
GPL:General Public License
是一份GNU(完全自由软件操作系统)是一个广泛使用的自由软件许可证条款
常见的linux发行版本:
Debian:Debian为一款提供您安装在计算机上使用的操作系统 (OS)。操作系统就是能让您的计算机工作 的一系列基本程序和实用工具。由于 Debian 采用了 Linux Kernel (操作系统的核心),但是大部分基础的操作系统工具都来自于 GNU 工程, 因此又称为 GNU/Linux
Ubuntu:Ubuntu是一个以桌面应用为主的Linux操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词(译为吾帮托或乌班图)意思是“人性”“我的存在是因为大家的存在”
Ubuntu基于Debian发行版和GNOME桌面环境,与Debian的不同在于它每6个月会发布一个新版本。Ubuntu的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。Ubuntu具有庞大的社区力量,用户可以方便地从社区获得帮助
Fedora:Fedora 是一个开放的、创新的、前瞻性的操作系统和平台,基于 Linux。它允许任何人自由地使用、修改和重发布,无论现在还是将来。它由一个强大的社群开发,这个社群的成员以自己的不懈努力,提供并维护自由、开放源码的软件和开放的标准
readhat:RedHat是美国RedHat公司的产品,是相当成功的一个Linux发行版本,也是目前使用最多的Linux发行版本,原来的Red Hat版本早已停止技术支持其中一个是由Red Hat公司提供收费技术支持和更新的Red Hat Enterprise Linux系列;另一个是由社区开发的免费的Fedora Core系列
linux内核五大模块:进程调度模块 内存管理模块 文件系统模块 进程间通信模块 网络接口模块
进程调度模块:用来负责控制进程对CPU资源的使用
内存管理模块:用于确保所有进程能够安全地共享机器主存区,同时内存管理模块还支持虚拟内存管理方式,使得linux支持进程使用比实际内存空间更多的内存容量
文件系统模块:用于支持对外部设备的驱动和存储
进程间通信模块 :用于支持多种进程间的信息交换方式
网络接口模块:提供对多种网络通信标准的访问并支持许多网络硬件
linux系统框架
Kernel(内核)--》库,库函数--》Shell--》Applications
linux OS系统组成:
a.内核(kernel)(五大模块组成)
b.外壳(shell)
c.库函数包
d 应用程序(application)
系统用户名:root
密码:123456
终端:字符终端,通过输入字符命令 操作系统
ctrl+alt+enter 全屏/退出全屏
终端提示符:
a.[root@localhost ~]#
b.[lzl@localhost root]$
root/lzl:当前用户名
localhost:主机名
~/root:当前目录
#:当前用户是一个管理用户
$:当前用户是一般用户
[root@localhost ~]# cd /home 切换到 home 目录
[root@localhost home]#
linux系统版本信息:
[root@localhost home]# uname -a //查看系统版本信息命令
Linux localhost.localdomain 2.6.23.1-42.fc8 #1 SMP Tue Oct 30 13:55:12 EDT 2007 i686 i686 i386 GNU/Linux
linux系统版本信息=内核版本+系统版本+系统修改次数
2.6.23
2:表示内核版本,内核一般为:1,2,3
6:表示系统版本
稳定版本: 偶数
开发版本: 奇数
23:完成23次重大修改次数
MBR:系统主引导记录区,是硬盘前512个字节,存放时bootloader 程序
linux系统引导程序:bootloader(.s 机器汇编指令)
启动过程:
1.硬件通电 初始化
2.MBR中的程序加载到内存0x0000000位置
3.cpu主动从0x0000000位置读取指令,并执行,软件初始化
linux系统引导方式:
a.GRUB
B.LILO
内核空间:在内核中运行的程序,用户是不能直接访问内核,必须通过内核提供接口函数
用户空间:用户程序运行空间
init进程 是用户空间第一个执行进程,初始化用户空间环境变量等
pid:进程编号
pid=1 进程编号 init 进程 ,用户空间第一个运行也是最后结束进程
init进程读取初始化文件 initab
initab 在 etc目录下,记录系统运行级别
linux 系统运行级别:
[root@localhost proc]# cd /etc
[root@localhost proc]# vim inittab
Default runlevel. The runlevels used by RHS are:
0:关机
1:单用户模式,不需要登录
2:多用户模式,不支持NFS(网络文件系统)
3:多用模式
4:未使用
5:桌面运行模式(x11 windows)
6:重启模式
id:5:initdefault: //设置默认初始模式
如何在终端切换模式:
[root@localhost etc]# init 3 //纯字符模式
[root@localhost etc]# init 5 //图形窗体模式
[root@localhost etc]# startx //图形窗体模式
关机命令:
[root@localhost ~]# init 0 //必须是root用户
[root@localhost ~]# shutdown -h now //必须是root用户
[root@localhost ~]# halt
重启命令:
[root@localhost ~]# init 6 //必须是root用户
[root@localhost ~]# shutdown -r now //必须是root用户
[root@localhost ~]# reboot
linux是一个文件系统,都是以树形结构形式存在
"/" linux 系统跟文件
常用的跟目录介绍:
bin:存放二进制文件目录,是一般用户可执行文件,命令所对应的文件
sbin:存放二进制文件目录,是管理用户执行文件
etc:存放系统配置文件信息目录
/etc/inittab 运行级别
/etc/passwd 系统用户名
/etc/shadow 用户密码
C:\WINDOWS\system32\config\SAM window用户名
/etc/sysconfig/network-scripts/ifcfg-eth4 网络信息
dev:设备映射目录(每个设备都必须存在一个文件,操作文件就是操作该设备)
/dev/cdrom 光驱
/dev/stdin 输入设备
/dev/stdout 输出设备
/dev/stderr 错误输出设备
/dev/sda
/dev/hda
/dev/sda :SCSI 总线
/dev/hda :IDE 总线
硬盘:系统区(c:) 逻辑区(扩展区)(d: e: f:) window
sda1 c盘
sda5 d盘
sda6 e盘
root:root用户主目录(用户信息配置文件)
[root@localhost ~]# "~"当前用户主目录
home:其它用户的主目录 (.bashrc .bash_history .bash_logout)
usr:linux 最大目录存放系统库文件 头文件 内核文件等
#include
/usr/inlcude:系统默认搜索头文件目录
/usr/lib:系统默认搜索库文件目录
/usr/src/kernels/2.6.23.1-42.fc8-i686 内核存放目录
/usr/local:存放第三方文件
mnt:挂载目录(挂在外围设备)
[root@localhost mnt]# cd hgfs //hgfs挂在window共享文件目录
window共享目录挂载linux:
1.window系统中创建一个共享目录
2.vm-->settings-->options-->shared folders 按照向导操作
3.[root@localhost windshare]# cd /mnt
[root@localhost mnt]# cd hgfs //利用tab 自动补齐
挂载U盘步骤:
1.虚拟机检测到U盘(vm--->removable devices --->usb接口 --->connect)
2.[root@localhost windshare]# fdisk -l 查看磁盘信息,u盘映射文件
/dev/sdb1
System
/dev/sda1 * 1 25 200781 83 Linux
/dev/sda2 26 2349 18667530 8e Linux LVM
3.[root@localhost mnt]# mount -t vfat /dev/sdc1 /mnt 挂在命令
[root@localhost /]# cd /mnt
[root@localhost mnt]# ls
4.[root@localhost /]# umount /mnt 卸载
proc:系统正在运行映射目录(进程 资源信息)
cupinfo
meminfo
boot:系统启动目录
tmp:临时文件目录
linux常用的命令:
文件目录命令
磁盘管理命令
用户管理命令
用户及其文件授权命令
进程命令
网络命令
正则表达式相关命令(awk grep egrep)
命令格式
命令名 [选项] [参数]
选项:-|-- 出现
cd
ls
man 帮助命令
[root@localhost 1]# man ls
[root@localhost 1]# man printf //默认作为命令查找帮助
[root@localhost 1]# man n printf (n=1 2 3 4 5)
[root@localhost 1]# man 3 printf //函数帮助内容
按下"q"退出帮助
显示目录内容
ls
[root@localhost home]# ls 显示当前目录信息(默认值)
[root@localhost home]# ls /root 显示指定目录信息
[root@localhost home]# ls linuxshare
[root@localhost etc]# ls -l 列表方式显示信息
drwxr-xr-x 5 root lp 4096 2009-03-28 cups
d:文件类型,linux常见的文件类型:
-:一般文件
d:目录
l:链接文件
c:字符设备文件
b:块设备文件
s:套接字(网络通信)
p:管道文件
rwxr-xr-x:对文件访问模式 r:read w:write x:执行 -:无
5:对文件访问入口数
root:文件所有者名
lp :文件所有者所在组名
4096:大小
2009-03-28:最后修改时间/最后访问时间/文件状态变化最后时间
cups:文件名
[root@localhost etc]# ll //ls -l 别名
[root@localhost lzl]# ls -a 显示所有文件包括隐藏文件(.开头)
"." :当前目录
.. :上一级目录
[root@localhost lzl]# ls --all //单词
[root@localhost home]# ls -i inode 文件节点值
[root@localhost home]# ls -il 选项组合
[root@localhost home]# ls -ila
[root@localhost lzl]# ls -l .bashrc 查看指定文件
相对路径:从当前目录访问,后续出现目录或文件名必定是当前目录的子目录或子文件
绝对路径:从系统根目录"/"访问
[root@localhost lzl]# ls /tmp 绝路径
[root@localhost lzl]# ls tmp 相对路径
切换目录
cd
[root@localhost lzl]# cd /home
[root@localhost home]# cd linuxshare
[root@localhost home]# cd /home/linuxshare/
特殊写法:
[root@localhost linuxshare]# cd .. 返回到上一级目录
[root@localhost linuxshare]# cd ../..
[root@localhost home]# cd /
[root@localhost home]# cd ~ 切换到当前用户主目录
当前目录绝对路径值
pwd
[root@localhost linuxshare]# pwd
/home/linuxshare
创建目录
[root@localhost home]# mkdir a
[root@localhost a]# mkdir /home/b
[root@localhost home]# mkdir a1 a2 a3
[root@localhost home]# mkdir -p a4/a5 创建父子目录
创建空文件
[root@localhost a]# touch a1
[root@localhost a]# touch a2 a3
[root@localhost home]# touch a2/a21
删除空目录
rmdir
[root@localhost home]# rmdir a3 只能删除空目录
[root@localhost home]# rmdir a1 a2
删除非空目录或文件
rm
删除文件
[root@localhost a]# rm a1
[root@localhost home]# rm -f aa 无提示
删除非空目录
[root@localhost home]# rm -r a r递归删除目录
[root@localhost home]# rm -rf a
[root@localhost home]# rm -f *.c "*":匹配任意的个数不限字符
[root@localhost home]# rm -f * 删除所有文件
[root@localhost home]# rm -fr * 删除所有非空目录
复制文件
cp
cp 源文件 目标文件
[root@localhost home]# cp /etc/passwd /home
[root@localhost home]# cp /etc/passwd .
[root@localhost home]# cp /etc/passwd ./passwd2
[root@localhost home]# cp * /tmp
[root@localhost home]# cp /tmp/* .
复制目录
[root@localhost home]# cp -r a /tmp
[root@localhost home]# cp -r * /tmp
[root@localhost home]# cp -r /tmp/*
移动
mv
移动文件
[root@localhost home]# mv passwd2 b
[root@localhost b]# mv passwd2 /home/passwd3
[root@localhost home]# mv passwd3 passwd4 //重命名
移动目录
[root@localhost home]# mv aa b
[root@localhost home]# cat passwd
[root@localhost home]# head -10 passwd
[root@localhost home]# tail -10 passwd
grep 查找数据行
[root@localhost home]# grep root passwd
[root@localhost home]# cat passwd | grep root
"|"管道 :前一个进程输出作为后一个进程输入,实现两个进程通信
0:标准输入
1:标准输出
2:错误输出
[root@localhost home]# cat passwd | grep root
统计字符 单词 行数
wc
[root@localhost home]# wc abc
[root@localhost home]# wc -w abc
[root@localhost home]# wc -c abc
[root@localhost home]# wc -l abc
[root@localhost home]# cat abc | wc
[root@localhost home]# echo "abcde" | wc
重定向符号
重定向符号一般改变数据 标准输入和标准输出
输出重定向符号:
>
>>
[root@localhost home]# ls -l > abc //输出到文件(默认是标准输出)
">":先清空文件,再写文件
[root@localhost home]# ls >> abc
">>":文件追加(append),在文件原有内容末尾添加新内容
输入重定向符号:
<
<<
[root@localhost home]# wc < abc //abc是一个文件名
[root@localhost home]# cat << abc //abc是一个终止输入字符数据
指定错误输出到文件
[root@localhost home]# la 2>abc
[root@localhost home]# ls 1>abc 2>ert
[root@localhost home]# la 1>abc 2>ert
终端类型:
a. pts/0 虚拟终端
b. tty 物理终端
[root@localhost home]# who
[root@localhost home]# whoami //当前虚拟终端账号
whereis 在环境变量PATH中查找含有指定字符路径值
[root@localhost home]# whereis abc
[root@localhost home]# whereis ls
find查找文件
find 查找目录 查找方式 值
[root@localhost home]# find . -name abc
[root@localhost home]# find / -name abc
[root@localhost home]# find . -type d
[root@localhost home]# find . -size 4096c //大小必须有单位(b c w K M G)
vi/vim命令 linux自带文本编辑工具
vim三种操作模式:
a.浏览模式(打开文档默认为此模式)
b.命令模式(对文档操作命令)
c.末行模式(vim 操作命令)
通过vim打开文件或创建文件
[root@localhost home]# vim
[root@localhost home]# vim a1
操作vim 实际就是三种模式转换:
浏览模式 按下字母"i,a" 可输入数据
由可输入数据 按下"esc" 命令模式
命令模式 按下 "shift+:" 末行模式
末行模式下常用命令:
:wq 保存退出
:q! 不保存退出
:w 新文件名 另存为
:!ls 执行shell命令
:set nu 显示行号
:u 撤销上一次修改
:/查找内容/ /oo/ 高亮度显示查找数据
:%s/oo/bb/ 替换每行第一次出现"oo"
:%s/oo/bb/g 替换"oo"
:%s/\/bin/aa/g // \/ 表示'/'字符本身含义
命令模式常用命令
yy 复制当前行
nyy 复制多行数据 n=1 2 3 4 ...
pp 粘贴
dd 删除当前行
ndd 删除多行数据 n=1 2 3 4 ...
gg 定位文件开头
GG 定位文件末尾
gg=GG 自动排版
shif+~ 大小写转换
异常退出vim 生成一个交换文件,删除交换文件
.a.c.swp
[root@localhost home]# rm -f .a.c.swp
磁盘管理命令
报告文件系统空间未使用状况
df
[root@localhost home]# df
统计目录大小
du
[root@localhost home]# du
输出磁盘分区信息
fdisk
[root@localhost home]# fdisk -l
复制文件/格式转换
dd
用户管理命令
linux系统约定每个用户都必须属于一个初始化组
初始组:创建用户是,系统自动创建一个与用户名同名的组
所属组:用户属于其它组
/etc/passwd:用户信息
/etc/shadow:密码信息
/etc/group:组信息
/etc/passwd:
lzl:x:500:500::/home/lzl:/bin/bash
lzl:username
x:是否需要通过密码验证
500:uid
500:gid
/home/lzl:用户主目录路径
/bin/bash:改用户执行shell命令解释器
取消root用户密码步骤:
1.启动虚拟机,快速点击鼠标(虚拟机获取焦点)
2.按下 字母 "e"
3.按下 字母 "e"
4.移动选择第二项,按下 字母 "e"
5.空格 输入"single" 回车
6.按下 字母 "b" 重启
7.单用户模式下,输入 cd /etc
vim passwd //删除 "X" root::
reboot
adduser/useradd
[root@localhost etc]# adduser user1
[root@localhost etc]# adduser -g user1 user2
//-g指定初始组,必须保证user1先存在 ,不会创建user2组
[root@localhost etc]# adduser -G user1 user3
//-G 指定该用户也属于user1组,会创建一个初始组user3
[root@localhost home]# adduser -r user4 //不创建用户主目录
passwd
[root@localhost home]# passwd 设置当前用户密码
[root@localhost home]# passwd user1 设置指定用户密码
[root@localhost home]# cat pa | passwd user2 --stdin //从文件中读取密码
[root@localhost home]# echo "123456" | passwd user4 --stdin
切换用户
[root@localhost home]# su user1 从root切换到一般用户,不需要密码
[user1@localhost home]$ su //默认切换root用户 ,必须输入密码
[user1@localhost home]$ su root
[user2@localhost home]$ adduser user5
bash: /usr/sbin/adduser: 权限不够
[user2@localhost home]$ sudo adduser user5 //作为另一个用户(root)执行(添加 sudoer file)
删除用户
[root@localhost home]# userdel user1 删除用户
[root@localhost home]# userdel -r user2 删除用户及其主目录
[root@localhost home]# man usermod /改变用户模式
链接文件
a.符号链接(软链接)
b.硬链接
[root@localhost home]# ln -s a b
//创建符号链接,创建一个新的文件,不能离开源文件(a)操作,类似于window 快捷方式
1631062 -rw-r--r-- 1 root root 9 11-13 18:54 a
1631060 lrwxrwxrwx 1 root root 1 11-13 18:55 b -> a
文件类型是"l",该问价必定是一个符号链接文件
[root@localhost home]# ln a b
//创建硬链接文件,只是增加源文件访问入口数,并没有创建新文件,删除源文件只是减少一个入口数
1631062 -rw-r--r-- 2 root root 9 11-13 18:58 a
1631062 -rw-r--r-- 2 root root 9 11-13 18:58 b
文件模式设置
umask 设置掩码值(屏蔽值)
[root@localhost home]# umask
[root@localhost home]# umask 0 //设置临时新屏蔽值
chmod 改变文件访问模式
chmod 模式 文件名
[root@localhost home]# ./abc
bash: ./abc: 权限不够
rw-r--r--
rw-:文件的所有者访问模式值 (u)
r--:与文件的所有者同组的模式值 (g)
r--:其它组用户模式值 (o)
改变用户访问模式:u+rwx u+r u+wx u-x u-rwx u=rw
[root@localhost home]# chmod u-rx abc
改变同组用户访问模式:g+rwx g+x g-rx g=wx
[root@localhost home]# chmod g+x abc
改变其它用户访问模式:o+rwx o+x o-rx o=rx
[root@localhost home]# chmod o+rwx abc
改变所有用户访问模式: a+rwx a-x
[root@localhost home]# chmod a=rx abc
八进制表示(0-7)
rwx:
r=4 w=2 x=1 -=0每个八进制数值代表一种用户访问模式
0567 等价于:
user= 4+1=r-x
group= 6=4+2=rw-
other= 7=4+2+1=rwx
chmod 765 abc
int fd=open("ac",O_CREAT|O_RDWR,0765);
A=0765
umask=0022
filemod=0745
A=765= 111 110 101
umask=022=000 010 010
A&~umask= 111 110 101
111 101 101
filemod=745 =111 100 101
文件访问模式=预设模式 & ~uamsk
改变文件所有者
chown
[root@localhost home]# chown user12 abc //用户名user12必须存在
改变文件所属组
chgrp
[root@localhost home]# chgrp user12 abc //组名user12必须存在
环境变量:系统级变量,操作系统用来存储相关信息值,能再程序中快速获取
[root@localhost home]# echo $USER //获取当前用户
系统环境变量名一般是大写,主要是与自定义变量区分
输出变量 echo $变量名 ,否则输出是变量名
[root@localhost home]# echo $USER
[root@localhost home]# echo USER
[root@localhost home]# env //获取系统的环境变量及其值
常见的变量:
PATH:存储路径值
USER:当前用户
SHELL:当前用户的解释器
LD_LIBRARY_PATH:动态库文件路径
改变环境变量值 export
export 变量名=$变量名:/home
[root@localhost home]# gcc hello.c -o hello
[root@localhost home]# hello
bash: hello: command not found
如何解决:
1.[root@localhost home]# pwd
/home
[root@localhost home]# export PATH=$PATH:/home
[root@localhost home]# hello
2.[root@localhost home]# cp hello /usr/bin
[root@localhost home]# export PATH=$PATH:/home 所有通过此命令设置环境变量值都是临时,关闭此终端,设置无效
把设置命令存放在配置文件中 称为 永久设置
用户级:
[root@localhost home]# cd ~
[root@localhost ~]# vim .bashrc /vim bash_profile
将export PATH=$PATH:/home 加入到文件 重启一致有效
系统级:
[root@localhost ~]# cd /etc
[root@localhost etc]# vim bashrc
将export PATH=$PATH:/home 加入到文件 重启一致有效
自定环境变量:
[root@localhost etc]# export MYNAME=1234
[root@localhost etc]# env | grep MYNAME
删除环境变量
[root@localhost etc]# unset MYNAME
进程管理名
进程:正在执行的程序,是系统资源分配最小单位
32操作系统进程所占虚拟空间:4G(2^32-1) 1G:内核空间 3G:用户空间
进程分为前台和后台进程:
[root@localhost etc]# ps -aux 显示所有进程
进程状态:
1.运行状态(R):runing 正在运行或准备运行
2.可中断状态:堵塞暂停,可以依据条件或信号唤醒
3.不可中断状态(S):堵塞暂停,不能被唤醒
4.停止状态:运行结束
5.僵死状态:(D)进程运行结束,资源未释放
[root@localhost etc]# bc
ctrl+z:将前台进程变成后台进程
ctrl+c:结束当前进程
在后台运行进程
[root@localhost etc]# bc&
唤醒成为前台进程
[root@localhost etc]# fg +13375
杀死进程
[root@localhost etc]# kill -9 13375
杀死指定名称所有进程
[root@localhost etc]# killall -9 bc
动态显示运行状态
[root@localhost etc]# top
root@localhost etc]# pstree
清屏
[root@localhost etc]# echo -e '\033c'
写一个c程序实现清屏:
#include
int main()
{
//system("echo -e '\033c'");
system("echo $USER");
return 0;
}
system 函数执行shell 命令
网络设置
设置ip地址
a.临时ip地址
b.永久性ip地址
查看网卡名称:
[root@localhost etc]# ifconfig
[root@localhost etc]# ifconfig -a
ethn(n=1 2 3 4 5):虚拟机中实际网卡名
lo:本地回旋网络,系统自动创建实现系统内部通信(进程通信),127.0.0.1(localhost)表示本机
实现虚拟机与window 通信:
1. VMware Network Adapter VMnet1 虚拟网卡
VMware Network Adapter VMnet8
记住 VMware Network Adapter VMnet1 ip地址 如:192.168.80.1
2.选择虚拟机与window主机通信网卡
vm--->settings-->networking adapters --> custom virtual network (选择VMnet1)
3.在虚拟机终端设置临时IP地址:[root@localhost etc]# ifconfig eth4 192.168.80.3
4.验证是否ok:[root@localhost etc]# ping 192.168.80.1
window:运行(window+R) ping 192.168.80.3
5.关闭防火墙
linux: [root@localhost etc]# setup
window:控制面板
永久性设置
1.[root@localhost ~]# setup 依据提示一步一步设置
2.[root@localhost ~]# service network restart 必须重启服务
重启电脑后设置:
临时设置:
[root@localhost etc]# ifconfig eth4 192.168.80.3
永久性设置:
[root@localhost ~]# service network restart
桥接模式
桥接网络是指本地物理网卡和虚拟网卡通过VMnet0虚拟交换机进行桥接,物理网卡和虚拟网卡在拓扑图上处于同等地位.可以上外网
NAT模式
在NAT网络中,会用到VMware Network Adepter VMnet8虚拟网卡,主机上的VMware Network Adepter VMnet8虚拟网卡被直接连接到VMnet8虚拟交换机上与虚拟网卡进行通信
仅主机模式
在Host-Only模式下,虚拟网络是一个全封闭的网络,它唯一能够访问的就是主机
samb 共享服务 ,linux文件共享与windows
1.必须设置虚拟机与window主机网络连通
2.在虚拟机中创建一个共享目录
[root@localhost home]# mkdir share
3.修改配置文件
[root@localhost etc]# cd etc/
[root@localhost etc]# cd samba/
[root@localhost samba]# cp smb.conf smb.conf3 //备份配置文件
[root@localhost samba]# vim smb.conf
security = share
[share]
comment=share
path=/home/share
writeable=yes
public=yes
guest ok=yes
4.[root@localhost samba]# service smb start
5.window 运行 输入 \\192.168.80.4
6.授权
[root@localhost /]# chmod 777 home
[root@localhost home]# chmod 777 share
7.创建虚拟网络磁盘
我的电脑右键 --->新建网络驱动器 粘贴
linux文件压缩/解压
.tar.gz 压缩文件
创建一个压缩文件:
tar
[root@localhost home]# tar -cvzf abc.tar.gz a b c
-c:创建压缩文件
-v:输出压缩信息
-z:压缩算法(zip)
-f:接着应该是文件名
[root@localhost home]# tar -xvzf abc.tar.gz //解压到当前目录下
-x:解压选项
[root@localhost home]# tar -xvzf abc.tar.gz -C /tmp //解压到指定目录 -C改变目录
正则表达式
对文本验证一种匹配模式(格式是否符合要求,对输入内容不限制),由字母 数字 其它据哟特殊含义字符(^ $ . *)组成
对行数数据模式匹配
grep
[root@localhost home]# cat /etc/passwd | grep root
通过正则表达式数据筛选:
grep '正则表达式' 文件名
cat 文件名 | grep '正则表达式'
显示是一整行数据
常用正则表示符号含义:
^:以^后面单字符开头 如:^abcd ^a1234 ^art
$:以$前面单字符结尾 如:abcd$ ab1d 123d
.:匹配任意单个字符 如:ab.cd ab1cd abrcd \.:"."字符
*:匹配任意个任意字符 如:abc*123 abcabcd123 abc123123 \*:"*"字符
[a-z]:小写字母,匹配的是任意一个小字母
[A-Z]:匹配的是任意一个大字母
[0-9]:匹配的是任意数字字符
[abcd]:匹配的是列举中任意单个字符
\{n\} n=1 2 3 4 ...: 前面的单字符连续出现n次 如:abc\{3\} 匹配 abccc
\{n,\} n=1 2 3 4 ...:前面的单字符至少连续出现n次 如:abc\{3,\} 匹配 abccc abcccc
\{n,m\} n=1 2 3 4 ...:前面的单字符连续出现n次,但不能超过m次
如:abc\{3,5\} 匹配 abccc abcccc abccccc
[ab|123] :选择其一
[^a]:不能含有列举单字符 如:[^a-zA-Z] 1234
[root@localhost home]# cp /etc/passwd .
搜索含有"root"的所有行
[root@localhost home]# grep root passwd
[root@localhost home]# grep 'root' passwd
搜索含有"test或者taste"的所有行
[root@localhost home]# grep 't[a|e]st' passwd
搜索含有"oo"的行
[root@localhost home]# grep 'o\{2\}' passwd
[root@localhost home]# grep '[^o]o\{2,2\}[^o]' passwd
搜索含有"oo"但"oo"前不能是g的行
[root@localhost home]# grep '[^g]o\{2\}[^o]' passwd
搜索含有"oo"但"oo"前不能是a-z的行
[root@localhost home]# grep '[^a-z]o\{2\}[^o]' passwd
查找以"t"开头的行
[root@localhost home]# grep '^t' passwd
查找不以a-z,A-Z开头的行
[root@localhost home]# grep '^[^a-zA-Z]' passwd
查找以"."结尾的行
[root@localhost home]# grep '\.$' passwd
查找空行
[root@localhost home]# grep '^$' passwd
查找'g??g'形式的行,??表示可以是任意字符,但2个g之间只能有2个字符
[root@localhost home]# grep 'g..g' passwd
查找包含"oo"的行
[root@localhost home]# grep 'oo' passwd
查找包含"oo","ooo","oooo"的行
[root@localhost home]# grep '[^o]o\{2,4\}[^o]' passwd
扩展查找正则符号:
?:前面的单字符出现0次或1次
+:前面的单字符出现1次或多次
|:二选择一
(|):二选择一
egrep 实现扩展查找
[root@localhost home]# egrep 'o+' passwd
写出一个正则表达式:
字母'm'开头后面是4个连续的任意字母后面是':'后面是3个连续的字母'a'最后是's'结尾
^m[a-zA-Z]\{4\}:a\{3\}s$
awk
awk处理行数据,依据指定字符将行数据分解成多个域,可以获取每个域
域:行数数据分解的最小单位
awk 语法:
awk 文件名 //将文件中的数据行按照空格字符分解成多个域
awk -F 分割字符 文件名//指定分割字符
域表示值:
$1:第一个域
$2:第二个域
$0:数据行
awk 执行处理域语句:
a.BEGIN :在处理文档之前执行的语句,只会执行一次
b.处理文档中每行数据执行,每一行数据执行一次
c.END:处理完文档之后执行的语句 ,只会执行一次
awk 完整语法:
awk -F 分割字符 'BEGIN{}{}END{}' 文件名
| awk -F 分割字符 'BEGIN{}{}END{}' 管道提供数据
[root@localhost home]# awk '{print $0}' awkdata.txt
[root@localhost home]# awk '{print $1}' awkdata.txt
[root@localhost home]# awk -F , '{print $1}' awkdata.txt
[root@localhost home]# awk -F : '{print $1}' passwd
[root@localhost home]# cat awkdata.txt | awk -F , '{print $1}'
[root@localhost home]# awk -F : 'BEGIN{print "username"}{print $1}END{print "end"}' passwd
[root@localhost home]# grep 'oo' passwd | awk -F : '{print $1}'
[root@localhost home]# grep '[g|G]reen' awkdata.txt | awk -F , '{print $1}'
[root@localhost home]# awk -F , '{if($4~/[g|G]reen/) print $1}' awkdata.txt
[root@localhost home]# awk -F , '{if($3==48) print $1}' awkdata.txt
[root@localhost home]# awk -F , '{if($3==48) print $1; else print "no"}' awkdata.txt
[root@localhost home]# awk -F , 'BEGIN{S=0}{S=S+$6}END{print S}' awkdata.txt
[root@localhost home]# awk -F , '{if($3>48200 && $6<40) print $1}' awkdata.txt
[root@localhost home]# awk -F , '{if($3>48200 || $6<40) print $1}' awkdata.txt
统计etc目录中所有文件大小之和?
[root@localhost etc]# ls -l | awk 'BEGIN{t=0}{if($1~/^[^d]/) t=t+$5}END{print t}'
[root@localhost etc]# ls -l | grep '^[^d]' | awk 'BEGIN{t=0}{t=t+$5}END{print t}'
awk内置变量
NF:域数
NR:awk处理的行数
shell脚本
shell脚本=shell命令+逻辑
shell 脚本是一个解释性语句,没有严格语法要求
shell解释器:
/bash:解释执行shell语句
[root@localhost etc]# echo $SHELL //当前用户的shell解释器
[root@localhost etc]# cat shells //支持解释器
shell脚本文件格式:
#!/bin/bash //指定解释器,一般放在第一句
#echo "123456" //"#"注释符号,解释器不会执行注释语句
执行shell脚本文件
[root@localhost shell1001]# chmod 744 shell1.sh //授予执行权限
[root@localhost shell1001]# ./shell1.sh
[root@localhost shell1001]# bash shell1.sh
[root@localhost shell1001]# sh shell1.sh
shell脚本基本语法:
定义shell脚本变量时不需指定数据类型
name="abcde"
age=30
获取变量值:
$name
$age
name="abcd"
echo "$name"
echo $name
echo '$name' //输出$name 并非变量值
echo "'$name'"
echo '"$name"' //输出 "$name" 并非变量值
echo " my ${name}name is ${name}"//{}区分变量名
获取shell命令行参数值:
[root@localhost shell1001]# ./shell2.sh abc 123 rty //abc 123 rty 称为命令行参数值,以空格区分
按照命令行参数位置个数区分:
$0:执行的文件名
$1:第一个参数值
$n:第n个参数值
$@:所有命令行参数值
$*:所有命令行参数值
$$:执行shell脚本的进程id值(pid)
$?:记录最近执行shell语句状态: 0:成功 非0:失败
获取输入参数值
read
read name age//读取输入值,按照空格内区分,最后剩下的所有值全部赋给最后一个变量
echo 回显输出命令
每一次输出都是换行:
echo $name
echo $age
echo常用的选项和特殊字符:
\t:tab
\c:不换行
\n:换行
-e:处理特殊字符
``反单引号
控制命令执行输出,一般是将命令执行结果赋值给变量
[root@localhost shell1001]# A=`echo "abcd"`
[root@localhost shell1001]# c=`cal`
shell支持简单运算操作
1.[root@localhost shell1001]# echo $[1+2]
2.[root@localhost shell1001]# ret=`expr 1 + 2` //空格不能省
[root@localhost shell1001]# echo $ret
逻辑
语句结构
1.顺序
2.选择
3.循环
选择
a.if [ 条件 ];then
else
fi
b.if [ 条件 ]
then
else
fi
c.if [ 条件 ]
then
elsif [ 条件 ];then
else
fi
条件判断:
1.linux文件判断
-d 测试文件是否是目录文件
-s 测试文件是否非空
-f 测试文件是否存在
-w 测试文件是否可写
-L 测试文件是否是符号连接
-x 测试文件是否可执行
-r 测试文件是否可读
2.数字比较
-eq 相等
-ne 不等
-lt 小于
-le 小于等于
-gt 大于
-ge 大于等于
3.字符比较
= 相等
!= 不等
-z 空字符
-n 非空字符
获取条件判断结果:
1.test
[root@localhost shell1001]# test -d shell1.sh
[root@localhost shell1001]# echo $?
[root@localhost shell1001]# test -f shell1.sh
[root@localhost shell1001]# echo $?