您的位置:首页 > 运维架构 > Shell

linux 基础与shell编程[笔记]

2016-05-16 22:22 519 查看
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 <stdio.h>

/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 <stdio.h>

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 $?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: