Linux(rad hat)基础知识
来源:互联网 发布:mac brew mongodb 编辑:程序博客网 时间:2024/05/22 13:35
学习任何一门学科,有清晰的思路和知识框架很重要。没有什么是一个框架图解决不了的,既清晰有明了。嗯,说正题,学习Linux也是一样的道理,上篇文章是学习Linux(red hat)基础知识的框架。这篇文章对上文的框架图进行补充,增添枝叶。
一、文件系统
1.文件类型
文件类型
分类
字符表示
含义
普通文件
-
可执行文件
目录文件
d
相当于windows下的文件夹
链接文件
l
软连接,硬链接
管道文件
p
进程间通讯
设备文件
块设备文件
b
将信息存储在固定大小的块中,每个块能独立于其它块读写。
字符设备文件
c
以不定长度的字元传送资料。
套接字文件
s
本地套接字,网络套接字两种
2.根目录下子目录的含义:
/home
所有普通目录下的家目录
/bin
命令所对应的可执行文件
/etc
系统的配置文件
/proc
虚拟目录,内存的映射(单位是进程)
/root
超级管理员,root用户的家目录
/dev
所有的设备文件
/lib
系统使用的库文件,即静态库和共享库
/usr
用户使用的资源
/var
变量文件,在正常运行的系统中其内容不断变化的文件,如日志,脱机文件和临时电子邮件
二、基本操作
文件操作命令
基本操作
普通文件
目录文件
创建
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
文件解压命令
方法一:(两步)
解压: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! <-------运行结果
#
- Linux(rad hat)基础知识
- 安装Rad Hat Enterprise Linux 6.0
- Rad Hat Enterprise Linux 6.0 安装 tomcat
- Rad Hat Enterprise Linux 6.0启用ftp
- 在Rad Hat Linux下安装VMware Tools
- Rad Hat Enterprise Linux 6.0安装Oracle 11g
- rad hat安装Oracle
- 学习Linux(red hat)基础知识框架
- 虚拟机上rad hat网络相关设置
- 如何在rad hat enterprise 5 中启动mysql服务
- RAD
- rad
- Red Hat Linux 9
- Red Hat Linux指南
- red hat linux 安装
- red hat enterprise linux
- ret hat linux 全屏
- Red Hat Linux 9: Red Hat Linux 定制指南
- 巴什博奕
- Bootstrap3.3 动态添加和关闭 tab的方案
- 深度学习路线图参考
- 五大常用算法基本介绍
- ANGEL:一个新型的分布式机器学习系统
- Linux(rad hat)基础知识
- 判断模拟器是否连网 没网进入连接中
- jquery mobile中的pageinit事件随笔
- ambari中spark thrift server 挂掉
- raspberryPi2 移植Android系统
- Eclipse添加注释模板
- python2.7剪刀石头布代码示例
- 索引初学
- 两种方式查看自己的Django版本