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

Linux学习阶段性总结

2011-09-10 21:11 274 查看
一、linux基础
最近学linux下的C编程,就又从新装了Fedora。学过就是好捡,在总结一下熟悉的知识点吧,看看有没有不会的。

1、linux系统相关知识:linux是个开源的系统,有不同的版本,安装在\ 目录下,存储格式为ext3。
2、文件管理命令:进入、退出、建立、删除、查看、更改文件
3、VI编辑器:yy复制、p粘贴、:wq退出、a后移一位输入、i当前位输入
4、基本指令: linux 指令熟悉

who 察看有谁登陆,以及控制终端号。
tar -cvf a.tar.gz photoes 将photoes 打包为a.tar.gz
tar -xvf a.tar.gz 把文件解压到当前目录下
sync 数据同步写入磁盘。
chattr +i a 赋予a隐藏属性,使a不可删除与更改。去掉的方法 chattr -i a。lsattr显示文件的隐藏属性。
top 动态显示变化的进程。



5、用户和权限管理: Linux 添加用户 ,帐号管理 ,群组管理 详解

所有用户的ID都存放在/etc/passwd 中 例如

fsy:x:500:500:Fedora:/home/fsy:/bin/bash

信息内容依次为:用户名、密码(一个形式)、UID(UID为0时为root权限)、GID、用户信息说明栏、家目录、Shell。用户登陆的过程是这样的:首先在/etc/passwd中寻找是否有相应的帐号,如果没有则跳出,如果有的话则将该账号对应的UID 与GID 读出来,另外,该账号的家目录与shell 设定也一并读出。然后核对在/etc/shadow对应帐号的密码。最终进入shall。shadow的文件内容是这样:

fsy:$1$giEMo6.Y$rY2i/S7K2UXHTvxJ.VuEL.:15201:0:99999:7:::

其中前两项为帐户名和密码。

useradd 添加用户、passwd更改密码、userdel 删除用户、usermod更改用户。

6、SHELL编程:具体参考
shell编程1 shell编程2

unset name 取消变量的定义

$?:命令执行后返回的状态(0为正确执行;非0为出错) 可用于检查上一个命令执行是否正确

$$:当前进程的进程号

$#:位置参数的数量,$1表示第一个自变量
$0:当前执行的进程名

$1-$9:脚本参数

$*:所有位置参数的内容

shell中的引号:

1、单引号(‘):单引号括起来的字符(包括特殊字符)都作为普通字符。
2、双引号:由双引号括起来的字符,除$、\、’、和”这几个字符仍是特殊字符并保留其特殊功能,其余字符仍作为普通字符对待。

[注]:
$:用其后指定的变量值来代替这个变量
\:转义字符,其后面的字符为普通字符。通常需要加\的只有4个字符, $、\、’、和”。

对于”号,如果没加\,则与前一个“号匹配
3、反引号(`): 与键盘上的~同一个键上的符号。反引号括起来的字符串被shell解释为命令行,执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号部分。

二、C 语 言

1、 sizeof用法和分析
sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。其返回值类型为size_t,在头文件stddef.h中定义。在32位系统中:

  char的sizeof值为1,char是我们编程能用的最小数据类型。
short的sizeof值为2;
int、float、long为4;
double为8;
所有的指针的sizeof值都为4。



char* ss = "0123456789";

sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针

sizeof(*ss) 结果 1 ===》*ss是第一个字符

char ss[] = "0123456789";

sizeof(ss) 结果 11 ===》ss是数组,计算到\0位置,因此是10+1

sizeof(*ss) 结果 1 ===》*ss是第一个字符

char ss[100] = "0123456789";

sizeof(ss) 结果是100 ===》ss表示在内存中的大小 100×1

strlen(ss) 结果是10 ===》strlen是个函数内部实现是用一个循环计算到\0为止之前

int ss[100] = "0123456789";

sizeof(ss) 结果 400 ===》ss表示再内存中的大小 100×4

strlen(ss) 错误 ===》strlen的参数只能是char* 且必须是以''\0''结尾的

char q[]="abc";

char p[]="a\n";

sizeof(q),sizeof(p),strlen(q),strlen(p);

结果是 4 3 3 2



2、笔试题strcpy写法
char * strcpy(char * strDest,const char * strSrc)

{

if ((strDest==NULL)||(strSrc==NULL))

throw "Invalid argument(s)";

char * strDestCopy=strDest;

while ((*strDest++=*strSrc++)!='\0');

return strDestCopy;

}

3、
C语言基础知识


+++的问题。
int i =1;

int j =2;

int k = i+++j;

printf("%d" ,k);
输出k为3。

编译原理有关编译器在词法解析的时候,对于运算符,总是查找最大的匹配也就是说,i+++j,编译器在找到+的时候,它不立即理解为+而是继续下一个字符,下一个字符仍然是+,可以组成++, 再往下的话便是+++,不成立了。所以i+++j会解析为(i++)+j 。另外i++是后自增,所以k=1+2=3,i再自增。++是所有的都算完了,再增加。

4、类型转换
unsigned int a =6;

int b=-20;

char c;

(a+b>6)?(c=1):(c=0);

printf("%d" ,c);

unsigned int 类型的数据与 int 类型的数据相运算后,自动转化为unsigned int类型。因此 a+b的值不是-14,而是一个unsingned int 类型的数424967382。因此返回值为1。

5、a和b比较大小,不许用if、?:、switch 。
int max=(a + b + abs ( a-b ) ) /2
a和b交换:
方案1:
a=a+b
b=a-b
a=a-b
方案2:
a=a^b
b=a^b
a=a^b

三、linux系统编程

1、gcc、gdb、makefile 学习和用法
2、通过patch实现生成使用补丁
3、系统调用的方式访问文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: