Linux之我最常用的操作
更多内容,请点击:http://blog.csdn.net/weixin_37977062?viewmode=contents
-
重定向
1.普通重定向
cmd > file 2>&1
cdm >> file 2>&1
2.复杂重定向
n>&m 将输出文件m和n合并
n<&m 将输入文件m和n合并
例如:
cmd >/dev/null 2>&1
cmd >>/dev/null 2>&1
cmd < infile > outfile
执行cmd,从文件infile读取内容,然后将输出写入到outfile中
3.Here Document
cmd << HERE
document
HERE
将两个HERE之间的内容document作为输入传递给前面的命令
1.开始的HERE前后的空格会被忽略掉
2.结尾的HERE一定要定格,前面不能有任何字符,后面也不能有任何字符,包括空格和tab缩进
4.应用
cat < /etc/passwd > /tmp/backup
拷贝passwd为backup
cat /dev/cdrom > /tmp/a.iso
将光盘做成iso镜像
-
shell文件包含
1. . filename 注意之间有空格
2. source filename
注:被包含的文件不需要可执行权限
#!/bin/bash
. ./test.sh
exit 0
-
C语言调用shell脚本
1.system()调用
//system()函数原型
#include<stdlib.h>
int system(constchar *string);
//hello.c
#include<stdio.h>
int main()
{
system("bash/root/Desktop/shell/hello.sh"); /* chmod +x test.sh ,路径前面要加上bash*/
}
运行结果:
[root@localhostshell]# gcc hello.c
[root@localhostshell]# ./a.out
hello world
2.popen()
popen(char*command,char *type)
执行过程:popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh-c来执行参数command的指令。参数type可使用“r”代表读取,
“w”代表写入。依照此type值,popen()会建立管道连到子进程的标准输出设备或标准输入设备,然后返回一个文件指针。随后进程便可利
用此文件指针来读取子进程的输出设备或是写入到子进程的标准输入设备中。此外,所有使用文件指针(FILE*)操作的函数也都可以使用,
除了fclose()以外。
返回值:若成功则返回文件指针,否则返回NULL,错误原因存于errno中。
注意:在编写具SUID/SGID权限的程序时请尽量避免使用popen(),popen()会继承环境变量,通过环境变量可能会造成系统安全的问题。
//hello.c
#include<stdio.h>
int main()
{
FILE *fp;
charbuffer[80];
fp =popen("/root/Desktop/shell/hello.sh","r"); /*chmod +x test.sh */
fgets(buffer,sizeof(buffer), fp);
printf("%s",buffer);
pclose(fp);
return 0;
}
//运行结果:
[root@localhostshell]# gcc hello1.c
[root@localhostshell]# chmod +x hello.sh
[root@localhostshell]# ./a.out
hello world
-
exec函数簇
-
vim宏的录制与播放
1.宏的录制与播放
q+<register>+一系列命令+q
<register>指用户自己定义的a-z中的一个寄存器
q+<register>开始记录命令
q 完成记录,退出记录
例:qa
vim 命令
q
这个宏只记录了vim命令到寄存器a中,执行这个宏可以用命令:
@a
也可以加上执行次数:
10@a 执行10次
当你执行过一次@a之后,你可以用@@来重复执行@a
1 先建立一个宏。如上
2在任意一个文件的空白位置normal状态下,命令"ap即可以把宏的内容显示出来。
其实在vim中所谓的宏就是把一串命令放到了指定的寄存器里。所以要实现Karl的需求,可以这样做:先录制好宏后,然后在vimrc里把这个宏中的命令放到指定寄存器里,这样vim启动后就可以直接使用这个宏了。
2.配置文件保存录制的宏
具体的做法如下:
第一步:1.首先录制宏,Easwy以插入三行文字做为一个简单的例子。这三行文字是:
================================
I love vim.Happy vimming!
================================
2.按qu开始录制,录制完成后再按一个q命令结束,这样就把宏录制到寄存器u中了。
3.现在我们可以查看一下u寄存器的内容,用命令“up,把u寄存器的内容粘贴出来:
32i=^[oI lovevim. Happy vimming!^M^[32i=^[
注意,上面的^[实际上是<ESC>键的键码,同样,^M是换行键<CR>的键码,在vim中它们以特殊的颜色被显示出来,如果你把光标在它们上面移过,
你会发现它们虽被显示成两个字符,但实际上只是一个。
第二步:现在我们用下面的命令在.vimrc中输入一行:
<ESC>olet@m = "<ESC>"upa"<ESC>
这行命令实际上在.vimrc加入了这行话:
let @m ="32i=^[oI love vim. Happy vimming!^M^[32i=^["
第三步:现在你重启vi,然后直接输出下面的命令:
@m
怎么样,宏是不是生效了?!
-
echo彩色输出(VT码)
echo输出带颜色的字符串,需要加颜色的字符需要用\e[1;#输出的颜色字符\e[0m 给括起来
#输出的颜色是:
#30m = 黑色
31m=红色
32m=绿色
33m=黄色
34m=蓝色
35m=洋红
36m=青色
37m=白色
格式: echo -e "\e[1;颜色+字符串\e[0m"
例如: echo -e "\e[1;34mgoup\e[0m"
echo -e"\e[1;goup\e[0m\e[1;love\e[0m\e[1;35mximeng\e[0m"
7.alias
1.基本用法:
alias的基本使用方法为:alias新的命令='原命令-选项/参数'。举例说明,aliasl=‘ls -lsh' 将重新定义ls 命令,现在只需输入l 就可以列目录了。
2.获知别名:
直接输入alias 命令会列出当前系统中所有已经定义的命令别名。
3.删除别名:
要删除一个别名,可以使用unalias 命令,如unalias l。
4.永久生效
vim/root/.bashrc
alias vim='vi'
8.vim配置
set ts=4
set nu
set cindent
set shiftwidth=4
set tags=/myread_linux/tags
9.vish.sh
#!/bin/bash
if ! grep "^#!" "$1" &>/dev/null;then
cat >> "$1" << EOF
#!/bin/bash
#Author : goup
#Date : `date +"%F %T"`
#Description :
EOF
fi
vim +6 "$1"
更多内容,请点击:http://blog.csdn.net/weixin_37977062?viewmode=contents