从根目录查找lvlv并打印:find / -name lvlv –print
。
作用:功能类似于mv,可实现文件或者目录的重命名,但不能实现批量处理,而rename可以。
rename使用的格式:
$ rename foo foo0 foo?
rename的三个参数:
第一个参数:被替换掉的字符串
第二个参数:替换成的字符串
第三个参数:匹配要替换的文件模式
rename支持的通配符:
? 可替代单个字符
* 可替代多个字符
[charset] 可替代charset集中的任意单个字符
实例:
重命名文件lvlv为lala:rename v a lv??
。
复制dir目录到dir2:cp -R dir/ dir2
复制文件到dir2: cp a b c d dir2
然后又分了三个类别的权限,分别是: 文件所属主、文件所属组和其他用户。
更改文件zz名为DD:mv zz DD
.
使用通配符批量移动file1、file2 到files:mv file[1-2] files
.
删除目录zd:rm –rf zd
。-r表示向下递归,-f直接强行删除,不做任何提示。
删除非空目录zd:rmdir –p zd
.
将文件zd的时间修改为当前系统时间:touch zd;
或者新建一个文件lvlv:touch lvlv;
vim有四种模式,命令模式 (command mode/一般模式)、文本输入模式 (input mode/编辑模式)、视图模式和末行模式 (last line mode/指令列命令模式)。
vim打开时,默认时命令模式,键入i进入编辑模式,键入v进入视图模式,键入:进入末行模式。
默认为命令模式,进入.c文件:vi start.c
进入编辑模式:按i或者insert
按Esc退出编辑模式后进入命令模式,存盘退出::wq,不存盘退出::q!
编译start.c程序生成name.out可执行文件:gcc –o name start.c
查看文件内容:cat start.c
运行当前目录的可执行文件:./start.out
vi中跳转的快捷键:上下左右分别为:jkhl或者方向键
显示行号::set number
跳转至指定行::行号
跳转到首行:gg
跳转到尾行:G
总行数:Ctrl+g
查找string:/string
向下翻半屏:Ctrl+d
向上翻半屏:Ctrl+u
向下翻全屏:Ctrl+f
向上翻全屏:Ctrl+b
另存为指定的文件名::w 文件名
选中:v+移动光标 可以选中文本。
复制:yy复制一行,y可以复制已经选中的文本
删除:dd删除一行,删除选中x或者d,删除就是剪切,在非视图模式下,x可以删除单个字符
黏贴:p可以粘贴
撤销::u
右移一个字:w停留在单词首部,e(end)停留单词的尾部
左移一个字:b(back),
移至行头:(
移至行尾:)
查找:/search,查找search
回到上一层目录:cd ..
回到根目录:cd /
回到上次使用的目录:cd –
回到用户家目录:cd ~或cd –
cd !!是执行和显示上一条命令的结果.
注意:lvlv@echidna ~ 中 表示在当前用户的家目录, 表示是普通用户权限,#则表示超级用户权限。Echidna表示当前主机的名称,lvlv则表示当前登录的用户名称。查看当前主机名称用hostname命令。
答:grep命令是Linux系统中是一种强大的正则表达式文本搜索工具,用于查找文本内容,并把匹 配的行打印出来。
grep命令格式:
grep [options] [pattern] [files]
示例:
默认在当前目录搜索lvlv,明确要求搜索子目录:grep -r "lvlv" ./
。
显示所有以d开头的文件中包含 test的行:grep 'test' d*
。
显示在aa,bb,cc文件中匹配test的行,并显式行号:$ grep -n 'test' aa bb cc
。
显示aa中包含有至少5个连续小写字符的字符串的所有行:grep '[a-z]\{5\}' aa
。
注意,这里必须使用双引号或者单引号将查找pattern包围。单引号与双引号的区别主要有:
(1)单引号”是全引用,被单引号括起的内容不管是常量还是变量者不会发生替换;
(2)双引号”“是部分引用,被双引号括起的内容常量还是常量,变量则会发生替换,替换成变量的内容。
一般常量用单引号”括起,如果含有变量则用双引号”“括起来。但是也有意外,比如说查找特殊字符反斜杠\使用:grep '\' ./*
则会报grep: Trailing backslash错误,需要使用grep '\\' ./*
才可以。
统计文件file中含有指定字符串aaa的的行数: grep aaa file | wc -l
。
实质上,上述编译过程是分为四个阶段进行的,即预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编 (Assembly)和连接(Linking)。
一步到位编译:gcc test.c -o test.out 输出可执行文件test.out。
预处理:gcc -E test.c -o test.i 或 gcc -E test.c;
编译为汇编代码(Compilation):gcc -S test.i -o test.s;
汇编(Assembly):gcc -c test.s -o test.o,编译成目标文件test.o;
连接(Linking):gcc test.o -o test.out。
gcc –g:用于gdb调试,若不使用该命令,则无法使用gdb命令进行调试。
负责将程序的目标文件与所需的所有附加的目标文件连接起来,最终生成可执行文件。附加的目标文件包括静态连接库和动态连接库。
gcc的常见命令options:
-l:表示调用函数库,后跟库的名称,如:gcc –lssl,表示调用openssl库。
将几个文件合并为一个文件: $cat file1 file2 > file
查看文件: cat file
从键盘创建一个文件: cat > filename
。
每一个目录项中都包含了文件名和i节点。i节点包含的内容信息:文件数据存储区的地址,数据大小,等等文件信息。
i节点是linux中的,Unix中是v节点。
i节点的作用:来实现文件的查找定位,描述文件的大小和包含指向数据块的指针。
交互进程 ;批处理进程 ;监控进程(守护进程)。
格式:tar [选项] [文件目录列表]
参数:
-c 建立新的归档文件
-r 向归档文件末尾追加文件
-x 从归档文件中解出文件
-O 将文件解开到标准输出
-v 处理过程中输出相关信息
-f 对普通文件操作
-z 调用gzip来压缩归档文件,与-x联用时调用gzip完成解压缩
-Z 调用compress来压缩归档文件,与-x联用时调用compress完成解压缩
示例:将目录/home/stud/wang打包成lvlv.tar.gz
tar –cvzf lvlv.tar.gz /home/stud/wang
指多个进程之间相互通信,交换信息的方法。
System V是Unix操作系统最早的商业发行版之一,后衍生为Sun公司的Solaris。
BSD Unix 是在System V基础上开发出的Unix版本,后衍生为apple公司的MAC OS。
POSIX是Portable Operating System Interface of Unix的缩写。是一个Unix操作系统接口的标准规范。是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称,其正式称呼为IEEE 1003,而国际标准名称为ISO/IEC 9945。
make命令是一个常用的编译命令,尤其是在开发C/C++程序时,它通过Makefile文件中描述的源程序之间的依赖关系来自动进行编译。在首次执行make时,会将所有相关的文件都进行编译,而在以后make时,通常是进行增量编译,即只对修改过的源代码进行编译。
Makefile文件:是按照规定的格式编写的,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。
gdb指令是GNU的编程调试器,通常和gcc指令一起使用,编译选项加入”-g”才可使可执行文件处于debug模式。
gdb 可执行文件名:选中可执行程序;
gdb b(breakpoint):用法:b 函数名 :对此函数进行中断 ;b 文件名:行号;
gdb run:启动程序,运行至程序的断点或者结束;
gdb l(list):用法:l funcname或者l linenum;
gdb s(step):进入函数,逐语句运行;
gdb n(next):不进入函数,逐过程运行;
gdb c(continue):继续运行,跳至下一个断点;
gdb p(print):打印显示变量值;
gdb set variable=value,为变量赋值;
gdb kill:终止调试的程序;
gdb h(help):列出gdb详细命令帮助列表;
gdb clear filename.c:30:清除30行处的断点;
gdb info break:显示断点信息;
gdb delete 断点编号:断点编号是info break 后显示出来的;
gdb bt(backtrace):回溯到段出错的位置;
gdb frame 帧号:帧号是bt命令产生的堆栈针;
gdb q:退出;
浅蓝色:表示链接文件;
灰色:表示其他文件;
绿色:表示可执行文件;
红色:表示压缩文件;
蓝色:表示目录;
红色闪烁:表示链接的文件有问题了;
黄色:表示设备文件,包括block,char,fifo。
一个h表示short,即short int
两个h表示short short,即 char。
%hhx用于输出char
%hx用于输出short int.
a. 程序包含openssl库时,需要编译时,利用命令选项-l指明库,比如gcc –lssl pgm.c;
注意:makefile中的命令必须要以Tab键空格;
= 是最基本的赋值
:= 是覆盖之前的值,
?= 是如果没有被赋值过就赋予等号后面的值
+= 是添加等号后面的值
其中=与:=区别
1.1“=”
make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。看例子:
x = foo
y = $(x) bar
x = xyz
在上例中,y的值将会是 xyz bar ,而不是 foo bar 。
1.2“:=”
“:=”表示变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。
x := foo
y := $(x) bar
x := xyz
在上例中,y的值将会是foo bar。
2.1 wildcard : 扩展通配符
用法:$(wildcard ./*.c)”来获取工作目录下的所有的.c文件列表;
2.2 notdir : 去除路径
src=$(wildcard .c ./sub/.c)
dir= (notdir (src))
则dir的内容是a.c b.c sa.c sb.c,notdir把展开的文件去除掉路径信息
2.3 patsubst :替换通配符
用法: (patsubst (wildcard *.c))
首先使用“wildcard”函数获取工作目录下的.c文件列表;之后将列表中所有文件名的后缀.c替换为.o。这样我们就可以得到在当前目录可生成的.o文件列表。因此在一个目录下可以使用如下内容的Makefile来将工作目录下的所有的.c文件进行编译并最后连接成为一个可执行文件:
#sample Makefile
objects := $(patsubst %.c,%.o,$(wildcard *.c))
foo : $(objects)
cc -o foo $(objects)
VPATH指定makefile中所有文件的搜索路径,包括依赖文件和目标文件。 变量“VPATH”的定义中,使用空格或者冒号(:)将多个目录分开。如:
VPATH = src:./include:./src/xmlparser:./lib
vpath指定符合条件的文件的搜索路径,如:
vpath PATTERN DIRECTORIES
vpath %.h include //指定.h类型文件的搜索路径是include
vpath %.cpp src //指定.cpp类型文件的搜索路径是src
此外,vpath PATTERN
的作用是清除之前符合模式“PATTERN”的文件设置的搜索路径。
vpath
表示清除所有已被设置的文件搜索路径。
用法.Phony Targets
表示:
目标不是实际存在文件,而是makefile中自定义的命令。
screen是GNU计划开发的用于终端命令行的管理工具,可以新建和管理多个终端命令行会话,并提供切换,分离,挂接等相应的功能。
其重要的特点就是终端断开连接后,screen新建的命令行会话中的程序和任务是保存在后台运行的,不会因为终端窗口关闭或者断开连接而终止执行。
screen常用命令有:
screen -S yourname
: 新建一个叫yourname的session;
screen -ls
: 列出当前所有的screen session,注意显示的screen会话的命名格式是pid.name,其中pid指的是screen的进程号,name就是screen会话的名称。
screen -r yourname
: 回到yourname这个session;
screen -d yourname
: 远程detach某个session;
screen -d -r yourname
: 分离已经连接的session,重新回到yourname。
exit
:关闭当前窗口,并且切换到下一个窗口(当退出最后一个窗口时,该screen会话自动终止,并且退回到原始shell状态)。
进入一个screen会话中,才可以切换窗口,常用的快捷键有:
Ctrl+a+c:创建一个新的运行shell的窗口并切换到该窗口。
Ctrl+a+n:切换到下一个 window 。
Ctrl+a+p:切换到前一个 window 。
Ctrl+a+d:分离当前screen会话,即退出当前screen会话。
一个原则是:应该尽量少的使用parallel for, 因为parallel for也需要时间开销。即:
(1)如果外层循环次数远远小于内层循环次数,内层循环较多时,将parallel for加在
内层循环。
示例代码:
int a=0;
int b=0;
inline void openmpTest2(int thread_num)
{
for(int i=0;i<100;i++)
{
#pragma omp parallel for num_threads(thread_num)
for(int j=0;j<1000000000;j++)
{
a++;
}
#pragma omp parallel for num_threads(thread_num)
for(int j=0;j<1000000000;j++)
{
b++;
}
}
}
(2)否则将parallel加在最外层循环,一般情况都是这样。二者可对比性能进行选择。
示例代码:
int a=0;
int b=0;
inline void openmpTest1(int thread_num)
{
#pragma omp parallel for num_threads(thread_num)
for(int i=0;i<1000000000;i++)
{
for(int j=0;j<1000000000;j++)
{
a++;
}
for(int j=0;j<1000000000;j++)
{
b++;
}
}
}
su常见用法:
(1)切换用户:su username,未指定username默认切换至root。
sudo常见用法:
(1)切换至指定用户后执行指定命令
sudo –u username command
注意,未指定用户名默认切换至root,如果用户授权文件/etc/sudousers中未指定用户所能执行的管理指令,则需要输入root密码。执行完命令后,立即返回当前用户。
用户相关配置文件有:
/etc/group、/etc/passwd和/etc/shadow。