linux 系统入门到精通(学习笔记)

linux 系统入门到精通(学习笔记)

  • 空间

我学的时候用的是 cent OS,有一些跟现在的 ubuntu 等有点差异,像启动项


/ 根分区




boot 系统引导程序(内核,GRUB配置文件等)


bin 存放终端二进制命令


etc 系统配置文件(大多数配置文件都是文本文件)


dev 存放设备文件(系统将计算机中的各种设备资源映射为文件形式进行管理)


root 管理员家目录


home 普通用户家目录(多个用户对应自己的家目录/home/lucy)


usr 系统资源目录(程序、图片、配置。。。。)系统中75%以上空间被此目录占用


sbin 存放需要管理权限才能运行的二进制命令


var 存放经常变更的文件(例如电子邮件、程序缓存、日志等)


mnt 系统用来挂载设备的目录


media 新系统中用来进行自动挂载的目录


lib 系统程序库文件目录


tmp 临时文件目录


proc 内核进程窗口(内核挂载的特殊类型文件系统)


opt 其他文件


sys 系统内核设备挂载目录


selinux 系统内核级安全功能






Linux系统为多用户,多进程的操作系统。


系统中默认有6个文本终端


分别对应Ctrl+Alt+F1 ~ F6


使用Ctrl+Alt+F7返回图形桌面






终端命令格式


命令 选项   参数1 参数2 。。。


(命令、选项、参数之间必须加空格)




ls 显示文件列表


常用使用方式


ls 显示当前目录下文件


ls -a   显示当前目录下所有文件(包括隐藏文件,文件名开头字母为“ .”为隐藏文件)


ls -l   以长格式显示每个文件详细信息


ls /home  指定要列出的路径(ls -al  /home)




帮助手册查询命令


man 命令


例如:man ls


控制键滚动


q快捷键退出




help帮助命令


内部指令帮助命令只提供给shell编程用的内部指令


例如:test for  until  if




info详细的GNU手册


info 命令






文件类型


- 普通文件


d 目录


l 连接文件


c 字符设备


b 块设备


p 管道文件


s socket套接字文件






系统中有软连接和硬连接。软连接是记录了指定的路径和文件名的文件。硬连接是一个文件的别名。




cd 切换工作路径


cd  /home 切换到指定目录中


cd ~ 返回当前用户的家目录


cd 返回当前用户家目录


cd - 返回之前的目录


cd .. 返回上一层目录




. 当前目录


.. 上一层目录




命令行提示符中


第一位显示 当前用户


第二位表示登录的主机


第三位表示当前工作目录


第四位 表示权限 $为普通用户 #为超级用户




显示当前工作目录


pwd




绝对路径和相对路径


绝对路径,是以系统根路径“/”开始指定的目录,写法为"/home/lucy"


相对路径是以当前位置开始指定的目录,写法为"share/gimp"


比较直观的区别在于——是否以"/"开头表示路径






创建目录


mkdir


mkdir mydvd  在当前位置创建指定名称的目录


mkdir aa bb cc 同时创建多个目录


mkdir -p  abc/def/ghi 同时创建多层目录




删除目录


rmdir aa (aa必须是空目录)




删除文件和目录


rm 选项  文件或目录名


rm myfile删除普通文件


rm -r  mydvd 递归删除目录


rm -rf  mydvd  递归删除目录,并不需确认




文件或目录复制


cp 选项   文件来源   复制目的地


cp /proc/cpuinfo  .  将cpuinfo文件复制到当前目录下,文件名保持不变


cp cpuinfo  otherfile  复制文件同时改名


cp cpuinfo /tmp/kkk  复制文件到/tmp目录下(kkk有三种可能,1.不存在,2.是目录,3.是文件)


cp -r mydvd  /tmp 将mydvd目录及其内容复制到指定位置




tab补全


ctrl+L 清除屏幕


ctrl+c 终止正在执行的终端命令




移动或重命名


mv 原位置和名称   新位置和名称




统计目录大小


du -sh  统计当前目录占用磁盘空间


du -sh  /home  统计指定目录占用磁盘空间






查看文本文件内容


cat 不能分页和停止


more 能分页,但不能回滚(more +5 file  从文件第五行开始显示)


less 可以回滚显示,q退出


head 查看文件头部10行


tail 显示文件尾部10行




ls、cd、mkdir、rmdir、rm、cp、mv、cat、more、less、du、df、man、help、info、head、tail、pwd




命令别名设置


alias


alias ls='ls --color=tty'


unalias ls




which


查找命令所在位置




whereis


查询二进制、手册文件、源代码、命令




重定向


> 创建并覆盖


>> 创建并追加


将重定向符号左面的运行结果 重定向给其他文件或设备


cat > ccc.txt  <<EOF


将输入的内容重定向到ccc.txt文件中,以EOF作为输入的结束标志




切换用户身份


su


su nicolas  切换身份到nicolas用户,但环境变量不变


su - root  (- 是login)使用指定用户登录


su -  默认用户是root




date显示和设置系统时间


date -s  "2011-11-23 23:45"




hwclock显示硬件时间


hwclock -w  将软件时间写到硬件时钟上


hwclock -s  将硬件时钟同步给软件时间




cal 显示月历


cal -3 显示3个月


cal 2011 显示全年




ln创建连接文件


使用ls -li命令查看文件inode信息。每个文件有一个唯一的i节点编号。不同分区管理自己的inode


ln -s  来源   目的连接名


ln  来源   硬链接名




软连接可以连接其他分区的文件。


硬链接不能夸分区创建。


连接文件不能创建在fat、ntfs等分区中。




i insert 插入文本模式


o 在光标当前位置下一行开始进行插入模式


【ESC】 返回命令模式




dd 剪切一行


5dd 从光标行开始 剪切5行


p 粘贴复制或剪切的数据


yy 复制一行


8yy 从光标行开始复制8行


u undo撤销操作


ctrl +r      redo重做




gg 跳转到文件开头


G 跳转到文件尾


100gg 跳到第100行




末行模式


:q 退出vi


:q! 放弃更改,强制退出


:wq 写入磁盘并退出vi(:x)(ZZ)


:w aaa.txt   保存到指定文件名中


:wq! 强制保存退出vi






:s/abc/000/g 将当前行所有abc替换为000


:%s/abc/000/g 将文档所有abc替换为000


:%s/i386//g 将所有i386替换为空(删除)


:%s#/#_#g 使用#作为分隔符进行替换




当编译软件出错时,编译工具会详细提示具体目录中的文件的多少行错误,可以使用vi参数去直接打开文件的指定行来快速查看。


vi +1378 source/saas.c




同时编辑多个文件


vim -o bbb ccc


:sp otherfile 横向分割打开otherfile


:vsp anotherfile  纵向分割打开文件




ctrl+w 后 通过方向键 跳到指定窗口编辑


:qa   关闭所有窗口






:set nu 显示行号


:syntax on 语法高亮


:set autoindent 自动缩进


:set ts=8  设置tabspace长度为8个空格






~/.vimrc是vim的配置文件,每次使用vim的时候都会自动读取此配置。可以将常用的设置写入。




/etc/inittab系统启动配置


vim -R  /etc/inittab 使用只读模式打开重要的配置文件,防止操作错误对系统产生破坏。






系统运行级别runlevel


0 关机(挂起)


1 单用户模式(只有一个终端可以使用,网络不可用,不需要登录,直接进入root用户终端)


2 多用户,无nfs支持


3 完整的多用户模式(正常终端状态)


4 未使用


5 X11(图形界面)


6 重新启动




更改运行级别


init


init 3   将运行级别切换到3




poweroff 关机  init 0


reboot 重启 init 6






/etc/rc.d中每个目录对应一个启动级别。


每个启动级别目录中的文件都是连接文件。


K开头表示kill结束进程,数字表示执行顺序


S开头表示startup启动的服务,数字表示执行顺序


/etc/rc.d/init.d中放置各种服务的脚本文件。启动服务可以




===============通过此脚本控制。或使用service命令进行启动


管理员可以启动或关闭服务


service httpd start




start 开启服务


restart 先关闭后,再打开


stop 关闭服务


status 显示服务状态




GRUB配置文件


/boot/grub/menu.lst


/boot/grub/grub.conf




有某些系统,真正的配置文件存放在etc中/etc/grub.conf






/boot目录中


vmlinuz----- 内核文件


initrd---.img 初始化内存磁盘




config---- 内核源代码配置文件


system.map 内核函数描述






file命令用于查看指定文件的文件类型


file /etc/hosts




grub配置文件格式


#表示注释


default=0 默认进入系统在菜单编号,从0开始


timeout=10 如果10秒未输入,则使用默认项进入系统


splashimage= 背景图片文件具体路径和名称


hiddenmenu 只显示倒计时和系统名称,除非按键才显示grub菜单


title 启动菜单中的一个标签


password 全局密码设置,使用户需要口令才可以修改grub在启动时的配置。






菜单项内容


root (hd0,0)  表示之后的kernel和initrd命令所需要读取的文件都在此分区中。


hd代表硬盘,不区分类型。


第一个0,代表计算机找到的第一个硬盘


第二个0,代表此硬盘上的分区编号,与Linux系统内部的sda1编号不同。此处从0开始。(root和括号中间有空格)




kernel 读取内核文件,指定绝对路径和完成文件名。之后是内核启动参数。由grub将内核载入到内存后,使内核运行,并把相应参数发送给内核,对其进行配置。


kernel /boot/vmlinuz  root=LABEL=/ rhgb  quiet


root=LABEL=/ 指定Linux系统的根分区是哪个


root=/dev/sda1 使用设备名称指定linux根分区位置(还可以使用UUID)


rhgb centos系统在服务启动过程中的图形背景


quiet 在启动内核时,不显示内核对硬件检测的信息。




initrd 载入initrd文件。




=============


grub通过配置文件,将指定位置的内核文件、initrd文件逐一载入内存。并执行内核。内核进行自解压后检测硬件,并挂载初始化磁盘。通过初始化磁盘上的脚本,将需要的驱动模块加载到内核中。之后再寻找参数指定的硬盘上的根分区。运行根分区上的初始化脚本,系统中各服务启动。最终进入shell环境。


kernel panic。




grub启动时


e——修改菜单项(临时修改)


c——进入grub命令行模式






/根分区——相当于是windows的C盘




Windows系统在grub中的配置


title Windows XP


rootnoverify (hd0,1)


chainloader +1




rootnoverify指定windows分区位置


chainloader将引导功能交给该分区0扇区引导程序去处理






给grub加密


password 功能可以给grub在启动时增加密码,使没有密码的用户不能随便修改系统启动设置。


password也可以指定给某个启动项,使没有密码的用户无法使用该启动项进入系统。




全局密码password放置在第一个title之前。如果将password写在title之后,是启动项密码。




设定密码时,可以使用明码,但登录以后的用户都可以看到密码的内容。为了保证安全性,可以使用md5加密。


明码 password=123456


md5加密  password --md5  kjsdf98su9sd89fs99




产生md5密码的工具为


grub-md5-crypt


将产生的密码复制到grub配置文件中,并保证密码的字符没有遗漏


password --md5  $sdois09s09x98sd98as




在grub菜单中,使用c快捷键进入命令行模式


在使用命令行进行启动配置时,不会写入到配置文件中,也是临时的一种启动方式。当配置文件错误,或磁盘错误时,可能只能使用命令行进行启动。


如果有密码设置,则需要先输入密码后,才能进入命令行模式。


在命令行模式中,基本的启动语句写法与配置文件相同。


在最后,使用boot指令执行启动。


在输入命令和文件名及路径时,可以使用和shell一样的tab补全功能,来补全命令、路径、磁盘编号、分区、文件0名等。




Linux系统权限管理




ls -l可以查看文件信息。其中包括文件权限、所有者、组




除了文件类型位,之后有9位表示文件的权限。分为三组。


第一组是所有者操作权限


第二组是组成员操作权限


第三组是除了所有者、组之外的其他用户权限




rwx    rwx      rwx


user group  other




r 4 read读取


w 2 write写入


x 1 exec执行


- 0 无




644 rw- r-- r--


rwxr-xr-x 755




字符表示方法和8进制数字表示方法进行转换的方法是


将r、w、x转换为相对应的数字后计算和、每三位得到一个结果。


如果从数字转换到字符,则可以逆向推导,由于和的结果只能由固定数字运算获得,所以不会产生错误。




chmod命令更改文件权限,但首先要有该文件的操作权限(属于所有者,或是root)




更改权限方法


chmod 755  install.log (rwxr-xr-x)


chmod 644 /opt -R  (递归修改制定目录下的所有文件为指定权限)




通过字符指定权限位


u——用户位


g——组


o——其他


a——所有


+——增加权限


-——去除权限


=——指定权限




install.log(原来是644 rw-r--r--)


改成755 rwxr-xr-x


chmod a+x  install.log


chmod g-w install.log




权限位对于目录来讲,


r可以读取目录内容


w可以创建或删除目录里的文件


x表示可以通过cd命令进入目录




t权限位,允许所有用户在此目录中创建和删除自己的文件(T表示未生效)t位是为目录使用的。


chmod 1777 mydir




粘滞位s —— 针对程序有作用


如果设置为s位,则执行此命令的用户,是以此命令所有者身份执行。s位是为执行程序使用的。




chmod u+s  myexec






=====================




用户与组管理


系统中用户相当于是职员,组相当于是部门。


一个用户可以属于多个组,每个组可以有多个用户。




ls -l 查看文件的所有者(即用户),组




用户配置文件


/etc/passwd 存放用户信息


/etc/shadow 存放密码相关信息






passwd文件格式


可以使用man手册查询passwd配置文件的格式。


man 5  passwd




passwd文件中,每一行代表一个账号信息。使用:进行分段


第一列——账号(用户名)


第二列——密码,x表示密码在shadow文件里


第三列——UID,用户标识号,唯一


第四列——GID,初始化组标识编号。(用户在创建文件时,会将此GID写入到文件的组权限位置)。


第五列——用户描述信息


第六列——家目录


第七列——用户登录后所使用的shell程序。




shadow文件格式


第一列——登录名(与passwd对应)


第二列——密码


第三列——从1970.1.1到最后一次修改密码的天数


第四列——修改密码间隔的天数


第五列——密码必须更改天数


第六列——密码过期前多少天显示警告


第七列——密码过期后多少天无法登录


第八列——指定具体天数禁止登录,从1970.1.1计算


第九列——保留




useradd 增加用户


usermod 修改用户信息


userdel 删除用户


passwd  修改用户密码




创建用户后,必须指定密码,才能使用户登录系统。


useradd michael


passwd michael




删除用户时,使用-r选项可以同时删除用户的家目录


否则,只是将用户的账号在passwd和shadow中去除。


userdel michael


userdel -r  michael






用户组group


/etc/group


/etc/gshadow




组配置文件内容


第一列——组名称


第二列——密码,x表示密码在gshadow中


第三列——GID,组标识号。唯一


第四列——组内用户




gshadow文件内容


第一列——对应的组名称


第二列——密码,用于组管理员设置密码


第三列——管理员用户列表


第四列——成员用户列表






newgrp切换组临时到其他组中


newgrp  root




gpasswd设置组密码,及指定组管理员和成员


gpasswd -A nicolas -M michael  michael


gpasswd michael  (组管理员设置组密码)






查看当前用户所属组使用groups命令




groupadd


groupmod


groupdel




增加组


groupadd develop


groupadd -g 1024  manage(-g 指定gid)




删除组使用groupdel,但此组中必须为空,没有用户才可以删除。




修改组名称,使用groupmod -n


groupmod -n  devel  develop


将原名为develop 改为devel






useradd


-g  指定初始化组(此用户在创建文件时,写在组权限位置的组名)只能指定一个


-G  可以指定多个组名,使用户属于多个组


-m 在创建用户时,同时创建家目录


-M 不创建家目录


-d  指定家目录位置


-u 指定用户uid


-s 指定登录shell




useradd tom  -u  1999  -d  /tmp/tom  -g  root  -G  nicolas,michael  -m




usermod -d /home/kate kate


修改kate用户的家目录位置,但系统不会自动将原来目录移动到目的位置。




usermod -g  nicolas  kate


修改kate的初始化组为nicolas组




练习:


创建develop组


创建manage组


创建tom用户,属于develop组,家目录在/tmp/tom目录下,强制创建家目录,其uid为1001


创建lucy用户,属于manage组,家目录在/home/lucy目录下,但不创建家目录,辅助组为develop


修改develop组名为devel。


指定tom为manage组的管理员,lucy为manage组成员,并设置密码






PID进程编号


echo $PATH  查看搜索执行程序的路径




在环境变量中记录的路径,可以不使用路径+程序名方式执行,系统会自动在PATH环境变量中遍历每个路径。如果无法找到相应的应用程序,则输出command not found。如果找到,则执行。


执行当前目录下应用程序或脚本,可以使用./方式运行,或绝对路径和相对路径。


./mysh.sh


/root/bin/mysh.sh






ps查看当前正在运行的进程信息列表


ps 显示当前终端下运行的进程


ps ax 显示系统所有正在运行的进程,显示进程的命令


ps aux 显示进程启动的用户




PID 进程编号


TTY 运行在哪个终端中


STAT 进程状态


TIME 运行时间


COMMAND 进程的命令




init进程——永远pid为1


进程编号可以循环利用,一般最大进程号为32767




top命令动态更新系统进程列表,并显示启动时间、cpu使用率、内存使用率、交换分区使用率等信息。默认以CPU占用作为排序。默认3秒更新一次。可以使用s快捷键指定更新时间(秒),使用q退出程序。




pstree 使用树状方式显示进程表及进程关系。




kill杀死进程


kill 信号   进程编号PID


kill -9  2349  发送信号给进程,使之退出。


如果信号9无法结束进程,则进程不处理此信号,无法结束。




pkill和killall 使用程序名指定杀死的进程,只要名称相同,可以同时杀死多个进程。


pkill gnome-terminal


killall gnome-terminal




xkill 通过鼠标点击窗口,将指定的窗口或应用程序杀死。




将进程在后台运行,如果程序已经运行,则可以使用ctrl+z,将当前进程放到后台。


如果需要在运行时指定直接到后台,则在命令后加&。




jobs查询当前终端里后台运行的进程


bg指定进程在后台继续运行,但某些程序只能向终端输出,如果放到后台就只能停止。


fg将后台进程调到前台运行。


通过jobs查看到的jobs编号对进程进行指定。






nice 在运行程序时,指定程序的优先级


renice 程序已经运行,重新指定程序优先级。




nice


-n 指定谦让度,-20最低,19最高。如果用优先级考虑,-20为最高优先级。默认进程nice值为0。


nice -n -10  top




参数指定优先级数,之后是pid


renice +10 2201




======================






文件系统管理


分区fdisk命令


格式化mke2fs、mkfs.ext3、mkfs.vfat、mkswap


挂载mount、卸载umount


配置文件/etc/fstab进行启动自动挂载文件系统




fdisk使用交互模式


fdisk -l   查看所有硬盘分区表


fdisk /dev/sda   对指定硬盘进行分区操作






m 帮助菜单


a 分区引导标识开关


d 删除一个分区


l  列出已知分区类型


6 fat16


7 ntfs


b fat32


82 linux swap


83 linux ext2 or ext3


n 创建一个新分区


o 创建一个空白的dos分区表


p 打印分区表(同 fdisk -l)


q 退出不保存


t  修改文件系统类型


u 使用不同的单位显示


v 验证磁盘分区表


w 写入磁盘并退出


x 扩展功能,专家模式








16g分区


第一个分区为主分区类型,6g,文件系统类型ntfs


第二个分区为主分区类型,5g,文件系统类型ext3


逻辑分区第一个,3g,文件系统类型vfat


逻辑分区第二个,2g,文件系统类型vfat


逻辑分区第三个,1g,文件系统类型swap




软件包管理




tar包管理


后缀名为 .tar


文件归档,没有压缩功能,但可以通过选项调用其他压缩程序进行压缩。


x 解压缩


c 创建


v 显示操作的文件


f 指定压缩或解压缩的文件名


z 调用gzip命令压缩成.tar.gz格式


j 调用bzip2命令压缩成.tar.bz2格式




创建tar包


tar cvf  etc.tar   /etc


          目的文件 源文件




解压缩tar包


tar xf  etc.tar


将归档文件内容解压到当前目录下




创建tar.bz2压缩包


tar jcvf etc.tar.bz2 /etc




创建tar.gz压缩包


tar zcf  etc.tar.gz  /etc




解压缩包


tar jxf  etc.tar.bz2


tar zxvf  etc.tar.gz




简单的去掉解压缩选项,tar命令会自动判断文件类型解压


tar xf  etc.tar.bz2


tar xf  etc.tar.gz




默认解压将压缩文件内容解压到当前目录,如果需要指定解压路径,可以使用--directory选项或-C选项


tar xf  etc.tar.bz2  -C  /tmp






tar后缀的压缩包经常用于软代码软件的发布,解压后的内容为一个开源软件的源代码,需要编译后才能在系统中使用。






gzip压缩包


后缀为.gz


使用gzip命令进行压缩,gunzip进行解压缩


gzip命令会对给定的文件进行压缩,产生带.gz后缀的文件命令,并将原始文件删除


gzip install.log  压缩文件产生install.log.gz


gunzip install.log.gz  解压缩文件,还原install.log



gzip -d  install.log.gz  解压缩文件,与 gunzip效果相同




gzip命令在解压文件时,文件后缀必须是gz,否则无法执行解压缩






bzip2 压缩包


后缀为.bz2


使用bzip2进行压缩,使用bunzip2进行解压缩


使用bzip2也可以进行解压缩,-d选项的作用与gzip相同。






RPM软件包管理


红帽包管理器,是红帽公司发布的一种用于安装二进制应用程序的软件包格式。其他linux相同中也有使用debian的deb包管理程序。




RPM安装


rpm -i   软件包名称


i(install)


v 显示安装的信息


h 显示安装进度


rpm -ivh   firefox-3.6.5-i386.rpm




i386 或 i586 i686都是对应pc平台


src表示rpm包内容为源代码


noarch表示不依赖与平台,多数为脚本或资源文件




强制安装,并不检测依赖关系


--force --nodeps


rpm -ivh --force --nodeps  firefox-1.5.0.el5.centos.i386.rpom


很多软件包在安装后,会在/usr/lib/pkgconfig目录中创建文件,用于记录某些软件包安装信息,便于其他依赖的软件查询相应的版本和位置。






查询软件包


rpm -q(query)用于查询软件包,配合其他选项一起使用


rpm -qi  firefox 显示已经安装软件包的信息


rpm -qa  显示所有已经安装的软件包(rpm -qa | grep  firefox)


rpm -ql  firefox  显示软件包内容


rpm -qlp  coreutils-5.97.i386.rpm 显示指定rpm包的内容


rpm -qf  文件名 显示指定的文件是由哪个软件包安装进来






删除已安装软件包


rpm -e  软件包名




升级软件包


rpm -Uvh  软件包名   指定升级的软件包








========================


使用fdisk分区后,需要使用格式化命令后,才能在分区中存储数据。


不同类型分区使用不同的格式化命令


ext2、ext3 使用 mke2fs命令格式化


fat32使用mkfs.vfat


swap 使用mkswap




mkfs.ext2  /dev/sda2


mkfs.ext3 /dev/sdb4




mkfs.vfat /dev/sdb2


mkswap /dev/sdb3




对格式化以后的分区可以使用挂载命令,将指定分区设备挂载到某个目录上进行访问。被挂载的目录叫做挂载点。一般情况挂载点目录最好是空目录。


如果挂载点目录中有文件,当挂载后,暂时不可访问原有文件,只能看到被挂载以后的文件内容。






挂载命令mount。


直接使用mount命令可以查看当前挂载分区的列表




挂载分区


mount   设备名    挂载点目录




卸载分区


umount 设备名


umount 挂载点目录


注意:被卸载的分区,不能在使用中。工作路径不能在挂载点目录里。






mount命令常用选项


-t 指定要挂载的设备类型


mount -t  ext3  /dev/sdb1  /mnt




-o 挂载功能选项


mount -o loop /root/centos.iso   /mnt/iso






dd复制命令


dd if=/dev/zero  of=mydisk  bs=1024k  count=100


if=输入文件


of=输出文件名


bs=block size,一个块大小


count=数量




网络配置


文件共享


远程登录




======================


配置网络


ifconfig用于显示和配置网卡ip地址及子网掩码,对网卡开启和关闭


更改虚拟机网卡连接方式为“bridged adapter”


界面名称为:物理网卡(能够连接互联网络)




ifconfig 显示所有开启的网络设备信息


eth0 代表以太网卡第一个


lo  回环设备(localhost,127.0.0.1)


wlan0 无线网卡




通过ifconfig命令指定ip地址和子网掩码,但这种方法是临时的。当重新启动网卡时,之前的设置会自动被覆盖成配置文件的设置。




ifconfig 设备名  ip地址  netmask 子网掩码


ifconfig eth0  192.168.5.200 netmask  255.255.255.0


使用ping命令探测主机,使用ctrl+c终止


ping 192.168.5.100






ssh安全远程连接服务


ssh root@192.168.5.200




nmap localhost


查询主机开放端口


如果开启ssh服务的主机,22端口


putty程序,选择ssh类型,指定ip地址后就可以进行远程登录


登录时需要输入用户名和密码,之后就和本地操作一样控制计算机。




=============================




简单设置ip地址的方式可以使用终端的程序setup


setup命令可以设置系统的配置,其中包括网络设置


选择网络设置后,对指定的网卡进行配置。


去掉dhcp的选择,然后指定静态ip地址




设置完成,使用ifdown eth0关闭网卡,


再使用ifup eth0 开启网卡。系统会读取网卡配置文件,按照设置的ip进行配置。




/etc/sysconfig/network-scripts/ifcfg-eth0




device=设备名


hwaddr=mac地址


onboot=在启动时是否开启网卡


netmask=子网掩码


ipaddr=ip地址


type=网卡类型


gateway=网关设置




===========================




局域网访问互联网


1.设置ip地址,一般和网关在同一个网段


2.设置网关


route add  default  gw  192.168.5.1


add增加


default默认


gw网关gateway


3.设置dns服务器,linux系统中通过配置文件指定


/etc/resolv.conf


编辑配置文件,使用nameserver指定dns服务器


nameserver 202.96.69.38




============================




在一个网卡设置2个ip地址




复制ifcfg-eth0文件为ifcfg-eth0:1


修改ifcfg-eth0:1文件,将其中的device更改为eth0:1,将网段改为其他网段


使用ifup eth0:1启动第二个ip地址






==========================




NFS网路文件系统




服务器开启nfs服务后,客户端只需要通过mount命令即可将远程的共享目录挂载到本地目录上,使用时同自己本机目录和文件一样操作。




客户端进行访问时,使用挂在命令


mount  -t  nfs   192.168.5.200:/pub  /mnt


mount  指定文件系统   主机地址:共享目录  本地挂载点




nfs服务配置


/etc/exprots文件


每一行可以指定一个共享目录,


第一列为本地共享的目录,


第二列为允许访问的主机或网段


括号中为设置的访问选项。




/pub   192.168.5.0/24(rw, insecure, all_squash)




配置文件修改后需要重新启动服务才能生效


service nfs restart



/etc/rc.d/init.d/nfs restart






=============


子网掩码


0-255 8位二进制


4个8位, 32位长


192.168.5.0/24  同于 192.168.5.0  255.255.255.0


192.168.5.1 ~  192.168.5.254 都可以访问


=============




无法正常卸载的挂载点,可以-f选项强制卸载


umount -f  /mnt/usb




======================


1.ip地址保证可以访问。setup


2.修改配置文件/etc/exports


3. 重启服务service nfs restart


4.挂载测试mount -t nfs 192.168.5.200:/pub /mnt


/pub目录必须存在,如果需要能够写入,需要更改权限位1777


 /mnt挂载点必须存在




====================


telnet远程登录,不像ssh那么安全,但由于协议实现简单,所以大多数设备连接使用telnet完成。


开启linux系统telnet服务,需要修改xinetd服务的配置文件


/etc/xinetd.d目录中两个关于telnet的配置文件


krb5-telnet


telnet




telnet通过xinet服务管理


将配置问文件中disable=yes改为disable=no


之后重新启动xinetd服务,即可开启telnet服务,默认端口为23


service xinetd  restart




查询端口是否打开


nmap localhost




使用命令访问telnet


telnet 192.168.5.200




使用putty访问telnet


更改连接类型为telnet,填写服务器ip地址,即可连接


登录时同样需要用户名及密码,默认禁止root用户登录,可以先登录普通用户后使用su命令切换身份




tftp简单的文件传输,简化了ftp功能,通常用于已知服务器上文件,将文件下载到本地或开发板用。




配置文件


/etc/xinetd.d/tftp


修改disable=yes 为 disable=no




重启xinetd服务


service xinetd restart




默认tftp配置文件中指定/tftpboot目录为共享目录,将需要客户端下载的文件放在此目录中。


tftp服务不需要验证用户名和密码,只要知道文件名即可传输。




连接方式


tftp 192.168.5.200


下载文件,被下载的文件存储在执行tftp命令的目录里。


get 文件名


quit 退出




查看tftp服务打开的端口


netstat -an | grep udp


69端口为tftp服务开启udp端口




===================================




netstat 网络状态


netstat -an


a——所有


n——以数字的方式显示主机地址,否则显示主机名




established状态——已经建立连接


wait——等待


time out——连接超时


listen——监听(打开的服务)




===================================




文件共享samba




相关配置文件


/etc/samba/smb.conf


/etc/samba/lmhosts


/etc/samba/smbpasswd




主要配置文件smb.conf


如果需要创建公共目录,让所有用户不需要登录,即可以进入共享,并写入内容。需要先修改(默认user,以及server 需要系统的用户名和密码登录)


security = share




增加一个共享目录




[ myshare]  


comment=my share directory


browseable= yes


writeable=yes


guest ok=yes


path=/tftpboot


public=yes


readonly= no




其中


myshare为共享名


comment为共享说明


browseable为共享目录可以被显示


guest ok允许客户写入


path指定共享的目录(如果需要写入,则修改权限o+w)


public 指定为共享目录


readonly 是否只读






使linux smb服务显示在windows网络组中


修改配置文件的


workgroup = WORKGROUP


netbios name = linux-server


因为windows系统默认工作组为workgroup,


netbios name指局域网中的主机名




----------------------------------


使用密码方式访问samba服务


需要在安全选项上使用user项(server功能是通过其他验证服务器来验证)


security = user


注释 passdb行


增加 smb passwd file = /etc/samba/smbpasswd




在终端中使用smbpasswd命令为可以使用samba的用户增加密码


smbpasswd -a  nicolas




重启服务器后,需要使用系统用户身份访问共享目录






vsftpd 安全ftp文件传输服务


需要系统中安装vsftpd软件包


centos系统默认安装vsftpd


配置文件位置/etc/vsftpd/vsftpd.conf


默认支持系统用户登录、支持匿名登录




客户端程序ftp命令用于登录ftp服务器


ftp 192.168.5.200


使用系统用户和密码登录后,可以对用户家目录进行文件操作。


如果使用匿名账户,用户名和密码时ftp




ls 查看文件


cd 更改路径


get 下载文件(mget 支持通配符*)


put 上传文件


by  退出






ftp服务端口是21




bin 指定使用二进制传输,用于从服务器下载软件包、视频等非文本内容。如果使用文本模式传输软件包,则可能造成文件损坏。




如果需要查看执行ftp命令的目录里有什么文件(执行系统的命令)使用!


例如:!ls (windows中为dir命令)!dir




====================




磁盘限额


quota


系统可以通过磁盘限额,指定用户在系统磁盘中所使用的空间大小。


磁盘限额需要内核支持quota功能


可以通过dmesg命令查看是否有quota信息,有则可以使用磁盘配额功能。


dmesg | grep quota




为分区开启磁盘限额功能,需要在ext3文件系统上实现。


修改/etc/fstab文件,此文件用于系统启动时自动挂载文件系统。




第一列:设备


第二列:挂载点


第三列:文件系统类型


第四列:挂载选项


第五列:崩溃转储,默认0为不使用


第六列:启动检测,默认0为不检查




/dev/sdb1    /mnt/tmp    ext3     defaults   0  0




mount -a


将所有记录在fstab中,但没有挂载的分区都挂载上。




对分区增加磁盘限额,需要在fstab中对ext3分区增加挂载选项,分别是usrquota,grpquota。对应的是用户限额和组限额。可以指定一个用户在这个分区上能够使用的空间大小。也可以指定一个用户组在这个分区上使用的总大小。




修改第一行为


LABEL=/      /      ext3      defaults,usrquota,grpquota   1  1




使用重新挂载功能,让分区的磁盘配额功能生效


mount -o  remount  /




检测磁盘限额并在指定分区上创建配置文件


quotacheck -ugfcbm   /




执行成功后,分区的根目录下产生了


aquota.group


aquota.user


两个文件




使用


quotaon  /


打开指定分区的磁盘限额,到此,磁盘限额打开,可以配置用户或组,来指定限额的空间。




----------------------


指定用户在分区中限额


edquota  用户名




进入类似vi的编辑界面,需要修改的只有soft和hard下面的数字


blocks指当前用户已经使用的块数量


inodes指当前用户已经使用的i节点数




超过soft限制会被系统警告


到达hard限制将不能再写入数据或创建文件。




关闭指定分区的限额


quotaoff  /




计划任务


Linux系统中有两种计划任务,一种是at单次执行计划任务,一种是循环执行的cron计划任务。




at计划任务


服务器重启


service atd  restart




服务默认已经自动运行


at 指定计划任务


atq 查询计划任务


atrm  删除指定的计划任务




创建计划任务


at  时间


输入需要执行的指令,计划任务运行在后台,所以执行的命令如果默认输出到终端,则无法看到。


命令输入结束后,使用ctrl+d结束计划输入。最后会显示计划即将运行的具体时间。






atq列出所有即将执行的计划


第一列代表计划的编号


如果需要删除某项计划,使用atrm


atrm 计划编号


atrm  4




/etc/at.allow和at.deny用于指定系统中那些用户可以使用at计划任务。管理员一直可用。如果at.allow不存在则去读取at.deny


allow


为允许的用户列表,deny为禁止的用户列表








-------------------------------------




循环计划任务




crontab -e 编辑当前用户的循环计划


或是修改/etc/crontab修改系统计划任务。




编辑crontab计划时,编辑方式同vi编辑器


格式为


第一列——分钟(0-59)


第二列——小时(0-23)


第三列——日期(1-31)


第四列——月份(1-12)


第五列——星期(0-7)


第六列——执行的命令




每一行为一个计划,中间用空格分开


不需要指定的列,可以使用*代替


时间可以份段或列出(1,5,8,10)(0-4,8-12)


使用/表示间隔(0-59/2)




0 0 * * 6  shutdown -r now


每周六半夜12点 关机




30 15  1  * *  tar zcf /tmp/etc.tar.gz  /etc


每个月的1号,下午3点30份 执行系统配置备份




0 9-12,13-17  * * 1-5  wall “one hour”


工作日,每个小时进行提醒






crontab在etc中也同样存放用户对计划执行的控制文件


cron.allow和cron.deny,内容和使用方式同at.allow和at.deny




==================================




bash


脚本内容


第一行开头的#!表示此文件为脚本文件,紧跟的是指定用于执行此脚本的程序绝对路径。


#!/bin/bash




echo用于显示字符串到屏幕,输出信息给执行shell脚本的用户提示。


echo中引号的作用。


双引号表示显示文本字符串,可以使用环境变量。


单引号表示中间的文本内容原样输出,不进行替换


反引号表示中间的文本是终端命令,会执行命令获取结果




执行shell脚本的方式


一种为脚本文件增加x权限,使其可以直接执行


./myshell.sh


另种方式是调用shell命令去执行指定shell脚本


bash myshell.sh




----------------




系统环境变量的配置




/etc/profile用于设定每个用户的公共系统变量,并读取每个用户家目录中的.bashrc和.bash_profile文件,加载自定义变量。




定义变量


一般变量名为大写,通过=赋值


AAA="my name is root"




查看变量内容


echo $AAA




删除变量


unset AAA




在使用变量时,可以使用$AAA方式获得值,或者${AAA}获取。


两种方式区别在于$AAA容易产生混淆,最好使用${}方式取值




export命令使指定的变量可以在其他shell中读取。


shell程序中再运行shell程序,产生shell的嵌套。




声明的变量,不能直接在下层shell中获取


使用export命令可以将变量带到下层shell中。


但下层shell声明的变量以及修改不能带回上层






查看当前shell的变量使用set


查看export的环境变量使用env




练习:


写shell脚本


将env中的变量内容输出到文本~/myenv.txt


并在终端中进行提示"file export finished."


打印myenv.txt前10行






----------------------


第一行#!必须顶格


可以有tab进行缩进,一般用于if 、for 、函数等处


不在第一行使用的#,在每行开头#表示此行注释


------------------




特殊变量


$*  代表shell脚本执行时所提供的所有参数


$# 参数个数


$? 上一个退出的程序或脚本退出的状态 默认为0,错误为大于0


$$ 当前shell进程id


$! 后台执行的进程id


$0 脚本名称


$1 $2 $3 代表第一个参数,第二个参数。。。


$_ 最后一个指定的命令的选项




$(执行命令)或`执行命令`




转义字符\ 将紧跟在后面的特殊字符变成普通符号,将不具备特殊含义




使用$(())进行变量之间的数字运算


括号内直接使用变量名,不需要再加$




用于运算的变量的值必须为数字,如果值中有英文或符号,则运算前的转换会出现错误。




支持的运算包括+_*/


echo $((NUM1+NUM2))






==================


shell脚本中比较重要的


系统命令


脚本语法格式


文本处理(awk、sed)




练习:编写脚本


通过脚本给定的一个参数,将指定的目录进行压缩。


在/tmp目录下产生文件,文件名如


目录名_当前时间.tar.bz2




1.定义变量,用于存储:路径+文件名


2.执行命令tar,将变量作为文件名,参数1作为tar命令第二个参数。


脚本名为backupdir.sh


运行脚本


./backupdir.sh  /bin


结果产生


/tmp/bin_13:40.tar.bz2








#=====backupdir.sh=========


#!/bin/bash


LOCATION=/tmp


DIR=$1


TIME=`date "+%H:%M"`


FILENAME=${LOCATION}/${DIR}_${TIME}.tar.bz2


#FILENAME="/tmp/${1}_`date "+%H:%M"`.tar.bz2"




tar jcf $FILENAME  $DIR


echo $FILENAME




=======================




练习:


编写脚本,用于设定居于网络上网设置。


设定ip地址


设定网关


设定dns




脚本名称:setnetwork.sh


脚本接受三个参数


第一个参数设置ip地址。ifconfig


第二个参数设置网关。route


第三个参数用于设定dns地址,/etc/resolv.conf(nameserver)




执行方法:


./setnetwork.sh 192.168.100.20  192.168.100.1  202.96.69.38




#--------setnetwork.sh------


#!/bin/bash




ifconfig eth0 $1


route add default gw $2


echo "nameserver $3" > /etc/resolv.conf


#-----------------------------






在/opt目录下创建一个目录myroot


在此目录中创建目录,目录名称来自根目录下所有文件名。




mkdir /opt/myroot


cd /opt/myroot


mkdir `ls /`




------------------------




&& 当之前的命令正确执行,才执行后面的命令


|| 当之前的命令执行失败,才执行后面的命令




例如


make && make install






测试命令test




test可以测试文件属性、类型


可以测试表达式逻辑与或非


test -f backupdir.sh -a -f setnetwork.s  && echo "aaa"




test还可以对数值进行比较




流程控制


if分支语句




语法格式


if 测试语句


then


语句段


fi




---------


if 测试语句


then


语句段1


else


语句段2


fi




-----------


if 测试语句1


then


语句段1


elif 测试语句2


then


语句段2


else


语句段3


fi




================


改造之前backupdir.sh脚本


判断参数个数,必须大于1。否则直接退出。


判断指定目录是否存在,如果不存在,则进行提示后退出。


最后生成文件后,判断生成的文件是否可以读取。如果可以,则显示“文件创建成功”否则显示“文件创建失败”




 1 #!/bin/bash


 2


 3 if [ $# -eq 0 ]


 4 then


 5    echo "需要一个参数"


 6    exit


 7 fi


 8


 9 if [ ! -e $1 ]


10 then


11    echo "指定目录不存在"


12    exit


13 fi


14


15 FILENAME=/tmp/${1}_`date "+%H:%M"`.tar.bz2


16 tar jcf $FILENAME $1


17


18 echo $FILENAME


19


20 if [ -e $FILENAME ]


21 then


22    echo "文件创建成功"


23 else


24


25    echo "文件创建失败"


26 fi








=======================




编写计算器脚本


脚本名称:ca.sh


执行方式


ca 100  +  50


ca  99   x  6


ca  45  /   3


ca  7  -   2


通过参数给脚本提供操作数和操作符


通过判断操作符来进行相应计算,最后输出计算结果




ca 100  +  50


result=150








#!/bin/bash


if [ $# -lt 3 ]


then


echo "need 3 argment"


exit 1


fi




if [ "$2" = "x" ]


then


echo "ca  $1 $2 $3"


echo "result=$(($1*$3))"


elif [ "$2" = "/" ] || [ "$2" = "+" ] || [ "$2" = "-" ]


then


echo "ca $1 $2 $3"


echo "result=$(($1$2$3))"


else


echo "operator wrong!"


exit 2


fi




编写脚本实现猜数


由于暂时不使用循环,所以只提供两次猜测机会


使用 expr $RANDOM %  10


获得一个0到9之间的数保存在某变量中。


通过两次if判断输入的数和变量值进行对比,提示用户所输入的数字是大于猜数还是小于猜数。


如果两次猜测都失败,则提示未猜到数字,并显示数字


如果猜到数字后,提示成功信息,并显示猜测数字后退出。








编写脚本


在指定目录下查找文件




分支语句case


语法:


case 变量名 in


值1)


语句段1


;;


值2)


语句段2


;;


*)


语句段3


;;


esac




---------------


read ABC




case $ABC in


start)


service httpd start


;;


stop)


service httpd stop


;;


*)


echo "input start or stop"


;;


esac







--------------




编写脚本,使用case语句实现菜单


1——增加时间


2——显示最后10条记录


3——显示所有时间


4——初始化时间


5——退出




时间是使用date命令显示,增加就是将当前时间追加到一个文本中。显示时间是查看文本内容。初始化时间是删除文本文件。


输入相应的数字则使用指定的菜单项








作业:


完善配置网络脚本


setnet脚本,可以完成指定网络设置功能




具体使用方法


setnet -n  home


指定使用家庭网络配置


setnet -n  work


指定使用公司网络配置






setnet -n home  -ip  192.168.9.100


设定家庭网络配置中ip地址


(ifconfig eth0 IP)


setnet -n  home  -gw 192.168.9.1


设定家庭网络配置中route网关


(route add default gw IP)


setnet -n  home  -dns  202.96.69.38


设定家庭网络配置中dns


( 3.设置dns服务器,linux系统中通过 配置文件 指定


/etc/resolv.conf


编辑配置文件,使用nameserver指定dns服务 器


nameserver 202.96.69.38


)


以上每个值可以保存在独立的配置文件中。例如


home_ip.conf内容


192.168.9.100




set -n  work   -show


显示工作网络的所有配置项




==================


编写脚本实现用户登录模拟功能需要输入用户名和密码进行登录。用户名和登录存储在指定的文件中。登录以后,允许用户执行的命令是ls、cd、mkdir、exit。其他不允许执行。






for语句控制脚本语句段循环


基本语法格式


for 变量名  in 列表


do


语句段


done




列表是控制for循环的内容和次数。在每次循环中,变量的内容都会被逐个替换成列表中的项。在语句段中可以使用变量名来获取列表内容中一个元素。for语句段循环次数取决于列表元素数量。




编写脚本来


使用for循环实现99乘法表打印


seq命令用于生成序列,可以生成指定数字的列表


例如生成1~100的列表


seq 100


生成10 到 20的列表


seq 10 20




乘法表中需要对两个变量进行运算,输出乘法结果


两个变量的取值范围都是1~9的数字


由于不只有1x1 2x2 3x3,还有1x2 1x3 ...


所以每个变量都需要单独进行存储,与不同的数字进行运算


使用for循环嵌套方式,例如外层for中的数值作为乘法第一个操作数,里层for循环数值作为第二个操作数。




===========================




统计当前目录下文件数量




自动备份当前目录下所有目录,到/tmp目录中。产生每个目录对应的tar.gz备份文件




--------


ping命令探测主机,使用-c选项指定ping主机的次数


使用-W 指定等待时间


ping -c 1 -W 1 192.168.5.100




编写脚本,使用for循环,通过ping命令探测网络中主机ip


执行脚本


phost.sh  192.168.5


执行脚本后,被探测存在的主机,显示ip地址。最后统计主机数量-。






============================




while循环




基本语法


while 命令


do


语句段


done




while循环依赖与其后的命令执行结果。如果命令执行结果为真,则继续执行,否则跳出循环。






cat /etc/hosts | while read LINE


do


echo $LINE


done




用户从文件中读取行,while循环的次数由行数决定。


在while内可以通过变量名获取每一行的内容。






read 命令可以有多个参数


如果只有一个参数,则read将所有输入的内容作为这个变量的值


如果有多个参数,read将默认从左边的空格开始分割给变量赋值






============================




作业


编写shell脚本,用于班级点名


有两个功能,一个是显示姓名,之后需要输入y表示已到,或n代表未到,或o其他。


将输入的内容保存在以时间命名的文件中。


第二个功能是查看原有记录,显示的是最后一次点名的状态




until循环


与while相反,直到命令结果执行为真(0)时退出,否则一直循环。


语法格式


until 命令


do


语句段


done






===================


函数


定义格式


函数名(){


语句段


}




调用方法


函数名






如果调用时需要参数传递,可以在调用函数名后 增加参数


函数名 参数


在函数内部获取参数,与脚本获取参数方式一致。通过$1,$2,$3...获取参数。


如果在执行函数过程中需要跳出函数,而不是退出脚本,可以使用return命令。return命令可以带一个数字,类似程序退出的状态值。来表示函数退出的状态






练习:


将setnet功能模块化,使用函数完成操作


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值