我学习Linux编程的过程。从学习安装Linux开始,然后学习了几条命令行命令,接着启动Telnet服务等等。以下是具体过程。
>>>>让Linux启动时不进入Xwindow,而是字符界面:
修改 /etc/inittab中
id:5:initdefault:
为
id:3:initdefault:
>>>>配置Telnet
1、检查是否有安装包:
rpm -q telnet
rpm -q telnet-server
2、如果没有则需要安装:
rpm -i telnet-server-0.17-25i386.rpm
注意,可能有不同版本TelnetServer。
3、运行ntsysv,ntsysv为系统中管理服务的程序,在Telnet前选择*。
4、service xinetd restart
5、Telnet的配置文件在
/etc/xinetd.d/telnet
可以修改配置连接授权网段、域名、时间段等等。
6、默认情况下,Telnet不运行root权限登陆,如果确实需要,则修改:
vi /etc/pam.d/login
#auth required pam_securetty.so #
将上行加注释。
>>>>DOS和Linux常用命令对应关系
------------------------------
copy cp
move mv
dir ls
cls clear
exit exit
date date
del rm
echo echo
edit vi
fc diff
find grep
format mformat
cmd /? man cmd
mkdir mkdir
more less
ren mv
chdir pwd
cd path cd path
cd .. cd ..
time date
mem free
>>>>用户管理命令
useradd name //加一个命令
passwd name //设置用户的口令
>>>>用户切换
su username
可以切换到root权限,但需要知道password
>>>>配置FTP Server
1、查询FTP Server
rpm -q vsftpd
2、启动FTP Server
/etc/rc.d/init.d/vsftpd start
相应有stop,restart等选项
3、也可以用上面配置Telnet的方法进行启动。
>>>>>Linux下的打包和压缩
常见文件名:.gz,.tar.gz,.tgz,.bz2,.Z,.tar
打包和压缩是两个不同概念,大包是一大堆文件打成一个文件,压缩是文件变小。
tar是常用的打包程序。
.tar
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
---------------------------------------------
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz 和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
---------------------------------------------
.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName
.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName
---------------------------------------------
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知
.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知
---------------------------------------------
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z
解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
---------------------------------------------
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
---------------------------------------------
.rar
解压:rar x FileName.rar
压缩:rar a FileName.rar DirName
rar请到:http://www.rarsoft.com/download.htm 下载!
解压后请将rar_static拷贝到/usr/bin目录(其他由$PATH环境变量指定的目录也可以):
[root@www2 tmp]# cp rar_static /usr/bin/rar
---------------------------------------------
.lha
解压:lha -e FileName.lha
压缩:lha -a FileName.lha FileName
lha请到:http://www.infor.kanazawa-it.ac.jp/~ishii/lhaunix/下载!
>解压后请将lha拷贝到/usr/bin目录(其他由$PATH环境变量指定的目录也可以):
[root@www2 tmp]# cp lha /usr/bin/
---------------------------------------------
.rpm
解包:rpm2cpio FileName.rpm | cpio -div
---------------------------------------------
.deb
解包:ar p FileName.deb data.tar.gz | tar zxf -
---------------------------------------------
.tar .tgz .tar.gz .tar.Z .tar.bz .tar.bz2 .zip .cpio .rpm .deb .slp .arj .rar .ace .lha .lzh .lzx .lzs .arc .sda .sfx .lnx .zoo .cab .kar .cpt .pit .sit .sea
解压:sEx x FileName.*
压缩:sEx a FileName.* FileName
sEx只是调用相关程序,本身并无压缩、解压功能,请注意!
sEx请到: http://sourceforge.net/projects/sex下载!
解压后请将sEx拷贝到/usr/bin目录
vi使用
退出 - Esc,ZZ。 或者输入“:”,然后按Q。如果使用wq,则包括写入和退出。
Q!是不写入直接退出
Vi的关键是有两种状态,一种是“插入”状态,一种是“命令”状态。前一种状态,屏幕下面有“插入”的标识。另一种状态就是命令状态,执行任何命令,先输入一个“:”符号。然后再执行。
Linux开发入门
以Red Hat9.0为开发平台
Linux操作系统内核底层的开发工具和辅助工具,有的是直接建立在内核基础上,如Shell、GCC和Make等;有的是建立在脚本语言的基础之上的,如Automake、Autoconf和Libtool等。它们是Linux操作系统外层的图形界面开发工具(GTK+、QT等)和网络应用开发工具(Perl、PHP和Python等)的基础和过渡。
GCC:
-o 输出可执行文件
-c 只输出目标代码
-g 编译时提供以后对程序进行调试的信息
make命令
Makefile是它的配置文件。
#开始为注释。
Makefile用于描述文件的依赖关系,第一行总是依赖关系,第二行是规则。
比如:
main:main.o mytool1.o mytool2.o
gcc -o main main.o mytool1.o mytool2.o
表明,目标main的依赖对象是main.o,mytool1.o和mytool2.o。
下面一行是规则。注意规则前面有个TAB键。
因此,makefile的格式一般是:
target: components
TAB rule
makefile有三个有用的变量:
$@ 目标文件
$^ 所有依赖的文件
$< 第一个依赖文件
l Linux沿用Unix的习惯,称服务的应用程序为daemon。
l Linux的目标是网络OS,Windows的核心是所见即所得。
l 即使是纯文本,Linux同样拥有先进的网络、脚本和安全能力。
关于进程方面的编程
l 进程有五个状态:
新建、运行、阻塞、就绪和完成。
阻塞-进程正等待某一事情发生
就绪-等待CPU的执行命令
完成-系统正回收资源
l 进程有标志,即ID。下面代码掩饰获取进程ID的方法。
l Linux支持许多不同格式的可执行文件。ELF是一个,Java是另一个。
l 每个进程使用一个task_struct(Linux中task和Process互用)的数据结构来表示。
l 系统中最大进程数受到向量表task的限制。
l 系统用current指针指向当前正运行的进程。
l 所有进程都有父进程,这是一个Clone的过程。意义在于保证进程间的连接是严密的。Pstree命令用于查看这一父子孙的关系。
l 进程的根是init进程
l 系统按照组分配权限,一个进程可以同时属于多个组。
l 每一个进程同时拥有四对进程和组标识符:
Uid,gid - 进程所有者的ID
Effective uid , gid - 进程为了获取资源,系统通过有效ID审核实际的权限。
File system uid , gid - 和上面Eid差不多。
Saved uid , gid。- 进程执行后Eid等可能会改变,但Sid不会,他是最初的真实ID。
下面是一段例子代码:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <pwd.h>
int main(int argc , char ** argv)
{
pid_t my_pid;
pid_t parent_pid;
uid_t my_uid;
uid_t my_euid;
gid_t my_gid;
gid_t my_egid;
struct passwd * my_info;
my_pid = getpid();
parent_pid = getppid();
my_uid = getuid();
my_euid = geteuid();
my_gid = getgid();
my_egid = getegid();
my_info = getpwuid(my_uid);
printf("Process ID : %ld \n",my_pid);
printf("Parent ID : %ld \n",parent_pid);
printf("User ID : %ld \n",my_uid);
printf("Effective user ID : %ld \n",my_euid);
printf("Group ID : %ld \n",my_gid);
printf("Effective Group ID: %ld \n",my_egid);
if(my_info)
{
printf("My Login Name : %s \n",my_info->pw_name);
printf("My Password :%s\n" ,my_info->pw_passwd);
printf("My User ID :%ld\n",my_info->pw_uid);
printf("My Group ID :%ld\n",my_info->pw_gid);
printf("My Real Name:%s\n" ,my_info->pw_gecos);
printf("My Home Dir :%s\n", my_info->pw_dir);
printf("My Work Shell:%s\n", my_info->pw_shell);
}
}
关于fork()
用于父进程创建子进程。
进程ID和父进程ID是不同的。
因为Linux的多用户特性,因此需要父进程创建子进程。
一旦子进程被创建,父子进程就相互竞争系统资源。
如果希望子进程继续执行而父进程阻塞直到子进程完成,可以使用wait或者waitpid。
Exec()
为了使用系统程序,可以使用exec族,一共有5个函数
execl
execlp
execle
execv
execvp
fork函数与普通函数的不同之处在于,函数如果调用成功,将返回两次。在父进程中返回子进程的PID,在子进程中返回0。如果调用不成功,则返回0。
下面是一段例子代码:
#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"
#include "string.h"
#include "math.h"
#include "sys/wait.h"
#include "errno.h"
void main(void)
{
pid_t child;
int status;
int i;
printf("This will demostrate how to get child status\n");
if( (child = fork()) == -1)
{
printf("Fork Error :%s\n",strerror(errno));
exit(i);
}
else
{
if( child == 0 )
{
int i;
printf("I am the child: %ld\n",getpid());
for(i = 0;i < 1000000;i ++)
sin(i);
i = 5;
printf("I exit with %d\n",i);
exit(i);
}
}
// while( ((child == wait(&status)) == -1)
sleep(1);
child = wait(&status);
printf("child's pid = %d . exit status = %d \n",getpid(),WEXITSTATUS(status));
}
//使用数学函数,编译时要加-lm选项。
守护进程
也就是后台程序。可以在命令后面加入“&”符号即可使程序运行于后台。
编写思想:父进程创建子进程,子进程杀死父进程。
#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"
#include "string.h"
#include "sys/wait.h"
#include "errno.h"
void main(void)
{
pid_t child;
int status;
if( (child = fork()) == -1)
{
printf("Fork Error:%s \n",strerror(errno));
exit(1);
}
else
{
if(child > 0)
{
while(1)
{
if(kill(getppid(),SIGTERM) == -1)
{
printf("Kill Parent Error:%s\n",strerror(errno));
exit(1);
}
while(1)
{
printf("some codes\n");
sleep(10);
} } } }
}
= 未完待续 =
Linux学习笔记续
分享到:
相关推荐
根据提供的文件信息,我们可以推断出这是一份关于Linux编程学习笔记的PDF资料。下面将对这份资料可能涉及的关键知识点进行详细的阐述。 ### Linux编程基础知识 #### 1. Linux操作系统概述 - **定义与特点**:Linux...
我的linux编程学习笔记(一).pdf
我的linux编程学习笔记(一)分享.pdf
Linux Shell编程学习笔记
对于想要深入学习Linux系统编程的开发者来说,这些知识点是必不可少的。需要注意的是,笔记中部分文字可能存在OCR扫描错误,但主要概念和知识点已经通过上下文进行了推敲和修正,确保了内容的连贯性和准确性。
Linux 嵌入式学习笔记主要涵盖了Linux操作系统的基础知识以及C语言编程的相关内容。下面将对这些知识点进行详细的解析。 1. Linux基础操作: - 登录:在Linux系统中,用户通过`用户名:密码`的方式登录系统。 - ...
总的来说,这份“Linux课堂学习笔记”资料包提供了一个全面的学习路径,涵盖了从基础的Linux操作系统原理,到ARM架构的硬件特性,再到实际的设备驱动编程。对于想要在Linux环境下进行嵌入式开发的学员来说,是一份...
Linux是开源的操作系统,它的命令行界面,尤其是Shell编程...因此,无论你是技术小白还是希望进一步提升,这份“Linux零基础学习笔记 Shell编程-菜鸟入门”都会是你宝贵的资源。祝你在学习的道路上越走越远,不断进步!
这份“Linux学习笔记.doc”文档可能会详细讲解以上各点,对于初学者来说是一份非常实用的学习资料。通过深入学习,你可以掌握Linux操作系统的核心技能,为后续的系统管理、开发或运维工作打下坚实基础。
本文档主要记录了 Linux 操作系统的学习笔记,涵盖了 Basic 的编程、VI 编辑器的使用、GCC 编译器的应用、GDB 调试工具的使用等方面的知识点。 一、编程基础 * 了解 C 语言的基本语法,例如变量声明、数据类型、...
### Linux系统编程学习笔记 #### 一、IO **1.1 标准I/O (stdio)** - **fopen/fclose**: `fopen` 用于打开或创建一个文件,并返回一个指向该文件的 `FILE *` 类型的指针。`fclose` 用于关闭由 `FILE *` 指向的文件...
在<linux/socket.h>;中有 sockaddr的定义 struct sockaddr{ unisgned short as_family; char sa_data[14]; }; 不过由于系统的兼容性,我们一般不用这个头文件,而使用另外一个结构(struct sock addr_in) 来代替...
这篇编程学习笔记旨在为初学者提供一个全面而基础的指引,尤其适合那些对编程一无所知的新手。它涵盖了多种编程语言和技术,旨在帮助你快速踏入编程世界的大门。 首先,我们从“01.System[windows,Linux]”开始,这...
Linux学习笔记——入门资料 Linux,作为一款开源、免费的操作系统,因其稳定性和安全性而备受开发者和系统管理员的青睐。这份“Linux学习笔记”旨在帮助初学者快速掌握Linux的基础知识和操作技能,从而轻松入门。 ...
《马哥的Linux学习笔记》是一份针对初学者和进阶者精心编撰的Linux教程,旨在帮助读者全面掌握Linux操作系统的核心概念、命令行操作以及系统管理技能。这份笔记以清晰明了的语言和实例解析了Linux系统的各个方面,是...
学习笔记分为多个阶段,从基础的 Linux 平台开发到高级的 Unix 环境编程,并涉及到 Linux 应用系统开发和嵌入式开发等方面。 Linux 基础知识 Linux 是一个开源、免费的操作系统,其稳定性、安全性、处理多并发已经...
描述:这是一份综合的Linux Shell编程笔记,适用于想要学习或加强对Linux操作系统下Shell脚本编程的理解的人。该笔记包含了Shell脚本的基础知识、常用命令和技巧,以及实际的编程示例和案例。无论您是初学者还是有...
学习LINUX环境编程的见证,一笔一画,脉络清楚,结构清晰,自己再看一目了然,传上来与众分享