linux 基础与shell编程[笔记]

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 $?


 












你可能感兴趣的:(Linux,Linux实战)