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

开发笔记-Linux-VI-MySQL

2015-08-06 16:05 477 查看

rm命令

linux删除目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可。

直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字

-r 就是向下递归,不管有多少级目录,一并删除

-f 就是直接强行删除,不作任何提示的意思

find命令用法

find用法:

find / -name httpd.conf

微信内置浏览器对alert的特殊处理

alert在微信浏览器中会提前执行,虽然代码在后面。

sudo命令用法

linux svn 更新命令 sudo svn up。

sudo命令是个管理员分配给一些linux用户执行一些没有权限的命令。

VI模式切换和退出

进入vi编辑文件内容:

vi filename

vi进入编辑模式:

I

从编辑模式返回命令模式:

ESC

从命令模式vi退出:

:w 保存文件但不退出vi

:w file 将修改另外保存到file中,不退出vi

:w! 强制保存,不推出vi

:wq 保存文件并退出vi

:wq! 强制保存文件,并退出vi

q: 不保存文件,退出vi

:q! 不保存文件,强制退出vi

:e! 放弃所有修改,从上次保存文件开始再编辑

退出时候敲了半天“:”没反应,是因为你敲的是中文的“:”,而不是英文的“:”。

VI前进后退操作

在vi中按u可以撤销一次操作

u 撤销上一步的操作

Ctrl+r 恢复上一步被撤销的操作

注意:

如果你输入“u”两次,你的文本恢复原样,那应该是你的Vim被配置在Vi兼容模式了。

重做

如果你撤销得太多,你可以输入CTRL-R(redo)回退前一个命令。换句话说,它撤销一个撤销。要看执行的例子,输入CTRL-R两次。字符A和它后面的空格就出现了:

young intelligent turtle

有一个特殊版本的撤销命令:“U”(行撤销)。行撤销命令撤销所有在前一个编辑行

上的操作。 输入这些命令两次取消前一个“U”:

A very intelligent turtle

xxxx 删除very

A intelligent turtle

xxxxxx 删除turtle

A intelligent

用“U”恢复行

A very intelligent turtle

用“u”撤销“U”

A intelligent

“U”命令自己改变自己,“u”命令撤销操作,CTRL-R命令重做操作。这有点乱,但不用

担心,用“u”和CTRL-R命令你可以切换到任何状态。

流行的文本编辑器通常都有前进和后退功能,可以在文件中曾经浏览过的位置之间来回移动。在 vim 中使用 Ctrl-O 执行后退,使用 Ctrl-I 执行前进。

相关帮助: :help CTRL-O :help CTRL-I :help jump-motions

VI查找内容

使用vi编辑器编辑长文件时,常常是头昏眼花,也找不到需要更改的内容。

这时,使用查找功能尤为重要。

方法如下:

1、命令模式下输入“/字符串”,例如“/Section 3”。

2、如果查找下一个,按“n”即可。

要自当前光标位置向上搜索,请使用以下命令:

/pattern Enter

其中,pattern表示要搜索的特定字符序列。

要自当前光标位置向下搜索,请使用以下命令:

?pattern Enter

按下 Enter键后,vi 将搜索指定的pattern,并将光标定位在 pattern的第一个字符处。例如,要向上搜索 place一词,请键入:

vi 查找替换大全

vi/vim 中可以使用 :s 命令来替换字符串。以前只会使用一种格式来全文替换,今天发现该命令有很多种写法(vi 真是强大啊,还有很多需要学习),记录几种在此,方便以后查询。

:s/vivian/sky/ 替换当前行第一个 vivian 为 sky

:s/vivian/sky/g 替换当前行所有 vivian 为 sky

:n,s/vivian/sky/替换第n行开始到最后一行中每一行的第一个vivian为sky:n,s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
:n,s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky

n 为数字,若 n 为 .,表示从当前行开始到最后一行

:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky

:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky

可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符

:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/

:%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/

1.:s/vivian/sky/ 替换当前行第一个 vivian 为 sky

:s/vivian/sky/g 替换当前行所有 vivian 为 sky

2. :n,s/vivian/sky/替换第n行开始到最后一行中每一行的第一个vivian为sky:n,s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
:n,s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky

(n 为数字,若 n 为 .,表示从当前行开始到最后一行)

3. :%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky

:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky

4. 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符

:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/

5. 删除文本中的^M

问题描述:对于换行,window下用回车换行(0A0D)来表示,Linux下是回车(0A)来表示。这样,将window上的文件拷到Unix上用时,总会有个^M.请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。

· 使用命令:cat filename1 | tr -d “^V^M” > newfile;

· 使用命令:sed -e “s/^V^M//” filename > outputfilename。需要注意的是在1、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必须要手工进行输入,而不是粘贴。

· 在vi中处理:首先使用vi打开文件,然后按ESC键,接着输入命令:%s/^V^M//。

· :%s/^M//g如果上述方法无用,则正确的解决办法是:⋅tr−d“\r”<src>dest⋅tr−d“\015”dest⋅stringsA>B6.其它利用:s命令可以实现字符串的替换。具体的用法包括::s/str1/str2/用字符串str2替换行中首次出现的字符串str1:s/str1/str2/g用字符串str2替换行中所有出现的字符串str1:.,//g
如果上述方法无用,则正确的解决办法是:
· tr -d “\r” < src >dest
· tr -d “\015” dest
· strings A>B
6. 其它
利用 :s 命令可以实现字符串的替换。具体的用法包括:
:s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1
:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1
:., s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1

:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1

:g/str1/s//str2/g 功能同上

从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索

字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。

tail命令用法

进入tail及时检测文件更新内容:

tail -f filename

tail退出:

ctrl + c 退出

cp命令

说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息

参数:

-a 或 –archive    此参数的效果和同时指定”-dpR”参数相同

-b 或 –backup    删除、覆盖目的文件先备份,备份的文件或目录亦建立为符号链接,并指向源文件或目录链接的源文件或目录。假如没有加上这个参数,在复制过程中若遇到符号链接,则会直接复制源文件或目录

-f 或 –force     强行复制文件或目录, 不论目的文件或目录是否已经存在

-i 或 –interactive   覆盖文件之前先询问用户

-l 或 –link     对源文件建立硬链接,而非复制文件

-p 或 –preserve 保留源文件或目录的属性,包括所有者、所属组、权限与时间

-P 或 –parents 保留源文件或目录的路径,此路径可以是绝对路径或相对路径,且目的目录必须已经存在

-r 递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理

-R 或 –recursive   递归处理,将指定目录下的文件及子目录一并处理

-s 或 –symbolic-link 对源文件建立符号链接,而非复制文件

-S <备份字尾字符串> 或 –suffix=<备份字尾字符串> 用”-b”参数备份目的文件后,备份文件的字尾会被加上一个备份字符串。默认的备份字尾符串是符号”~”

-u 或 –update 使用这项参数之后,只会在源文件的修改时间(Modification Time)较目的文件更新时,或是名称相互对应的目的文件并不存在,才复制文件

-v 或 –verbose 显示执行过程

-V <备份方式> 或 –version-control=<备份方式> 指定当备份文件时,备份文件名的命名方式,有以下3种:

1.numbered或t, 将使用备份编号,会在字尾加上~1~字符串,其数字编号依次递增

2.simple或never 将使用简单备份,默认的备份字尾字符串是~, 也可通过-S来指定

3.existing或nil将使用当前方式,程序会先检查是否存在着备份编号,若有则采用备份编号,若无则采用简单备份

-x 或 –one-file-system 复制的文件或目录存放的文件系统,必须与cp指令执行时所处的文件系统相同,否则不复制,亦不处理位于其他分区的文件

–help 显示在线帮助

–sparse=<使用时机> 设置保存希疏文件的时机

–version 显示版本

示例:

.复制文件,只有源文件较目的文件的修改时间新时,才复制文件

cp -u -v file1 file2

.将文件file1复制成文件file2

cp file1 file2

.采用交互方式将文件file1复制成文件file2

cp -i file1 file2

.将文件file1复制成file2,因为目的文件已经存在,所以指定使用强制复制的模式

cp -f file1 file2

.将目录dir1复制成目录dir2

cp -R file1 file2

.同时将文件file1、file2、file3与目录dir1复制到dir2

cp -R file1 file2 file3 dir1 dir2

.复制时保留文件属性

cp -p a.txt tmp/

.复制时保留文件的目录结构

cp -P /var/tmp/a.txt ./temp/

.复制时产生备份文件

cp -b a.txt tmp/

.复制时产生备份文件,尾标 ~1~格式

cp -b -V t a.txt /tmp

.指定备份文件尾标

cp -b -S _bak a.txt /tmp

mysql命令用法

进入mysql命令:

mysql -u username -p回车

输密码

退出mysql命令:

mysql > exit;

mysql > quit;

mysql > \q;

如果以上命令都无法退出mysql则按,CTRL+C。

mysql创建用户和授权

创建用户:CREATE USER username IDENTIFIED BY ‘password’;

授权:GRANT privileges ON databasename.tablename TO username;

MySQL枚举只能插入字符串不能插入整数

MySQL中插入数据突然发生错误,只有两行插入执行成功了,其他未插入数据中。

INSERT INTO device(`code`,`status`,date_recorded) VALUES('devic3',0,NOW());
INSERT INTO device(`code`,`status`,date_recorded) VALUES('devic4',0,NOW());
INSERT INTO device(`code`,`status`,date_recorded) VALUES('devic5',1,NOW());
INSERT INTO device(`code`,`status`,date_recorded) VALUES('devic6',2,NOW());
INSERT INTO device(`code`,`status`,date_recorded) VALUES('devic7',0,NOW());
INSERT INTO device(`code`,`status`,date_recorded) VALUES('devic8',0,NOW());


mysql> INSERT INTO device(`code`,`status`,date_recorded) VALUES('devic3',0,NOW());
ERROR 1265 (01000): Data truncated for column 'status' at row 1
mysql> INSERT INTO device(`code`,`status`,date_recorded) VALUES('devic4',0,NOW());
ERROR 1265 (01000): Data truncated for column 'status' at row 1
mysql> INSERT INTO device(`code`,`status`,date_recorded) VALUES('devic5',1,NOW());
tatus`,date_recorded) VALUES('devic6',2,NOW());
INSERT INTO device(`code`,`status`,date_recorded) VALUES('devic7',0,NOW());
INSERT INTO device(`code`,`status`,date_recorded) VALUES('devic8',0,NOW());Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO device(`code`,`status`,date_recorded) VALUES('devic6',2,NOW());
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO device(`code`,`status`,date_recorded) VALUES('devic7',0,NOW());
ERROR 1265 (01000): Data truncated for column 'status' at row 1
mysql> INSERT INTO device(`code`,`status`,date_recorded) VALUES('devic8',0,NOW());commit;
ERROR 1265 (01000): Data truncated for column 'status' at row 1
Query OK, 0 rows affected (0.00 sec)


以下是表结构:

/*设备表*/
DROP TABLE IF EXISTS device;
CREATE TABLE device(
    id INT(32) PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '设备id,主键',
    `code` VARCHAR(128) UNIQUE NOT NULL COMMENT '设备唯一码',
    `status` ENUM('0','1','2') NOT NULL DEFAULT '2' COMMENT '设备状态,2未连接,0关,1开',
    date_recorded DATETIME NOT NULL COMMENT '录入时间'
)ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='设备表';


终于发现问题所在:status类型是enum类型,插入时却是int,之所以能有两句成功应该是mysql的bug。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: