能不能在oc中直接把外部连接sae数据库数据库导入沙盒

第一资料 地图信息IOS沙盒跟sqlite简单操作分析_java之jvm学习札记十(策略和保护域)_Linux 查看资料内容的命令详解讲解__脚本百事通
稍等,加载中……
^_^请注意,有可能下面的2篇文章才是您想要的内容:
IOS沙盒跟sqlite简单操作分析
java之jvm学习札记十(策略和保护域)
Linux 查看资料内容的命令详解讲解
IOS沙盒跟sqlite简单操作分析
IOS沙盒和sqlite简单操作分析每一个IOS应用都有其自己的独立存储数据的磁盘空间,这个空间不允许其他应用访问,当然本应用也不能访问其他应用的存储空间。这个空间在IOS中叫做应用沙盒,其类似于WP中的独立存储空间。沙盒的目录结构如下:
下面简要介绍一下各个目录的作用:
Document目录一般用来保存非常重要的数据但不能太大(数据太大同步到云端需要很长时间),因为该目录可以通过itunes同步到icloud上,苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录;
tmp主要用来保存临时数据,应用关闭后,该目录下的数据会被清空;
Library的作用和Document类似,存储程序的默认设置或其它状态信息。其Preference一般保存用户的偏好设置,通过API可以非常便捷的访问该空间内存储的数据(后面的例子我们将会看到)。Caches主要用来存放缓存文件,itunes不会备份该目录,该目录在应用退出时也不会被删除;
那么我们如何来利用沙箱进行文件的存储和读取呢?
首先我们展示如何将一个Person对象保存到一个文件中(这里的扩展名是可以随便写的,这里使用的是archive方式进行的归档持久化,其实质上并不是一个.plist文件,我们知道.plist文件实质上是一个xml文件。而archive方式进行归档后的文件并不是xml格式),代码如下:- (void)createPerson
Person *one = [Person initPersonWithName:"fanly" age:22 heigth:1.7];
//获取Document路径,并在其下创建一个person.plist文件
NSString *path = [@"person.plist" documentAppend ];
[NSKeyedArchiver archiverRootOjbect:person toFile:path];
}上面代码中documentAppend方法是我们自定义的NSString的一个分类来实现的,其实现的代码如下:- (NSString *)documentAppend
//查明它到底返回的是什么
//注意此行调用到了C的函数,该函数将通过传入的参数值(两个枚举)来返回不同的目录,此处他将放回Document下的所有子目录
//因为我们的例子只有一个目录,所以得到最后一个对象即可
NSString *documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask), YES), lastObject];
return [documents stringByAppendingPathComponent:self];
那么是不是所有的对象都可以被存储到文件中呢?cocoa会聪明到知道用户的自定义的类如何转换成文件呢?答案显然是否定的,那么例子里的对象是如何被存储的呢?这是因为我们的Person对象实现了NSCoding协议,我们实现了协议的如下两个方法,这两个方法就告诉了cocoa如何持久化对象到文件中。方法如下:- (id)initWithCoder:(NSCoder *)decoder
self.name = [decoder decodeObjectForKey:@"name"];
- (void)encodeWithCoder:(NSCoder *)encoder
[encoder encoderObject:self.name forKey:@"name"];
这两个方法只是对Person的那么进行了编码和解码,自然的当我们调用[NSKeyedArchiver archiverRootOjbect:person toFile:path]进行持久化,和调用[NSKeyedUnarchiver unarciverObjectFromFile:path]自然也只能持久化和反持久化我们进行了编码和解码的属性。那些没有进行编码和解码的属性是不会被持久化的。这里需要特别注意的是,如果你的类继承了其他的类,并且这个类也实现了NSCoding协议,那么在子类实现NSCoding协议的相关方法里应该先调用父类的相关方法,这样才会使得持久化和反持久化结果正确。
我们知道在cocoa中有些类是可以直接写到.plist文件中的,例如下面这样的代码段:- (void)createPlist
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:@"fanly" forKey:@"name"];
[dict setObject:[NSMumber numberWithInt:12] forKey:@"age"];
[dict setObject:@"ugarden" forKey:@"company"];
[dict writeToFile:[@"person.plist" documentAppend] atomically:YES];
像NSArray,NSString都有类似的方法。这里需要注意的是,你往字典或者数组里面添加的对象也必须实现NSCoding协议,不然的话持久化也是会失败的。你虽然得不到任何错误信息,但是文件里面不会有任何数据。好奇心强的同学可以试一试。
以上通过 archive的方式 一次只能归档一个类,那么我想多个类一次性写到同一个文件中,我们该如何做呢?我们当然可以通过将实现了NSCoding协议的对象放到一个字段或者数组中然后利用字典或者数组的writeToFile方法将对象写到.plist文件中。那么能不能通过archive的方式实现呢?答案是肯定的,刚才的需求我们可以通过借助NSData或者NSMutableData来实现,NSData可以用来保存二进制数据,有点类似于java中的字节数组,不管你是什么类型的对象,它都是可以保存的。写入NSData中的数据会保存在内存中,然后配合NSKeyedArchiver对象就可以将对象通过archive的方式归档到文件中。当然再次强调前提,你的对象必须实现NSCoding协议。示例代码如下:
- (void)createPersons
Person *one = [Person initPersonWithName:@"fanly" age:23
heigth:1.7];
Person *tow = [Person initPersonWithName:@"frank" age:24 heigth:1.55];
NSMutableData *data = [NSMutableData data];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] iniForWritingWithMutableData:data];
[archiver encodeObject:one forKey:@"ong"];
[archiver encodeObject:tow forKey:@"tow"];
[archiver finishEncoding];
[data writeToFile:[@"persons.data" documentAppend] atomically:YES];
[archiver release];
- (void)readPersons
NSMutableData *data = [NSMutableData data];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
Person *one = [unarchiver decodeObjectForKey:@"one"];
Person *tow = [unarchiver decodeObjectForKey:@"tow"];
[unarchiver finishDecoding];
[unarchiver release];
下面我们看看如何便捷地将数据存储到Library/Preference目录中,示例代码如下:- (void)savePreference
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"fanly" forKey:@"name"];
[defaults setFloat:186 forKey:@"text_size"];
[defaults setBool:YES forKey:@"auto_login"];
[defaults synchronize];
- (void)readPreference
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
BOOL autoLogin = [defaults boolForKey:@"auot_login"];
NSLog(@"autoLogin:%i", autoLogin);
注意,在归档和反归档的时候都有个finish方法,必须调用,不然你会得到一个exception。
之前我们给一个对象实现一个copy方法的时候可能要写很多的代码,现在我们展示如何巧妙地利用NSData和NSArchiver来实现一个对象的深复制。
- (Person *)copy
NSData *data = [NSKeyedArchiver archiverDataWithRootObject:self];
Person *tow = [NSKeyedUnarchiver unarciverObjectWithData:data];
NSLog(@"0x%x-one:%@", self, self);
NSLog(@"0x%x-tow:%@", tow, tow);
每一个应用都有且只有一个NSUserDefaults实例,我们通过这个对象就可以轻松地将数据存储到应用的Library/Preference目录下,也可以通过这个NSUserDefaults实例提供的方法进行读取。
自然这里也是可以存入自定义的类的,自然也是需要实现NSCoding协议的。
下面介绍一下在IOS中如何操作sqlite数据库。
首先我们要获得数据库的运行时实例,在IOS中获得sqlite和操作相关API都是C语言的函数,所以语法比较复杂一些。下面的代码将获得一个数据库实例。//这是一个全局的实例变量,不要丢了哦
- (void)openSQLite
//该方法将在Document目录下产生一个数据库文件
NSString *databaseFileName = [@"sqlist.sql" documentAppend];
//这个方法的第二参数非常关键,如果获得链接的过程顺利,那么该方法会将数据库运行时的实例的地址修改db指针原来值,这就是我们为何要传入指针的地址值的原因。他的返回值是一个状态码,状态还有其他很多类型,请大家自行查看API进行了解。
int result = sqlite3_open([databaseFileName UTF8String], &db);
if (result != SQLITE_OK) {
NSLog(@"open database failed!");
获得数据库运行时实例后我们就可以通过该实例来操作数据库了。现在我们来创建一张表吧,代码如下:
- (void)createTable
char *sql = "create table if not exists t_person(id integer primary key autoincrement, name text, age integer)";
int result = sqlite3_exec(db, sql, NULL, NULL, &error);
if (result != SQLITE_OK) {
NSLog(@"create table error:%s", error);
接下来,我们在刚才创建的数据表中插入一条数据,代码如下:- (void)inserData
char *sql = "insert into t_person(name, age) values(?, ?);";
for (int i = 0; i & 30; i++ ) {
sqlite3_stmt *
int result = sqlite3_prepare(db, sql, -1, &stmt, NULL);
if (result != SQLITE_OK) {
NSLog(@"insert person to t_person fail");
NSString *name = [NSString stringWithFormat:@"fanly-%i", i];
sqlite3_bind_test(stmt, 1, [name UTF8String], -1, NULL);
sqlite3_bind_int(stmt, 2, 23 + i);
if ((sqlite3_step(stmt) == SQLITE_DONE)) {
NSLog(@"insert person success!")
NSLog(@"insert person faild!");
sqlite3_finalize(stmt);
}注意这里进行参数替换的时候下标是从1开始的。
下面将读取我们刚才写入的数据:- (void)findData
sqlite3_stmt *
char *sql = "select * from t_";
int result = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
if (result == SQLITE_OK) {
while (sqlite3_step(stmt) == SQLITE_ROW) {
int ID = sqlite3_column_int(stmt, 0);
char *name = (char *)sqlite3_column_text(stmt, 1);
int age = sqlite3_column_int(stmt, 2);
NSLog(@"ID:%i, name:%s, age:%i", ID, name, age);
sqlite3_finalize(stmt);
}可见如果,有多条符合条件的结果时,我们要多次执行sqlite3_step方法才能遍历出多条记录。
注意这里取得结果集中的数据时,下标是从0开始,和参数绑定的时候不同。
最后,在操作完数据库之后,记得关闭链接。sqlite3_close(db);
这里并没有,展示删除或者更新的操作。据一些资料说通过sqlite3_exec可以执行更新和删除操作,我在写这篇日志的时候还没有验证。明天会验证。还有很多sqlite3的函数值得我们去探索,有了现有的知识,再去弄清楚其他函数的作用还是很容易的事,至少我们已经知道在什么时候我们能做什么。
java之jvm学习札记十(策略和保护域)
java之jvm学习笔记十(策略和保护域)
欢迎转载请说明出处:http://blog.csdn.net/yfqnihao/article/details/8271415
前面一节,我们做了一个简单的实验,来说明什么是策略文件,在文章的最后,也顺带的讲了一下什么是策略,还有策略的作用。
为了引出另外一个很重要的概念ProtectionDomain(保护域),所以我们还是要先来回顾一下什么是策略。
首先,什么是策略,今天的东西纯粹是比较概念的。当然,如果你读过笔记九,今天的东西,就真的是soso
策略与策略文件:
java对应用程序的访问控制策略是由抽象类java.security.Policy的一个子类的单例所表示,任何时候,每个应用程序实际上只有一个Policy对象,Policy对象对应着策略文件。类装载器利用这个Policy对象来帮助他们决定,在把一段代码导入虚拟机时应该给予什么权限。
上面那段话告诉我们一个应用程序对应一个策略对象,一个策略对象对应一个策略文件。
那么策略文件,除了对我们笔记九中一个文件夹下的所有文件起限制作用外还能对什么主体起作用呢?先来看看下面的策略文件myPolicy.txt
keystore "ijvmkeys";
grant signedby "friend" {
permission java.io.FilePermission "d:/testPolicy.txt", "read,write";
grant signedby "stranger" {
permission java.io.FilePermission "d:/testPolicy.txt", "read,write";
grant codeBase "file:D:/workspace/TestPolicy/bin/*" {
permission java.io.FilePermission "d:/testPolicy.txt", "read,write";
简单的解读一下
第一行:keystore "ijvmkeys",这一行的意思,密钥对存放在当前目录一个叫ijvmkeys的文件里(记得笔记八做过的jar包签名实验吗)
第二行:grant signedby "friend",grant是授权的意思,这一行的意思是,给一个被“friend”的密钥对签名的文件授权
第三行:permission java.io.FilePermission "d:/testPolicy.txt", "read,write";这行的意思是对于d:/testPolicy.txt赋予读写的权限
倒数第三行:grant codeBase "file:D:/workspace/TestPolicy/bin/*" 这一句我们笔记九的时候见过,就是对D:/workspace/TestPolicy/bin/*下的所有文件赋予权限。
重点一:到这里我们应该可以知道,策略文件可以给一系列被签名的代码库(“friend”,‘stranger“都是代码库)授权,也可以给一个代码来源(一个具体的路径或者说url就是一个代码来源)授权。
重点二:策略文件不仅可以存储在文件中(后缀名是什么不重要),还可以存放在数据库里。
到了这里我们对策略有一个比较完整的概念了,但是你有没有这么一个疑问,前面我们总说,一个应用程序对应一个策略单例,一个策略单例对应一个策略文件,它到底怎么对应的?下面我们就来探究一下。
在探究之前,我们先引入一个新的概念叫保护域(ProtectionDomain),在笔记三的时候,我们提到过类装载器将class文件load内存的时候会将它放置到一个保护域中,是滴今天我就来说说什么是保护域。
什么是保护域
当类装载器将类型装入Java虚拟机时,它们将为每个类型指派一个保护域。保护域定义了授予一段特定代码的所有权限。(一个保护域对应策略文件中的一个或多个Grant子句。)装载入Java虚拟机的每一个类型都属于一个且仅属于一个保护域。
类装载器知道它装载的所有类或接口的代码库和签名者。它利用这些信息来创建一个CodeSource对象。它将这个CodeSource对象传递个当前Policy对象的getPermissions()方法,得到这个抽象类java.security.PermissionCollection的子类实例。这个PermissinCollection包含了到所有Permission对象的引用(这些Permission对象由当前策略授予指定代码来源)。利用它创建的CodeSource和它冲Policy对象得到的PermissionCollection,它可以实例化一个新的ProtectDomain对象。它通过将合适的ProtectionDomain对象传递给defineClass()方法,来将这段代码放到一个保护域中
如果你对上面这段话理解不了,看下面这个图
好了看完上面的这整个过程之后你是否已经理解什么是保护域了。
下面我们再整理一下今天的内容,概念有点多,一个一个的来。
codeSource:代码源,这个是类装载器生成的java.security.CodeSource的一个对象,classLoader通过读取class文件,jar包得知谁为这个类签过名(可以有多个签名者,关于签名请查看笔记七和八)而封装成一个签名者数组赋给codeSource对象的signers成员,通过这个类的来源(可能来自一个本地的url或者一个网络的ur,对应了grant笔记九里myPollicy里的"friend"或者file::....l)赋给codeSource的location成员,还有这个类的公钥证书赋给codeSource的certs成员(通常一个jar是能够被多个团体或者机构担保的,也就是我们说的认证,在java1.2的默认安全管理器还有访问控制体系结构都只能对证书起作用,而不能对赤裸的公钥起作用,而实际上,我们用keytool生成密钥对时,同时会生成一个自签名证书,所以keytool生成的密钥对并不是赤裸的)。如果你有疑问,我们看一下jdk里的代码
public class CodeSource implements java.io.Serializable {
private static final long serialVersionUID = 6013951L;
* The code location.
private URL//本地代码库
* The code signers.
private transient CodeSigner[] signers =//签名者
* The code signers. Certificate chains are concatenated.
private transient java.security.cert.Certificate certs[] =//证书
Policy:策略,就是用来读取策略文件的一个单例对象,通过传入的CodeSource对象(由于codeSource对象里包含了签名者和代码来源)所以他通过读取grant段,取出一个个的Perssiom然后返回一个PerssiomCollection。这个类里有一个很重要的成员变量
// Cache mapping
ProtectionDomain to PermissionCollection
private WeakHashMap pdM
这个成员为什么重要,我们来看一个方法
private static void initPolicy (final Policy p) {
if (policyDomain.getCodeSource() != null) {
synchronized (p.pdMapping) {
// cache of pd to permissions
p.pdMapping.put(policyDomain, policyPerms);
我们主要看关键代码。这个pdMapping就是把保护域对象当做key将权限集合当做value存在在了这个map里。所以我们说一个保护域对应多个策略文件的grant子句的permission。
ProtectionDomain:保护域,前面我们已经介绍过了,他就是用来容纳class文件,还有perssiom,codeSource的一个对象,如果你对此还有什么疑问,我们也看看它的代码,来验证一下我们的结论
public class ProtectionDomain {
/* CodeSource */
private CodeS//代码源
/* ClassLoader the protection domain was consed from */
private ClassL//类装载器
/* Principals running-as within this protection domain */
private Principal[]
/* the rights this protection domain is granted */
private PermissionCo//权限集合
Permission:权限,这个对应了我们笔记九里的grant子句里的一个permission,它的结构也很简单,权限名和动作,就好像我们笔记九里的java.io.FilePermission是一个权限名
而动作则是read和write,在Permission中它对应一个字符串。
现在我们用一张图来把上面几个概念串联起来
到这里我们已经有一条比较完整的思路了,从笔记四到这一节的笔记十,我们所要说的都只有一件事情,类装载器在装载类的时候(或者执行类)会调用安全管理器,安全管理器,则通过判断策略来判断我们是不是允许加载这个类,或者执行某些操作,允许某个文件的读写啊之类的(这个在笔记九的时候我们已经做过实验了)。那么你有没有这样的疑问,到底安全管理器是怎么样去调用策略的?这里我们不得不提出一个新的概念访问控制器AccessControl,如果你想知道访问控制器是干什么的,做什么工作,怎么和安全管理进行合作,那么请你阅读下一节。
writed by:keycoding
Linux 查看资料内容的命令详解讲解
Linux 查看文件内容的命令详解讲解
Linux 查看文件内容的命令
观看档案内容: cat, tac, more, less, head, tail, nl, 刚刚我们提到的都只是在于显示档案的外观,或者是移动与复制一个档案或目录而已,那么如果我们要视察一个档案的内容时,该如何是好呢?!这里有相当多有趣的指令可以来分享一下:最常使用的显示档案内容的指令可以说是 cat 与 more 及 less 了!此外,如果我们要查看一个很大型的档案(好几百MB 时),但是我们只需要后端的几行字而已,那么该如何是好?呵呵!用 tail 呀,此外, tac 这个指令也可以达到!好了,说说各个指令的用途吧! cat
由第一行开始显示档案内容 tac
从最后一行开始显示,可以看出 tac 是 cat 的倒着写! more 一页一页的显示档案内容 less 与 more 类似,但是比 more 更好的是,他可以往前翻页! head 只看头几行 tail 只看尾巴几行 nl
显示的时候,顺道输出行号! od
以二进制的方式读取档案 ...
摘要:本文讲述几种常用文件内容的查看工具,比如cat、more、less、head、tail等,把这些工具最常用的参数、动作介绍给新手,能让新手在短短的几分钟内上手运用。此文献给面对黑色的控制台不知所措的弟兄。
  1、cat 显示文件连接文件内容的工具;
  1.0 cat 语法结构;
  1.1 cat 查看文件内容实例;
  1.2 cat 的创建、连接文件功能实例;
  2、more 文件内容或输出查看工具;
  2.1 more 的语法、参数和动作命令;
  2.2 more 的参数应用举例;
  2.3 more 的动作指令;
  2.4 其它命令通过管道和more结合的运用例子;
  3、less 查看文件内容工具;
  3.1 less的语法格式;
  3.2 less的动作命令;
  4、head 工具,显示文件内容的前几行;
  5、tail 工具,显示文件内容的最后几行;
  6、关于本文;
  7、后记;
  8、参考文档;
  9、相关文档;
  +++++++++++++++++++++++++++++++++++++
  +++++++++++++++++++++++++++++++++++++
  1、cat 显示文件连接文件内容的工具;  cat 是一个文本文件查看和连接工具。查看一个文件的内容,用cat比较简单,就是cat 后面直接接文件名。
  比如:
  [root@localhost ~]# cat /etc/fstab
  为了便于新手弟兄灵活掌握这个工具,我们多说一点常用的参数;
  1.0 cat 语法结构;
  cat [选项] [文件]...
  -A, --show-all 等价于 -vET
  -b, --number-nonblank 对非空输出行编号
  -e 等价于 -vE
  -E, --show-ends 在每行结束处显示 $
  -n, --number 对输出的所有行编号
  -s, --squeeze-blank 不输出多行空行
  -t 与 -vT 等价
  -T, --show-tabs 将跳格字符显示为 ^I
  -u (被忽略)
  -v, --show-nonprinting 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外
  --help 显示此帮助信息并离开
  1.1 cat 查看文件内容实例;
  [root@localhost ~]# cat /etc/profile 注:查看/etc/目录下的profile文件内容;
  [root@localhost ~]# cat -b /etc/fstab 注:查看/etc/目录下的profile内容,并且对非空白行进行编号,行号从1开始;
  [root@localhost ~]# cat -n /etc/profile 注:对/etc目录中的profile的所有的行(包括空白行)进行编号输出显示;
  [root@localhost ~]# cat -E /etc/profile 注:查看/etc/下的profile内容,并且在每行的结尾处附加$符号;
  cat 加参数-n 和nl工具差不多,文件内容输出的同时,都会在每行前面加上行号;
  [root@localhost ~]# cat -n /etc/profile
  [root@localhost ~]# nl /etc/profile
  cat 可以同时显示多个文件的内容,比如我们可以在一个cat命令上同时显示两个文件的内容;
  [root@localhost ~]# cat /etc/fstab /etc/profile
  cat 对于内容极大的文件来说,可以通过管道|传送到more 工具,然后一页一页的查看;
  [root@localhost ~]# cat /etc/fstab /etc/profile | more
  1.2 cat 的创建、连接文件功能实例;
  cat 有创建文件的功能,创建文件后,要以EOF或STOP结束;
  [root@localhost ~]# cat & Linuxsir.org.txt && EOF 注:创建linuxsir.org.txt文件;
  & 我来测试 cat 创建文件,并且为文件输入内容;注:这是为linuxsir.org.txt文件输入内容;
  & 北南南北测试;注:这是为linuxsir.org.txt文件输入内容;
  & EOF 注:退出编辑状态;
  [root@localhost ~]# cat linuxsir.org.txt 注:我们查看一下linuxsir.org.txt文件的内容;
  我来测试 cat 创建文件,并且为文件输入内容;
  北南南北测试;
  cat 还有向已存在的文件追加内容的功能;
  [root@localhost ~]# cat linuxsir.txt 注:查看已存在的文件linuxsir.txt 内容;
  I am BeiNanNanBei From LinuxSir.Org . 注:内容行
  我正在为cat命令写文档
  [root@localhost ~]# cat && linuxsir.txt && EOF 注:我们向linuxsir.txt文件追加内容;
  & 我来测试cat向文档追加内容的功能;注:这是追回的内容
  & OK?
  & OK~
  & 北南呈上
  & EOF 注:以EOF退出;
  [root@localhost ~]# cat linuxsir.txt 注:查看文件内容,看是否追回成功。
  I am BeiNanNanBei From LinuxSir.Org .
  我正在为cat命令写文档
  我来测试cat向文档追加内容的功能;  OK?
  北南呈上
  cat 连接多个文件的内容并且输出到一个新文件中;
  假设我们有sir01.txt、sir02.tx和sir03.txt ,并且内容如下;
  [root@localhost ~]# cat sir01.txt
  123456
  i am testing
  [root@localhost ~]# cat sir02.txt
  BeiNan Tested
  [root@localhost ~]# cat sir03.txt
  linuxsir.org testing
  我想通过cat 把sir01.txt、sir02.txt及sir03.txt 三个文件连接在一起(也就是说把这三个文件的内容都接在一起)并输出到一个新的文件sir04.txt 中。
  注意:其原理是把三个文件的内容连接起来,然后创建sir04.txt文件,并且把几个文件的内容同时写入sir04.txt中。特别值得一提的是,如果您输入到一个已经存在的sir04.txt 文件,会把sir04.txt内容清空。
  [root@localhost ~]# cat sir01.txt sir02.txt sir03.txt & sir04.txt
  [root@localhost ~]# more sir04.txt
  123456
  i am testing
  BeiNan Tested
  linuxsir.org testing
  cat 把一个或多个已存在的文件内容,追加到一个已存在的文件中
  [root@localhost ~]# cat sir00.txt
  linuxsir.org forever
  [root@localhost ~]# cat sir01.txt sir02.txt sir03.txt && sir00.txt
  [root@localhost ~]# cat sir00.txt
  linuxsir.org forever
  123456
  i am testing
  BeiNan Tested
  linuxsir.org testing
  警告:我们要知道&意思是创建,&&是追加。千万不要弄混了。造成失误可不是闹着玩的;
  2、more 文件内容或输出查看工具;
  more 是我们最常用的工具之一,最常用的就是显示输出的内容,然后根据窗口的大小进行分页显示,然后还能提示文件的百分比;
  [root@localhost ~]# more /etc/profile
  2.1 more 的语法、参数和命令;
  more [参数选项] [文件]
  参数如下:
  +num 从第num行开始显示;
  -num 定义屏幕大小,为num行;
  +/pattern 从pattern 前两行开始显示;
  -c 从顶部清屏然后显示;
  -d 提示Press space to continue, 'q' to quit.(按空格键继续,按q键退出),禁用响铃功能;
  -l 忽略Ctrl+l (换页)字符;
  -p 通过清除窗口而不是滚屏来对文件进行换页。和-c参数有点相似;
  -s 把连续的多个空行显示为一行;
  -u 把文件内容中的下划线去掉
  退出more的动作指令是q
  2.2 more 的参数应用举例;  [root@localhost ~]# more -dc /etc/profile 注:显示提示,并从终端或控制台顶部显示;
  [root@localhost ~]# more +4 /etc/profile 注:从profile的第4行开始显示;
  <span style="line-height: 150%; font-family: 'simsun','serif'; color
如果您想提高自己的技术水平,欢迎加入本站官方1号QQ群:&&,&&2号QQ群:,在群里结识技术精英和交流技术^_^
本站联系邮箱:

我要回帖

更多关于 oc数据库 的文章

 

随机推荐