2009-07-10 13:02:00 shakesky 阅读数 948

 --linux oracle备份代理测试脚本
--(written by rfli 18:19 2009-7-9 modified 7-28)
--使用方法:在sqlplus下输入:@脚本文件名 目录 文件名
--如:@xxxx.sql /tmp test
--那么会把/tmp/test文件的内容导入表空间SAMPLE的表BLOBTEST中保存。

--打开信息输出
set serveroutput on;

declare
var_size NUMBER(12,0);
a_blob BLOB;
bfile_name BFILE;
cnt integer:=0;
 
begin
--1.新建测试数据库sample

select count(*) into cnt from dba_data_files where TABLESPACE_NAME='SAMPLE';
if cnt=0 then
--Oralce在begin 和end 之间执行语句时,加上Execute immediate

--oracle单引号的三种用法:
--1.用来引用一个字符串常量,也就是界定一个字符串的开始和结束
--2. 转义符,对紧随其后出现的字符(单引号)进行转义
--3. 表示它本身,也就是它作为一个字符串的一部分而出现在一个字符串常量中
--双引号用来表示字符串原貌,双引号可以用来引用关键词,比如TABLE,
--    其他区别:双引号" 为标示符:增加了双引号的好处:
--       (1),表名和字段能夠包含空白符
--       (2),表名和字段能夠包含$,#和_字符
--       (3),表名和字段名大小写敏感
--       (4),表名和字段名能夠使用保留字

 Execute immediate 'CREATE TABLESPACE SAMPLE NOLOGGING DATAFILE ''/u01/app/oracle/oradata/orcl/sample.dbf'' SIZE 2M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT  AUTO';
--自动增长
 Execute immediate 'alter database datafile ''/u01/app/oracle/oradata/orcl/sample.dbf'' autoextend on';
else
 dbms_output.put_line('Tablespace SAMPLE already exist.');
end if;

--2.建表,表中有BLOB字段,并被包含在sample表空间中
cnt:=0;

select count(*) into cnt from all_tables where TABLE_NAME='BLOBTEST';  --表是否存在
if cnt=0 then
 Execute immediate 'create table BLOBTEST(col1 BLOB) tablespace SAMPLE';
else
 dbms_output.put_line('Table BLOBTEST already exist.');
end if;
--3.检查sample表空间中所包含的表
Execute immediate 'select TABLE_NAME from all_all_tables where tablespace_name=''SAMPLE''';

--修改表所属表空间:如果不在SAMPLE中,那么执行下面语句
--alter table BLOBTEST move tablespace SAMPLE

--4.加载到表中的文件所在的目录
--create or replace directory utllobdir as '/opt/CA/BABoraagt/';
dbms_output.put_line('&1');
dbms_output.put_line('&2');
Execute immediate 'create or replace directory utllobdir as ''&1''';


--5.insert BLOB 数据

--第2个参数为加载到表中的文件名
bfile_name := BFILENAME('UTLLOBDIR','&2');

--DBMS_OUTPUT.PUT_LINE(bfile_name);


--select * INTO :dept_rec  from dba_directories;
insert into BLOBTEST values (empty_blob()) returning col1 into a_blob;

dbms_lob.fileopen(bfile_name);
dbms_lob.loadfromfile(a_blob, bfile_name, dbms_lob.getlength(bfile_name));
dbms_lob.fileclose(bfile_name);
commit;

--check whether insert sucessfully or not
--显示表中该字段数据大小
select sum(dbms_lob.getlength(col1)) into var_size from blobtest;
dbms_output.put_line('Now BLOB field contains '|| to_char(var_size,'999,999,999') || ' Bytes');

end;

--脚本结尾必须跟符号'/',表示告诉sqlplus可以执行了
/

 

 

测试如下:

 @ /home/oracle/Desktop/blob.sql /tmp xses-oracle.ABgS64 ;


old  49: dbms_output.put_line('&1');
new  49: dbms_output.put_line('/tmp');
old  50: dbms_output.put_line('&2');
new  50: dbms_output.put_line('xses-oracle.ABgS64');
old  51: Execute immediate 'create or replace directory utllobdir as ''&1''';
new  51: Execute immediate 'create or replace directory utllobdir as ''/tmp''';
old  57: bfile_name := BFILENAME('UTLLOBDIR','&2');
new  57: bfile_name := BFILENAME('UTLLOBDIR','xses-oracle.ABgS64');
Tablespace SAMPLE already exist.
Table BLOBTEST already exist.
/tmp
xses-oracle.ABgS64
Now BLOB field contains    4,030,820 Byte

PL/SQL procedure successfully completed.

 

补充说明:

oracle脚本中&1,&2表示传入的shell参数

||字符串连接符

在begin 与end;中的一些语句必须Execute immediate来执行

 

 

 

2010-06-18 19:11:00 xinhaozheng 阅读数 3690

在对一个大型网站爬行时,比如是有10W以上的记录时,相信谁也不能保证考虑到各方面的因素,那么就非常有必要的记录下看爬行的过程。自然你会想说把命令的输出重定向到一个文件中,以后再查看。但是,如何在当前的屏幕上也能查看呢?

 

linux中提供了一个tee命令可以结合管道达到这个目的

 

比如 ls | tee -a log.txt

 

可以进 一步的使用下列命令记录下错误信息:

 

ls 2>&1 | tee -a log.txt

 

 

2018-12-10 14:13:07 qq_36002022 阅读数 172

sushangh10学习笔记:
《Linux 就该这么学》 刘遄 著
与文件读写操作有关的重定向技术的5种模式

1.标准覆盖输出重定向
2.标准追加输出重定向
3.错误覆盖输出重定向
4.错误追加输出重定向
5.输入重定向

输入重定向:把文件导入到命令中
输出重定向:把原本要输出到屏幕(或终端)的数据信息写入到文件中

先看下图:
在这里插入图片描述
可以发现:
readme.txt文件存在,因此ls -l 指令就输出了该文件的一些相关权限、所属用户、组、文件大小、文件修改时间等信息。(标准输出)
sushangh10.txt文件不存在,因此输出了No such file or directory(错误输出)
接下来试一下将输出重定向到文件中:

man bash

查看bash解释器的帮助文档如下:
在这里插入图片描述
接下来我们用指令man bash > bash.txt将该文档输出到bash.txt文件中
再用指令cat bash.txt对文件进行查看
(太长了就截一张图好了)
在这里插入图片描述
这其实就是标准输出重定向啦。
接下来再试一下1.标准覆盖输出重定向
指令echo "Hello world" > bash.txt
在这里插入图片描述
他将原本bash解释器的帮助文档全部清空,写入“Hello world”字符串。(覆盖)
再试一下2.标准追加输出重定向
指令echo "Linux world" >>bash.txt
在这里插入图片描述
他在原本bash.txt文档后新加了一行“Linux world”字符串。(追加)
3.错误覆盖输出重定向
指令ls -l hello.txt会输出错误信息到终端:
在这里插入图片描述
在这里,我们用ls -l hello.txt 2> errout.txt可以将错误信息输出到errout.txt文件中
在这里插入图片描述
做到这一步,我想起来这并没有强调到覆盖这个关键字啊,于是我用
ls -l hello.txt 2> bash.txt 指令将错误输出重定向到bash.txt中:
在这里插入图片描述
再尝试一下4.错误追加输出重定向
指令ls -l sushangh10.txt 2> bash.txt
在这里插入图片描述
而对于5.输入重定向
刘遄老师在书中说输入重定向相对来说有些冷门,工作中遇到的概率会小一点。他的作用就是把文件直接导入到命令中。接下来就试一下吧:

wc -l < bash.txt
在这里插入图片描述
统计文件内容行数。
或许这样并没有让你明白输入重定向(这不就是一个指令嘛?哪里强调了重定向)
那么再看:
我用gedit readme.txt
将readme.txt修改成如下:
在这里插入图片描述
也就是把ls -l helloworld.txt命令写到文件readme.txt中
然后,我们在用bash解释器运行这个文件bash readme.txt
在这里插入图片描述
发现了吧,就和在终端敲入:ls -l helloworld.txt输出是一样的。
再试一下:
readme.txt改成如下:
在这里插入图片描述
然后用bash解释器运行:
在这里插入图片描述
这就是输入重定向,将要输入到终端的指令写在文本中,再用bash解释器运行文本,也就相当于在终端运行相应的指令啦。

2019-05-15 17:33:30 weixin_43583693 阅读数 149

查看文件内容

  1. head、tail 查看前几行 / 查看后几行(默认10行)
// 查看test.txt文件前3行
[root@localhost ~]# head -3 test.txt
//查看test.txt文件后5行
[root@localhost ~]# tail -5 文件名
  1. cat 文件名列表(可以将多个文件集中显示出来)(-n 加上行号)
// 查看a.txt文件与b.txt文件的内容
[root@localhost ~]# cat  a.txt b.txt
//将a.txt与b.txt文件中的内容合并放入c.txt
[root@localhost ~]# cat a.txt b.txt > c.txt
  1. more文件名可以分页展示

    1. 下一行 enter回车
    2. 下一页 空格
    3. 上一页ctrl+b
    4. 退    出q
  2. less 文件名可以分页显示还可以查询

    1. 可以上下左右键控制。
    2. 查询 /
    3. 退出 q
    4. 显示行号 -N

查找文件中的内容

  1. wc [选项] 文件名统计文件的内容(默认显示出以下三项内容)
    1. 统计行数:-l
    2. 统计单词个数:-w
    3. 统计字节数:-c
// 查询mk.txt文件的单词数
[root@localhost ~]# v.wc –w mk.txt
  1. grep [选项]查找条件文件名
    (查找满足条件的行,以行为单位进行的查找)
    1. 选项:
      -i 忽略大小写
      -v 输出不满足查找条件的语句
    2. 查找条件:
      v.“^…”以什么开头
      vi.“…$”以什么结尾
      “[正则]”包含正则的
// 查询mk.txt文件中有accp2016或accp2017的行
[root@localhost ~]# x.grep –i “201[67]” mk.txt

修改文件内容

将命令展示结果直接导入一个文件。>重定向输出

ls /home >文件名

// 将home文件夹中的所有内容注入到abc.txt文件中
[root@localhost ~]#  ls /home > abc.txt

通道过滤。 | col过滤命令(-b过滤特殊符号)

// 将mkdir的帮助文档过滤掉特殊符号后注入到manmkdir.txt中
[root@localhost ~]#  man mkdir | col -b > manmkdir.txt

//下面这条命令使用了两个管道,利用第一个管道将cat命令(显示abc.txt文件的内容)的输出送给grep命令,grep命令找出含有“/bin /bash”的
//所有行;第二个管道将grep的输出送给wc命令,wc命令统计出输入中的行数。这个命令的功能在于找出系统中有多少个用户使用bash。
[root@localhost ~]#  cat abc.txt | grep /bin/bash | wc -l

vi命令修改文件内容

选项:

  1. -R 以只读形式打开vi –R 文件名
  2. -r 恢复.swp文件vi –r .文件名(当文件异常关闭时出现的.swp缓存隐藏文件)

四个模式图

在这里插入图片描述

  1. 命令模式:

    1. 撤销:
              u 撤销一次
              U 撤销所有

    2. 删除(剪切):
              x 删除一个字母
              dw 删除一个词
              dd 删除整行
              3dd 删除3整行
              4dd 删除4整行

    3. 复制:
              yw 复制一个单词
              y$ 向后复制整行
              y^ 向前复制整行
              yy 复制整行
              3yy 复制3整行
              4yy 复制4整行

    4. 粘贴:
              p 粘贴到光标后
              P 粘贴到光标前

    5. 查询:
              /word 从上向下查
              ?word 从下向上查
              n 定位下一个
              N 定位上一个

  2. 末行模式:

    1. 替换:
              当前一行替换第一个 :s /old/new
              当前一行替换全部 :s /old/new/g
              全文替换全部 :% s/old/new/g
              从第5行到第10行替换全部 :5,10 s/old/new/g
    2. 显示行号:
               :set nu 展示行号
               :set nonu 取消行号
    3. 保存:
              :w 保存
               :w /root/newfile 另存为目录
    4. 退出:
              :q! 未修改并退出
               :wq 保存修改并退出
  3. 输入模式:
    正常输入

  4. 视图模式:

    1. 模式切换:
              v 进入视图模式
              ctrl+v 进入块视图模式

    2. 移动:
              gg 移动到文件最开头
              G 移动到文件最后一行开头
              3G 移动到第三行 4G 移动到第四行
              home键 移动到当行的开头
              end键 移动到当行的结尾

    3. 操作:
              d 删除/剪切
              y 复制

比对两个文件内容

  1. vimdiff 文件1 文件2
    选项:
            -o vimdiff –o 文件1 文件2 竖直两个窗口展示(默认水平两个窗口)
    操作:
            ctrl+ww 切换两个窗口
            【C 选中上一个不同处
            】C 选中下一个不同处
            dp 向右/下覆盖不同处。
            do 向左/上覆盖不同处
            :wqa! 保存全部修改
            :qa! 不保存全部修改
2019-12-23 12:10:19 weixin_45485922 阅读数 30

输入输出重定向

介绍
输入重定向就是将文件的信息导入到命令行中,而输出重定向则是之指把原本要输出到屏幕的数据 导入指定文件中。
  1标准输入重定向(STDIN,文件描述符为 0):默认从键盘输入,也可从其他文件或命令中输入。
   2标准输出重定向(STDOUT,文件描述符为 1):默认输出到屏幕。
  3错误输出重定向(STDERR,文件描述符为 2):默认输出到屏幕。
  
        输入重定向中用到的符号及其作用

符号 作用
命令 < 文件 将文件作为命令的标准输入
命令 << 分界符 从标准输入中读入,直到遇见分界符才停止
命令 < 文件 1 > 文件 2 将文件 1 作为命令的标准输入并将标准输出到文件 2

输出重定向中用到的符号及其作用

符号 作用
命令 > 文件 将标准输出重定向到一个文件中(清空原有文件的数据)
命令 2> 文件 将错误输出重定向到一个文件中(清空原有文件的数据)
命令 >> 文件 将标准输出重定向到一个文件中(追加到原有内容的后面)
命令 2>> 文件 将错误输出重定向到一个文件中(追加到原有内容的后面)
命令 >> 文件 2>&1 或命令 &>> 文件 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)

注意:对于重定向中的标准输出模式,可以省略文件描述符 1 不写,而错误输出模式的文件描述符 2是必须要写的

管道命令符

介绍:把前一个命令原本要输出到屏幕的标准正常数据当作是后一个命令的标准输入

命令通配符

介绍: 通配符就是通用的匹配信息的符号,比如星号(*)代表匹配零个或多个字符,问号(?)代表匹配单个字符,中括号内加上数字[0-9]代表匹配 0~ 9 之间的单个数字的字符,而中括号内加上字母[abc]则是代表匹配 a、b、c 三个字符中的任意一个字符。

常用的转义字符

介绍: 为了能够更好地理解用户的表达,Shell 解释器还提供了特别丰富的转义字符来处理输入的特殊数据。
4 个最常用的转义字符如下所示。
➢ 反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串。
➢ 单引号(’’):转义其中所有的变量为单纯的字符串。
➢ 双引号(""):保留其中的变量属性,不进行转义处理。
➢ 反引号(``):把其中的命令执行后返回结果。

环境变量

介绍:变量是计算机系统用于保存可变值的数据类型。在 Linux 系统中,变量名称一般都是大写的,这是一种约定俗成的规范。

在 Linux 系统中一切都是文件,Linux 命令也不例外。那么,在用户执行了一条命令之后,Linux 系统中到底发生了什么事情呢?简单来说,命令在 Linux 中的执行分为 4 个步骤。

第一步:判断用户是否以绝对路径或相对路径的方式输入命令 (如/bin/ls),如果是的话则直接执行。

第二步 :Linux 系统检查用户输入的命令是否为“别名命令”,即用一个自定义的命令名称来替换原本的命令名称。

第三步:Bash 解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部的指令,会被直接执行;而用户在绝大部分时间输入的是外部命令,这些命令交由步骤 4 继续处理。可以使用“type 命令名称”来判断用户输入的命令是内部命令还是外部命令。

第四步:系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作 PATH,可以简单地把它理解成是“解释器的小助手”,作用是告诉 Bash 解释器待执行的命令可能存放的位置,然后 Bash 解释器就会乖乖地在这些位置中逐个查找。PATH 是由多个路径值组成的变量,每个路径值之间用冒号间隔,对这些路径的增加和删除操作将影响到 Bash 解释器对Linux 命令的查找。

linux重定向输出

阅读数 417

没有更多推荐了,返回首页