wolves 2014.3.20 总结Linux前提:1保证Linux 和window 可以ping通(ps:原因window上的防火墙没有关闭、或者Linux 上的防火墙和强制安全策略)2.保证安装Linux的时候选择了网络配置,现在定制(gcc 的默能安装)3.命令分析:tar -cvf a.tar a 和 tar -czvf a.tar.gz a 要是a是普通的文件那么a.tar和a.tar.gz的大小都会比a要大(物极必反).那么要是a文件的或那么a.tar的大小比a要大,但是a.tar.gz的大小比a要小.4.-rw-r--r--:第一个-表示是普通文件rw-表示当前账户的权限r--表示同一组的权限,最后一个r--表示不同组的用户的权限chmod (u,g,o,a) +/-/= filename或者chmod 777 filenamer=4 w=2 x=15.ln a b 表示的是硬连接(测试是往其中一个写代码) ln -s a c 表示的是符号连接(c-->a)6.ls -al tftp*表示的是看tftp*的内容而ls -al | grep tftp表示的是把前面的结果集中找出tftp文件不能和*连用.Tftp服务1.Linux和window可以ping通.2.Setenforce 0和service iptables stop3.在mnt下面mkdir cdr再mount /dev/cdrom cdr4.cd Server 再ls -al | grep tftp (发现客户端和服务器)5.安装tftp发现要先安装xinetd服务(tftp是xinetd的子类)6.先安装xinted.语法:rpm -ivh xinetd....再重启服务service xinetd restart7.再次安装tftp.语法:rpm -ivh tftp...再重启服务chkconfig tftp on(因为是小服务不能用service) 8.最后cd / 看是否有个tftpboot的文件夹.进入里面创建一个down.txt。
9.在windows这边的dos中写入:tftp Linux_ip get down.txt 【e:\1.txt】即可.10.测试tftp客户端.在cd /下面建立day02.在day02里面创建up.txt.再tftp-->localhost-->put up.txt(发现错误是file not found 是因为默能不支持tftp的上传.)解决方式:cd /etc/xinetd.d 里面有个tftp服务。
gedit tftp&在tftpboot 后面加上-c 保存退出后一定要重启xinetd和tftp服务。
11.在put up.txt发现没有权限,解决方式修改该tftpboot权限chmod 777 tftpboot.再次上传即可.12.卸载rpm -e tftp-server-../rpm -e tftpNFS服务1.测试Linux上面是否安装了nfs.语法:rpm -qa |grep nfs 结果是有的.但是没有启动.2.进入cd 下面的etc找 exports,并打开写入:3./home 192.168.1.*(rw,sync,no_root_squash) (home:共享的目录,ip前面的路由ip).4.保存之后要重启nfs语法:service nfs restart5.进入mnt下面新建mynfs.语法:mkdir mynfs6.挂载:mount -t nfs 自己或者人家的linux_ip:/home mynfs7.测试。
当在home中的东西存在和mynfs一样的时候那么成功.SMB服务1.VM--->install vmtools(注意一定要卸载cdr不然进去就是乱码语法:umount cdr)2.在进cdr ls一下发现有两个VM文件,安装一个一般安装rpm -ivh VM这个.3.再运行最后出现的pl脚本:/usr/bin/vmware-config-tools.pl4.最后重启语法reboot.会发现分辨率和鼠标可以共享了即可.IDE安装1.利用上面的smb服务。
将window上面的eclipse 和jdk放到Linux上面的/wp/tools下面.2.重命名jdk-6u16-linux-i586.bin改成jdk63.再执行jdk发现没有执行权限.给上语法:chmod +x jdk1.6 再./jdk1.64.发现又出现一个蓝色的jdk1.6...改名为jdk1.65.进入jdk1.6里面的bin.pwd一下看当前自己的路径。
拷贝一下将这个路径放到cd /root下面的.bash_profile这里.语法:gedit .bash_profile &将PATH=$PATH:$HOME/bin改成PATH=/wp/tools/jdk1.6/bin:$PATH:$HOME/bin 6.重新加载.bash_profile.语法:source .bash_profile.7.在到wp/tools这里解压安装eclipse文件最后运行./eclipse但是发现没有权限。
解决办法setenforce 0再次运行即可.Vi(Vim)编辑器1.vi(vim) hello.c (注意后面没有&)2.按下a或者i或者o进入写入hello wepull.3.想退出按esc键.在按下:输入wq即可出来 .4.gcc hello.c可以出现结果.5.测试几种运行的方式并且带人gcc的语法,其中比较好的一种是PATH=$PATH:.查询PATH的语法是echo $PATHgcc语法注意gcc main.c表示运行生成 a.outgcc main.o区别而gcc -c main.c 表示连接成main.o1状态:预处理、编译、汇编、连接预处理:主要是处理#include不包含宏.编译:主要的是变量没有声明和使用了非标准的C库函数.例如用sqrt.但是没有导入#include<math.h>这样的.汇编:一般没有错误连接:该方法(add)没有使用gcc文档上的方案.#include <stdio.h>int main(){double d=sqrt(4);printf(“hello wepull:%lf\n”,d);return 0;}这个例子那么gcc -S hello.i -o hello.s是有问题的。
因为在生成汇编语言的时候。
找不到sqrt的函数。
所以在上面加上#include<math.h>重新上面的步骤就可以了。
语法 gcc -E hello.c -o hello.igcc -S hello.i -o hello.sgcc -c hello.s -o hello.ogcc hello.o -o hello注意可以写成gcc -c hello.c [-o hello.o][]可以默能生成.o文件。
表示的意思是只是编译没有连接.2.说明””和<>这样的include 的区别.””表示在当前的文件夹下面有个”add.h”这样的文件gedit add.h若是写成<add.h>那么需要把add.h放到/usr/include下面. 要是把add.h放到某个文件夹下面(OK),那么语法是:gcc hello.c -IOK或者在头文件前面加上#include<./OK/add.h>静态链接库(.a)和动态链接库(.so)1.所有的的动态库都会在/usr/lib 和/lib这个找2.生成静态的语法:gcc -static hello.c体积大原因是把许多库的头文件都包含进去了3.生成动态的语法:gcc hello.c4.生成自己的静态连接库例如:第一步:add.h add.c sub.h sub.c main.c第二步:gcc -c add.c 、gcc -c sub.c第三步: ar -cr libaddsub.a add.o sub.o第四步: gcc main.c -laddsub -L./第五步: ./a.out(l表示手动连接的库但是这个库不是标准的C库函数,L表示找自己写的函数的位子.)5.生成自己的动态连接例如:第一步:add.h add.c sub.h sub.c main.c第二步: gcc -shared -fpic -o libaddsub.so add.c sub.c第三步: gcc main.c -laddsub -L./第四步: ./a.out发现有问题。
因为所有的动态的链接库都会在/usr/lib或者 /lib下面找。
解决办法: Mv libaddsub.so /usr/lib 即可.代码:add.h==>int add(int a,int b);add.c==>int add(int a,int b){ return a+b ;} sub.h==>int sub(int a,int b);sub.c==>int sub(int a,int b){ return a-b;} main.c:#include<stdio.h>#include “add.h”#include “sub.h”int main(){int m=add(1,2);int n=sub(1,2);printf(“%d,%d”,m,n);return 0;}Makefile1.首写要知道这样的一个例子:add.c main.cadd.c==>int add(int a,int b) { return a+b;} main.c==>#include<stdio.h>(注意没有add.h这样的库函数) int main(){int m=add(1,2);printf(“%d”,m);return 0;}2.测试上面的代码:gcc -c add.c 、gcc -c main.cgcc add.o main.o -o main./main3.定义目标:依赖Tab键命令4.列子all:add.o hello.ogcc add.o hello.o -o hello hello.o:hello.cgcc -c hello.cadd.o:add.cgcc -c add.cclean:rm -rf add.o hello.o hello 改造:#this is a demoobjs=add.o hello.oall:$(objs)gcc $^ -o $@hello.o:hello.c@ gcc -c $<add.o:add.c@ gcc -c $<clean:rm -rf $(objs) all$^表示的是所有依赖文件$@表示的是目标(一般是最终的可执行文件a.out)$<表示的是第一个被依赖的文件(一般是.c文件) 注意:作用域是当前的目标依赖和命令中.Shell 编程Demo1:测试基本的语法:#!/bin/shecho "this is a first test"var=wepull\ hao\ are\ youvar2=welcomeecho "$var"echo '$var'echo "this is a${var2}3"echo $#echo $*echo $1Demo2:输入用户名和密码判断是否合法登入.#!/bin/shecho "input your name:"read nameecho "input your pass:"read passif [ $name = "zs" -a $pass = "123" ] thenecho "login success~"elseecho "login error~"fiDemo3:输入两个数字比较大小#!/bin/shecho -n "input two numbers:"read a bif test $a -gt $b ;thenecho "$a > $b"elif test $a -eq $b ;thenecho "$a = $b"elseecho "$a < $b"fiDemo4:判断当前的账户是否是root#!/bin/shecho "input current runname"read userif test $user = `whoami` ; thenecho "current name is root"elseecho "current name is not root"fiDemo5:统计当前的路径有多少个文件.#!/bin/shdeclare -i mfor filename in $(ls)doif test -d $filename ; then:elseecho "filename is $filename"i=$(($i+1))m=$m+1fidoneecho "$i,$m"Demo6:设计一个shell程序,添加一个新组为class1,然后添加属于这个组的10个用户,用户名的形式为stdxx,其中xx从01到10。