Linux(rad hat)基础知识

来源:互联网 发布:mac brew mongodb 编辑:程序博客网 时间:2024/05/22 13:35


 学习任何一门学科,有清晰的思路和知识框架很重要。没有什么是一个框架图解决不了的,既清晰有明了。嗯,说正题,学习Linux也是一样的道理,上篇文章是学习Linuxred hat)基础知识的框架。这篇文章对上文的框架图进行补充,增添枝叶。

 

一、文件系统

1.文件类型

文件类型

分类 

字符表示

含义

普通文件

 

-

可执行文件

目录文件

 

d

相当于windows下的文件夹

链接文件

 

l

软连接,硬链接

管道文件

 

p

进程间通讯

 

设备文件

块设备文件

b

将信息存储在固定大小的块中,每个块能独立于其它块读写。

字符设备文件

c

以不定长度的字元传送资料。

套接字文件

s

本地套接字,网络套接字两种

 

2.根目录下子目录的含义: 

/home

所有普通目录下的家目录

/bin

命令所对应的可执行文件

/etc

系统的配置文件

/proc

虚拟目录,内存的映射(单位是进程)

/root

超级管理员,root用户的家目录

/dev

所有的设备文件

/lib

系统使用的库文件,即静态库和共享库

/usr

用户使用的资源

/var

文件,在正常运行的系统中其内容不断变化的文件,如日志,脱机文件和临时电子邮件

 

二、基本操作

  1. 文件操作命令 

基本操作

普通文件

目录文件

创建

touch filename.name

mkdir dirname

删除

rm filename.name

rmdir dirname(空目录)

rm -r dirname(非空目录)

拷贝

cp path1/filename.name path2

cp -r path1 path2

剪贴

mv path1/filename.name path2

mv path1 path2

重命名

mv path/filename.name path/new.name

Mv dirname dirnewname

 

2.进程管理命令

进程管理命令

含义

用法

ps

显示进程信息(PID TTY TIME CMD)[进程号 伪终端 时间 命令]

ps  

ps -f(显示更多信息)

ps -e(系统所使用的一个进程显示)

sleep

睡眠

sleep n &(表示让进程在后台睡眠n秒)

sleep n (默认在前台运行)

kill

结束进程

kill PTD(进程号)

kill -stop PID(将进程挂起)

pkill

结束一组进程

pkill CMD(命令)

jobs

显示进程状态和任务号[任务号 状态 命令]

jobs

fg

将挂起的进程或后台运行的进程放到前台运行

fg 任务号

bg

将挂起的进程放到后台运行

bg 任务号

&

将进程放到后台运行

 

 

2.用户管理 

useradd

添加用户

Useradd -g groupname newuser(指定用户属的主组)

Useradd -G group1,group2... Newuser(指定用户加到副组中)

userdel

删除用户

userdel username

usermod -g

修改用户所属组

 

passwd

修改用户密码

passwd username

 

3.文件压缩命令

方法一:(两步)

打包:tar cfname.tar filelist

压缩:gzipname.tar

举例:把home.c exe.txt passwd三个文件压缩为一个叫mylib的压缩包

1.tra cf mylib.tar home.c exe.txt passwd→生成mylib.tar

2.gzip mylib.tar→生成mylib.tar.gz

方法二:(一步)

tar zcfname.tgz filelist

举例:tar zcf mylib.tgz home.c exe.txt passwd→mylib.tgz

 

  1. 文件解压命令

方法一:(两步)

解压:gzip -dname.tar.gz

解包:tar xfname.tar

举例:gzip -d mylib.tar.gz→生成mylib.tar

     tar xf mylib.tar→mylib.tar home.c exe.txt passwd

方法二:(一步)

解压:tar zxf name.tgz

举例:tar xf mylib.tgz→mylib.tar home.c exe.txt passwd

 

三、Linux下的C语言编程

 

1.编译链接:(gcc的使用)

a.编译文件:

vi或者vim 命令 ->  默认编译形成文件main.c list.c

b.链接为可执行文件

方法一:

 

(注:首字符“#”是系统提示符,不需要键入,下文相同)  

# gcc -c main.c   ->  形成main.o文件

# gcc -c list.c    ->  形成list.o文件

 

# gcc -o tet main.o list.o   ==>   链接  形成tet可执行文件

 

方法二

 

# gcc -o tet main.c list.c     ==>  形成tet可执行文件

 

2.调试:gdb调试(对象是可执行文件)

(注:假设现在有可执行文件tet)

# gdb tet   <----------启动GDB

(注:一下举例均在调试环境下进行)

 

gdb)l  <----------l命令相当于list,显示函数所在文件代码

 

bdb)b linenum  <---------将断点添加到linenum行

gdb)b funname   <----------将断点添加到funname函数的第一有效行

gdb)info b    <----------查看断点信息

gdb)r    <---------运行函数到第一个断点

gdb)s    <---------进行将要被调用的函数运行

gdb)finish   <--------退出函数运行

gdb)n   <---------执行下一行

gdb)c   <---------执行到下一个断点

gdb)q   <---------退出调试

 

gdb)p   <---------查看变量值

gdb)display valname    <---------监视变量valname的值

gdb)undisplay valname     <---------取消监视

gdb)p &valname    <---------查看变量valname地址

 

3.工程管理:makefile文件

    makefile关系到整个工程的编译规则, 一个工程中的源文件不计其数,其按类型、模块、功能分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,甚至进行更复杂的功能操作。makefile也像一个Shell脚本一样,其中也可以执行操作系统命令。makefile带来的好处是--“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译。

 

下面举例:

1个头文件my_math.h

#ifndef HELLO_H

#define HELLO_H

int my_add(int,int);

int my_sub(iny,int);

int my_mux(int,int);

 

#endif

 

4个C文件,代码如下:

my_add.c文件:

 

#include<stdio.h>

#include"my_math.h"

int my_add(int a,int b)

{

return a+b;

}


my_sub.c文件

 

#include<stdio.h>

#include"my_math.h"

int my_sub(int a,int b)

{

   int c;

   return c=a>b?a-b:b-a;

}

 

my_mux.c文件:

 

#include<stdio.h>

#include"my_math.h"

int my_mux(int a,int b)

{

   return a*b;

}

 

main.c文件:

 

#include<stdio.h>

#include"my_math.h"

{

   int a=10;

   int b=18;

   printf("a+b=%d\n",my_add(a,b));

   printf("|a-b|=%d\n",my_sub(a,b));

   printf("a*b=%d\n",my_mux(a,b));

}

下面进行makefile文件编辑:

(实现名叫exe的可执行文件)

exe:main.o my_add.o my_sub.o my_mux.o

Tab建)gcc -o exe main.o my_add.o my_sub.o my_mux.o

main.o:main.c

Tab建)gcc -c main.c

my_add.o:my_add.c

Tab建)gcc -c my_add.c

my_sub.o:my_sub.c

Tab建)gcc -c my_sub.c

my_mux.o:my_mux.c

Tab建)gcc -c my_mux.c

 

cleanobj:

Tab建)rm exe *.o

现在makefile写完了,在终端上执行命令:

#make    <--------可执行文件将被实现

#ls    <--------显示当前目录下的文件

main.c my_math.h my_add.c my_sub.c my_mux.c exe

main.o my_add.o my_sub.o my_mux.o

#./exe    <-----运行可执行文件

a+b=28

|a-b|=8

a*b=180

运行结果正确。

 

4.库文件:我们通常把一些公用函数制作成函数库,供其它程序使用。库函数分静态库、共享库。

 

a.静态库:静态库在程序编译时被链接到目标代码中,在程序运行时不需要该静态库。库的名字一般是是libXXX.a

b.动态库:在程序编译时不会链接到目标文件中,但在程序运行时被载入。库的名字一般是libXXX.so

c.举例说明:

第一步:编译得到举例的程序

程序1:hello.h为该函数库的头文件

程序2:hello.c是函数库的源程序,其中包含公用函数hello

程序3:main.c是测试库文件的主函数

程序1:hello.h

#ifndef HELLO_H

#define HELLO_H

void hello(const char *name);

#endif

程序2:hello.c

#include<stdio.h>

void hello(const char *name)

{

   printf(“Hello %s\n”,name);

}

程序3:main.c

#include<stdio.h>

int main()

{

hello(“everyone!”);

exit(0);

}

第二步:在程序中使用静态库

#gcc -c hello.c    <-----将源程序hello.c编译成 .o文件

#ar crv libmylib.a hello.o   <-----用命令ar建立静态库文件libmyhello.a文件

#gcc -o hello main.c -L. -lmyhello    <-----生成目标文件hello

#./hello   

Hello everyone!    <------运行结果

#

第三步:在程序中使用动态库

#gcc -shared -fPIC -o libMyhello.so hello.c    <-----建立动态库文件libMyhello.a文件

#gcc -o Hello main.c -L. -lMyhello    <-----生成目标文件Hello

#./Hello     

./Hello:error while loading shared libraries:libMyhello.so:cannot open shared object file:No such file or directory

结果没运行出来,错误提示,找不到动态库文件libmyHello.so,原因是生成的动态库在当前文件夹下,没有载入到标准系统动态库。因此要用export命令

#export LD_LIBARAY_PATH=.    <-------将环境变量设置为当前目录

#./Hello

Hello everyone!   <-------运行结果

#

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击