我学的时候用的是 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功能模块化,使用函数完成操作