linux系统的指令基础2(系统的健康状况、进程杀死、脱离终端运行程序、C程序的编译、makefile文件,使用cd指令定位到root目录)

1.使用远程桌面控制的,需在linux上安装vnc服务,安装指令:

sudo apt-get install tightvncserver

第一次使用要设置密码,其会要求输入两次密码,其也是以后修改密码的指令:

vncpasswd

然后开启指令,这里的是指开启桌面1,其分辨率是800*600,其分辨率也可以不写,可以这样:vncserver :2

vncserver :1 -geometry 800x600
关闭vnc服务指令:

#vncserver -kill :1
2.linux指令的man指令

Linux提供了丰富的帮助手册,当你需要查看某个命令的参数时不必到处上网查找,只要man一下即可。


Linux的man手册共有以下几个章节:

代號 代表內容
1 使用者在shell中可以操作的指令或可执行档
2 系統核心可呼叫的函数与工具等
3 一些常用的函数(function)与函数库(library),大部分是C的函数库(libc)
4 装置档案的说明,通常在/dev下的档案
5 设定档或者是某些档案的格式
6 游戏(games)
7 惯例与协定等,例如Linux档案系统、网络协定、ASCII code等等的說明
8 系統管理員可用的管理指令
9 跟kernel有关的文件

如:man 5 data


1 Executable programs or shell commands
2 System calls (functions provided by the kernel)
3 Library calls (functions within program libraries)
4 Special files (usually found in /dev)
5 File formats and conventions eg /etc/passwd
6 Games
7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)
8 System administration commands (usually only for root)
9 Kernel routines [Non standard]



1、Standard commands (标准命令)
2、System calls (系统调用)
3、Library functions (库函数)
4、Special devices (设备说明)
5、File formats (文件格式)
6、Games and toys (游戏和娱乐)
7、Miscellaneous (杂项)
8、Administrative Commands (管理员命令)
9 其他(Linux特定的), 用来存放内核例行程序的文档。

n 新文档, 可能要移到更适合的领域。
o 老文档, 可能会在一段期限内保留。
l 本地文档, 与本特定系统有关的。

例如:我们输入 man ls,它会在最左上角显示“LS(1)”,在这里,“LS”表示手册名称,而“(1)”表示该手册位于第一节章,同样,我们输入“man ifconfig”它会在最左上角显示“IFCONFIG(8)”。也可以这样输入命令:“man [章节号] 手册名称”。

man是按照手册的章节号的顺序进行搜索的,比如:
man sleep
只会显示sleep命令的手册,如果想查看库函数sleep,就要输入:
man 3 sleep


ubuntu默认是没有安装c语言的库函数man手册的

1.添加库函数手册
ubuntu默认是没有安装c语言的库函数man手册的,所以你在man perror 和sendto之类的函数时会显示没有相关文档的问题,这个问题让我郁闷了我好久。解决方法:
sudo apt-get install manpages-dev
2.让man显示中文
ubuntu源里面已经包含了中文的man包,所以不用从其他地方down了,直接
sudo apt-get install manpages-zh
但是这样man默认显示的还不是中文,还需要以下两步
a.把中文man包转换成utf8格式的
新建一个脚本文件
gedit t.sh
把下面内容添加进去
#!/bin/bashcd /usr/share/man/zh_CN/for k in *docd $kfor i in *.gzdo j=`echo ${i%.gz}` gunzip $i iconv -f gb18030 -t utf8 $j >tmp mv tmp $j gzip $jdonecd ..done
然后
sudo ./t
b.修改man默认的语言
sudo gedit /etc/manpath.config 把里面的所有的 /usr/share/man 改成 /usr/share/man/zh_CN
保存后退出,然后你再试一下man ls
3.让没有中文帮助的显示英文
做完上面第二部还不够,这时你再man 一下一些c语言函数(不要用printf,socket之类比较有名的函数,这些已经有中文帮助了)的时候就会发现竟然没有帮助,而刚才明明在第一步已经安装了啊。这是因为你上面 把/usr/share/man 改成 /usr/share/man/zh_CN的操作使man只在中文帮助中搜索,如果没有就直接放弃,因此还需要以下操作,才能让man在没有中文帮助的时候自动显示英文的帮助,如果英文的也没有,哪就真的没有了。
sudo gedit /etc/manpath.config
然后搜索你刚才改过的地方,然后在其后面添加同样的一行,只是后面的目录还用原来的/usr/share/man,比如在修改后的
MANPATH_MAP /bin          /usr/share/man/zh_CN
再添加一行
MANPATH_MAP /bin          /usr/share/man


新安装了ubuntu 8.04版本,发现安装过的系统中缺少很多手册页。
用以下命令搞定了
sudo apt-get install manpages
sudo apt-get install manpages-de
sudo apt-get install manpages-de-dev
sudo apt-get install manpages-dev

2.使用ls 【选项】 其选项有:-a -l 

   其中-l指的是显示用户权限,-a显示所有的文件,其如下:


其中前面的drwxr-xr-x是指用户权限,第一个字母d表示这是一个文件;第一个rwx指的是当前用户的权限操作,第二个是与当前用户在同一个用户组里的用户;第三个是其他的任意一个用户。



1.杀死进程的指令有:kill killall  pkill其中

a.其中kill只能杀死单一进程,通过kill -l查看可用的进程信号,其中的信号1也叫作平滑重启,其比较重要的信号如下:


指令使用为:kill -HUP 1523  或者使用kill -1 1523两者是一样的效果,其中的kill -9 1523是强制杀死进程,

b. killall 【选项】【信号】进程名

选项有: -i:交互式,询问是否要杀死某个进程,当有多个子进程的则会一个个进程的询问,   -I:忽略进程名的大小写

其与killall的一样作用,只是选项只有一个t,选项 -t为按照终端号踢出用户,其中的 ps aux | grep httpd 指令是显示httpd相关的所以进程,其中的‘|’是管道,进行数据传输

其中的grep是在文件中查找指定的字符串,其运行效果如下:


重启阿帕奇的指令是:service httpd start   ,一般其启动的时候回报错,但是这个不会影响其使用,所以这个错误不用去理会。

killall -i -9 httpd 会交互的询问你是否要杀掉进程

c. pkill 【选项】【信号】进程名

选项: -t 按照终端号踢出用户,其使用如下:


其中的w指令是查询本机已登录的用户,记住只要是使用用户账号密码登录过的终端,就会产生用户进程,例如tty1~6登录的会显示在这里,其中的pts指的是

远程登录终端,例如vnc登录的,其中的WHAT列里的w指的是这个用户正在写操作,上面的操作则会吧用户1给踢下即关闭界面。

2.工作管理

  指令:jobs是查看后台进程的状态信息,进程要在后台有运行的条件是:


第一条指如果没有使用ctrl+z或者&来把进程放到后台,则这个进程只能在存在于当前终端下,在其他终端是看不到的。第二条指的是放入后台的进程需要能运行一段时间的,像ls &放进后台后因为其是一下执行完的,导致使用jobs查询的结果是停止的,所以没有意义,第三个指的是放入后台的进程不能与用户有读写之类的交互操作,

放入后台的两种方法:通过 & 把命令放入后台;输入指令后按 ctrl +z 快捷键,放到后台;例子:

下面的是举例什么样的进程放到后台会停止,什么样的会运行,例子如下:


这里的前面有个有‘---’、‘+’ 这个加代表最近一个放到后台的工作,也是工作恢复默认恢复的工作.' ---'号代表倒数第二个放入到后台的工作,top本来是三秒更新一次进程状况的,可是放到后台后却停止了,原因是因为其有人机交互,人可以输入指令。并且 vim 指令也是停止的,因为其需要人输入内容,故有交互。其中的find  / -name abc 指令指的是查找所有的abc文件

其中的jobs指令的例子:


其中加了-l 指输出工作的pid。

注意:ctrl+z是把程序放到后台,如果一直使用这个指令把一直刷屏的进程放到后台,则会是电脑运行速度变慢,因为太多程序了。

接着就是如何把关于进程的恢复,其有#bg %工作号 把后台暂停的工作恢复到后台执行

注意:后台恢复执行的命令,是不能喝前台有交互的,否则不能恢复到后台执行。

接着就是将后台暂停的工作恢复到前台执行,其为# fg%工作号,例子:


4.需要把命令放到后台脱离终端运行,

  因为,当我们通过某个终端打开某些进程时,并且这个进程可能是停止的(例如有交互的进程)或者在后台运行的,其实按照上面的方法放进的进程时跟当前终端绑定的,即当当前终端关闭系统会发出一个signhup信号来关闭这些进程,但又不影响其他终端的进程,所以我们就需要一些方法来使的即使我们关闭当前终端,但是被放进后台的进程仍在运行。这种方法有下面几种:


其中第一个文件是系统启动的时候会第一个加载,所以比较推崇的方法是第一个跟第三个,第一个优先,这样就不用每次启动系统后手动放到后台。我有任何想要在开机时就进行的工作时,直接将他写入 /etc/rc.local ,那么该工作就会在开机的时候自动被载入喔!而不必等我们登入系统去启动! 是否很方便啊!例子:


注意:

   a、这里不用加‘.',否则会报错,其与直接在客服端下的 ./a.out  运行命令不同。当我们添加完内容后,可以重新加载这个配置文件,其方法是: . /etc/rc.d/rc.local

   b、如果其这里面的有指令会报错,则其后面的指令是执行不了的,例子如下:


这里赋值指令cp如果其0.avi、data.txt等文件不存在,则其会报错,后面的out.exe应用程序是

启动不了的,所以,要保证在对应路径下要有这些文件。其启动这个rc.local文件后再后台可以查询到。


调试方法:有时我们自己在/etc/rc.d/rc.local里面增加的随机器启动的脚本和指令总是不能自动加载和启动,,机器启动后手动执行脚本又能成功,经常被搞得晕头转向的。最近我经过1天的辛苦测试和查找资料,终于解决了这问题,解决方式如下,/etc/rc.d/rc.local文件的文件头是#!/bin/sh ,我们把这修改成#!/bin/sh   -x,这样系统启动后就会把/etc/rc.d/rc.local里面的指令或脚本不能执行的日志写入/var/log/messages ,我们查看messages文件内容就知道具体的问题出在哪里了。


第三种:nohup命令







4.linux下的程序编写与编译

首先要安装有gcc,其中的make要与Makefile文件搭配----其只是封装了gcc,使用make只是可以每次节省编译时间,就是没修改的文件,make就会忽略对其的编译,相当于我们vs里的rebuild按钮。其中当我们按用指令:gcc -v 和 cc -v都可以查询编译器的版本,其中gcc是cc升级版。gcc是比较智能的编译器,在我们使用函数前如果没有声明该函数,其也不会报错,它会在编译的时候自动加载这个函数声明,其中C++的程序代码我们使用的编译指令是g++,C程序的代码我们使用gcc编译。一般程序编写我们要使用vim编辑器来编写。


其中的makefile文件是:


其中的要执行编译后的文件,直接在当前目录输入输入./a.out,执行当前目录的a.out文件,“./”意思是当前目录,还有就是其 指令里的的默认的生成文件是a.out, 不过我们也可以指定生成其他名字的文件,其后缀等都可以随意改例如改为.l等。例如:


vi编辑器的使用方法如下:

  a.当在一个.c文件编写时想把其一部分函数分到新的.c文件里,

b.则输入“ :sq  max.c” 则会分出一个文件,使用" set nu"指令则打开行号,

c.要把部分文件剪切出来则是把光标放到函数开头那一行,接着输入剪切的函数,然后就输入dd,则可以把内容剪切到剪切板上,

d.要上下文件夹移动光标,则使用组合键,ctrl+w+箭头上或箭头下,

c.按p键直接粘贴,

d.按“ :wqa”则表示全部保存退出

例子:


这里在max.c里没有声明max函数,但是由于gcc的智能性,则其不会报错,不过良好的编程应当是先声明后使用,否则会导致出错。这里可以在max.c里把其包含到头文件里。

使用gcc编译出来的文件是一种二进制的机器码,我们使用vi等打开来是乱码的。所以当有多个源文件是我们可以使用gcc把其先编译好,相当于一个静态库(当我们使用ls指令来查看其用户权限是,可以看到起是可读可写当不可执行,因为在c语言只有main函数的的文件才是可以被执行的),这样子就可以很节省编译时间,只需把改动的文件进行编译就行,为了让其他人能看到我们写的函数的作用,则只是就加入了一个.h的头文件,别人就可以通过.h文件来查明函数作用,完整点就把这些头文件包含到main函数的源文件里,例子:


注意,这是编译时需要把max.o、min.o、hello.c文件拿来一起编译,否则会报错,注意编写静态文件max.o是要使用的gcc格式为:gcc -c max.c -o max.o,否则会报错。当我们要删除所有的.o文件时使用这种方法最好:rm *.o 则是删除所有的文件。

但是当我们进行编写的是大型的工程项目时,我们则需要用一种更方便的方法来出,则是使用makefile文件来编写,它也能做到自动识别已有的.o文件,只要其没改动,则编译器不会对其源码进行编译,这就给我们节省了很多时间,其编写内容如下:


其中在编写前,我们在把h文件放到include目录下后,可以使用-MM来查看,编译器能不能找到h文件

-M选项把stdio.h以及它所包含的系统头文件也找出来了,如果我们不需要输出系统头文件的依赖关系,可以用-MM选项:

$ gcc -MM *.c
main.o: main.c main.h stack.h maze.h
maze.o: maze.c maze.h main.h
stack.o: stack.c stack.h main.h

如果其中的h文件没有显示出来则说明出现了路径问题,源代码文件有问题。



注意:gcc那一行需要2个tab键(但是不能是8个空格,本来自身的一个tab键是包含4个空格,所以要两个tab键),(自己测试的例子不知道为啥出错了,老是提示不够8位,待解决,后来解决了原来自己的gcc开头的两个tab键是被转换成了空格键,一般没被转换的tab键敲一下是自动有4个空格的,防止被转换的方法是可以手动,

“ctrl + v + i”后再点击[tab]键即可插入一个tab键,此时可以看到gcc那一行的代码边色了,证明输入的是正确的)。其正确的文档如下:


其错误的是如下:



它的意思大概就是:生成hello.out文件需要max.o min.o hello.c文件,并且其是通过指令gcc max.o min.o hello.c生成的。下面是我们如何使用makefile文件;


其中gcc/g++编译程序的流程大概分为4步:

1.预处理,生成.i的文件[预处理器cpp]

2.将预处理后的文件转换成汇编语言,生成文件.s[编译器egcs]

3.由汇编变为目标代码(机器代码)生成.o的文件[汇编器as]

4.连接目标代码,生成可执行程序[链接器ld] 链接阶段:在成功编译之后,就进入了链接阶段。在这里涉及到一个重要的概念:函数库。(出现的错误就是无法解析函数)


其中我们带选项的话,其只会编译到相应步骤就停止,例如:

-c
  只激活预处理,编译,和汇编,也就是他只把程序做成obj文件
  例子用法:
  gcc -c hello.c     (c一定要小写,其这步需要输入h文件的路径(为了减少麻烦,我们可以把其放到系统默认                         路径/usr/include/和/usr/local/include/下)。编译:Gcc首先要检查代码的规范性、                          是否有语法错误等。其这步还不进行函数库的连接,只是检查函数名的声明,所以这步                          是没有函数库的依赖关系的,即一般不会报错
)当默认路径下和自己的路径下都有h文                            件,则是以默认路径的h文件为优先。其编译的makefile文件如下如下:



-S
  只激活预处理和编译,就是指把文件编译成为汇编代码。
  例子用法
  gcc -S hello.c      (S一定是大写,从编译开始就开始检查错误)
  他将生成.s的汇编代码,你可以用文本编辑器察看
-E
  只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面.(此处是不检测语法错误的)
  例子用法:
  gcc -E hello.c > pianoapan.txt
  gcc -E hello.c | more

-o
  制定目标名称,缺省的时候,gcc 编译出来的文件是a.out,很难听,如果你和我有同感,(其是用于生成指定名字的类型文件,其                                      是进行了函数库的连接,如果函数未定义,则会导致跟VS里函数无法解析的错误一样
  例子用法
  gcc -o hello.exe hello.c   (这是缺省的时候生成的可执行文件)

      gcc -o hello.s -S hello.c   (这里为缺省选项,则其生成的是制定名字hello.s的文件)

其中VS出现错误为:(VS里的生成是完成4个步骤的)



linux下的使用-c来生成main函数的o文件,虽然关联很多其他C文件的函数,但是其不会报错,如下:



3.系统资源查看--其是查看系统健康状况的重要指令

vmstat 【刷新延时 刷新次数】 例子:


其中的第一个procs是进程信息字段, memory是内存信息字段,其参数如下:



其中的cache是缓存,用来加速数据从硬盘里读取。buffer是缓冲加速数据写入。网上的内存条有DDR3 1600 指的是其理论读取速度是1600Mbit/s。普通硬盘理论是能达到两三百兆,但是实际能达到三四十兆就很不错了。还有固态硬盘能达到六七十兆就不错了。下面的是swap的各个作用,其是能加速数据读存的,所以我们一定能多分配给swap多点空间就多点,这样则能大大的加快我们的电脑性能,


开机内核自检,这一步我们能知道我们的cpu的型号等等信息,如下:



还有就是我们要查看我们的内存使用情况可以使用free指令,其如下:


使用top指令来查看其CPU、MEN内存的使用状况:

其中在输入top指令时可以带一些参数,如其刷新时间,默认是3秒,而Windows的任务管理器默认是1秒。并且在输出top指令结果后在其界面上也可以输入一些指令,例如帮助shift+h、进程排列的方式shift+P以cpu使用率进行排序,默认就是此选项。shift+M以内存的使用率排序。


以下是top的输出结果:


其中的绿色的地方就是输出一些指令,来控制显示方式的。其显示的结果有五行。

其中第一行:


其中的系统的运行时间不是越长越好,应当要追求无故障率,所以高负荷的服务器一般一星期要重启一次,低负荷的服务器一般一个月要重启一次,则是应用很多系统的缓存,临时文件需要系统重启时才能被清理,如果不重启,则会导致系统cpu或者内存使用越来越大。

  当对于多核的系统load average与核数正相关,例如四核的话,则其数值不应当大于4,(当时这个不是绝对的,如果大于4但是系统的CPU、MEN占有率很低,则这也是可以接受的)

其中第二行:


其中的zombie指的是僵尸进程,其一般不需要自己处理的,它可能是我们正在关闭的某个进程被截获了,此时其由于不断释放相关内存,其在这个过程就可以出现僵死。如果发现某个僵死进程长期驻留,应当先百度查询其是什么进程,然后手动关闭。

其中第三行:

   其是关系CPU的占用比例,其中主要看%id--其指的是cpu的空闲比例,其值越大越好,如果空闲cpu值低于20%则其运行会很卡。



其中第四行:

是swap空间。

  总结:top指令显示的结果,主要的数据看的是:load avervage、CPU空闲率、MEN的空闲空闲、SWAP的空闲空间。




3.系统定时任务,其指令有:



在windows里有个叫任务计划程序的附件,其是能定时开启某个软件的,我们在linux下的是使用定时任务,这个在http(阿帕奇服务器)上比较常见,因为服务器上的很多任务,我们需要在晚上比较少人的时候关掉,或者在半夜少人的时候对某些软件自行解压,减轻服务器白天的负担。但是有个功能一般不推荐,就是自动重启,就怕服务器重启失败,导致服务器没法用,一把推荐人工重启。下面介绍的是:

A、at一次性定时任务

 使用指令:chkconfig --list | grep atd    查询服务器是否安装    使用指令:service atd restart     查看at服务的启动。at的访问控制,加在deny的用户是无法使用at的


at的使用样式:


使用例子1:


其中的hello.sh里添加的内容是:

#!/bin/bash

echo "hello world " >> /root/hello.log

其中的.log是指日志的意思,其中有个chmod的指令,其是为了给这个文件执行权限。at在root哪行输入完成后按回车,接着按ctrl+d,进行保存退出。atq是查询指令。

例子2:


3、使用cd指令定位到root目录下:







  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值