Linux 介绍
组成:
内核 用来管理硬件资源
库: .so 共享对象,windows:dll 动态链接库 没有执行入口的程序
应用程序
作用:当桌面 ,当服务器
Linux的基本原则:
1、由目的单一的小程序组成;组合小程序完成复杂任务;
2、一切皆文件;
3、尽量避免捕获用户接口;
4、配置文件保存为纯文本格式;
命令格式:
命令 选项 参数
选项:
短选项: -
多个选项可以组合:-a -b = -ab
长选项: --
参数:命令的作用对象
linux命令分类:
过滤器 编辑器 交互工具
过滤器 ls cat 输入源是后面的参数对应的文件 默认输出源是标准输出源—屏幕
从一个来源,到一个输出源
输入输出重定向是针对过滤器来的
重定向:输出重定向 >
清空文件 > aa 也可以用来新建
重定向 ls >aa 文件会先被清空 只能重定向正确的信息
追加 >> 目标文件不会被清空
错误重定向 find / -name shrek > /tmp/findfile 2>$1
等价于 find / -name shrek &> /tmp/findfile 正确信息和错误信息一起重定向过去
管道 :
串联过滤器,将前面的输出当做后面的输入
ls -l /ect/ | grep '^d' |wc -l
统计某目录中文件夹的个数 ls -l /etc/ | grep '^d' | wc -l
在管道流动过程中复制一份出来 ls -l /etc/ | tee bbb.txt |grep '^d' | wc -l
常用命令
ls命令
-l:长格式
文件类型:
-:普通文件 (f)
d: 目录文件
b: 块设备文件 (block)
c: 字符设备文件 (character)
l: 符号链接文件(symbolic link file)
p: 命令管道文件(pipe)
s: 套接字文件(socket)
文件权限:9位,每3位一组,3组 权限(U,G,O)每一组:rwx(读,写,执行), r-- ,第一组:文件的属主用户权限。第二组:文件的属组用户权限,第三组:其他用户权限
文件硬链接的次数
文件的属主(owner)
文件的属组(group)
文件大小(size),单位是字节
时间戳(timestamp):最近一次被修改的时间
访问:access
修改:modify,文件内容发生了改变
改变:change,metadata,元数据
-h:做单位转换
-a: 显示以.开头的隐藏文件
. 表示当前目录
.. 表示父目录
-A
-d: 显示目录自身属性
-i: index node, inode
-r: 逆序显示
-R: 递归(recursive)显示
cd命令
change directory
家目录:每一个用户都有一个家目录,在自己的家目录中权限最大,root家目录是/root
主目录/, home directory
cd ~USERNAME: 进入指定用户的家目录
cd -:在当前目录和前一次所在的目录之间来回切换
cd ..返回上以及目录
帮助查询
1、 type: 显示指定属于哪种类型
结果是:pwd is a shell builtin 表明是内部命令
结果是:date is /bin/date 表明是外部命令
2、帮助查询
Shell内置命令查帮助手册:
help pwd
外部命令查看帮助手册:
man cp
MAN
翻屏:
向后翻一屏:SPACE
向前翻一屏:b
向后翻一行:ENTER
向前翻一行:k
查找:
/KEYWORD: 向后
n: 下一个
N:前一个
q: 退出
时间管理:
date date +'%Y-%m-%d %H:%S:%M'
系统时钟和硬件时钟一致 hwclock -s
echo命令
标准输出命令
echo -e "adfdf\tadfa\nasdf"
无交互修改密码:echo "1234567" | passwd --stdin root
文件系统:
/boot: 系统启动相关的文件,如内核、initrd,以及grub(bootloader)
/dev: 设备文件
设备文件:
块设备:随机访问,数据块
字符设备:线性访问,按字符为单位
设备号:主设备号(major)和次设备号(minor)
/etc:配置文件
/home:用户的家目录,每一个用户的家目录通常默认为/home/USERNAME
/root:管理员的家目录;
/lib:库文件
静态库, .a
动态库, .dll, .so (shared object)
/lib/modules:内核模块文件
/lib64
/media:挂载点目录,移动设备
/mnt:挂载点目录,额外的临时文件系统
/opt:可选目录,第三方程序的安装目录
/proc:伪文件系统,内核映射文件
/sys:伪文件系统,跟硬件设备相关的属性映射文件
/tmp:临时文件, /var/tmp
/var:可变化的文件
/bin: 可执行文件, 用户命令
/sbin:管理命令
绝对路径:以跟目录为起点到目标的路径。
相对路径:以当前目录为起点到目标的路径
文件查看:
tree:查看目录树
stat :查看文件详细信息
cat:查看文件内容
more:分页查询
less:分行查询
head:查看文件前部 head -9 /etc/passwd | tail -1 查看具体某一行
tail:查看文件尾部
tail -f: 查看文件尾部,不退出,等待显示后续追加至此文件的新内容
find:查找find /etc/ -name profile
grep 过滤 '^root' /etc/passwd
chmod:修改文件权限:chmod o+w a.txt
mkdir:创建空目录 mkdir –p /etc/aa/bb 将父目录一起创建:
touch 创建新文件
rm –rf 递归,不交互删除文件夹
文件处理:
文本排序:sort
-n:数值排序
-r: 降序
-t: 字段分隔符
-k: 以哪个字段为关键字进行排序
-u: 排序后相同的行只显示一次
-f: 排序时忽略字符大小写
文本切割:cut
-d: 指定字段分隔符,默认是空格
-f: 指定要显示的字段
-f 1,3
-f 1-3
提取所有用户名及其登录的shell:cat /etc/passwd | cut -d : -f1,7
文本统计:wc
-l 统计行
-w 统计单词
-c 统计字符
-L 给出最长行的长度
文本复制:cp
:文件复制
-r :拷贝整个目录
-i 存在覆盖前确认
-f 如果存在即覆盖
-a:归档复制,常用于备份
编辑器:
vi基本使用:
vim模式:
编辑模式(命令模式)
输入模式
末行模式
模式转换:
编辑-->输入:
i: 在当前光标所在字符的前面,转为输入模式;
a: 在当前光标所在字符的后面,转为输入模式;
o: 在当前光标所在行的下方,新建一行,并转为输入模式;
I:在当前光标所在行的行首,转换为输入模式
A:在当前光标所在行的行尾,转换为输入模式
O:在当前光标所在行的上方,新建一行,并转为输入模式;
输入-->编辑:ESC
编辑-->末行 :
末行-->编辑:ESC, ESC
关闭文件
末行模式关闭文件
:q 退出
:wq 保存并退出
:q! 不保存并退出
:w 保存
:w! 强行保存
:wq --> :x
移动光标(编辑模式)
1、逐字符移动:
h: 左
L: 右
j: 下
k: 上
#h: 移动#个字符;
2、以单词为单位移动
w: 移至下一个单词的词首
e: 跳至当前或下一个单词的词尾
b: 跳至当前或前一个单词的词首
#w:
3、行内跳转:
0: 绝对行首
^: 行首的第一个非空白字符
$: 绝对行尾
4、行间跳转
#G:跳转至第#行;
G:最后一行
gg :第一行
末行模式下
,直接给出行号即可
翻屏
Ctrl+f: 向下翻一屏
Ctrl+b: 向上翻一屏
Ctrl+d: 向下翻半屏
Ctrl+u: 向上翻半屏
删除
删除单个字符
x: 删除光标所在处的单个字符
#x: 删除光标所在处及向后的共#个字符
删除命令: d
d命令跟跳转命令组合使用;
#dw, #de, #db
dd: 删除当前光标所在行
#dd: 删除包括当前光标所在行在内的#行;
复制粘贴
Linux中只有剪切,没有删除
粘贴命令 p
复制命令 yy
替换:r /R
撤消编辑操作 u
撤消最近一次撤消操作:Ctrl+r
剪贴版操作
复制 双引号+a yy 调用剪贴板a
粘贴 双引号+a p 调用剪贴板b
查找
/PATTERN 从上往下匹配
?PATTERN 从下往上匹配
n 向上翻页
N 向下翻页
查找并替换
在末行模式下使用s命令
ADDR1,ADDR2s@PATTERN@string@gi
:1,$ s/nologin/bash/g /g表示不交互 将所有的nologin替换成bash
快捷键:从命令行进入前就进行匹配,让光标定位
Vim +5/path /etc/profile 光标定位在第五行的path处
vim +/root /etc/passwd 进入编辑前先匹配出所有的root
vim +$ passwd 进入就提前跳到最后行
编辑模式常用命令:
另存 :w aa.backup
读入另外一个文件 :r a.txt
显示执行某个命令的结果 :r ! ls
回复到最初状态 :e!
查找并替换 :1,$ s/nologin/bash/g /g表示不交互 将所有的nologin替换成bash
sed基本使用:
sed流编辑器,和正则搭配非常强大,可以帮我们在shell脚本中改配置文件
linux默认只打印不编辑文本,只有加了 –i参数以后才会编辑文本
系统中的实用教程: info sed
常用正则:
^表示一行的开头 如/^#/以#开头的匹配
$表示一行的结尾 如/}$表示以}结尾的匹配
\<表示词头 如\<abc表示以abc为首的词
\>表示词尾 如abc\>表示以abc结尾的词
. 任意一个字符 * 任意多个前面的字符
[]字符集 如[a-zA-Z]表示匹配所有的字母
[^a] 表示取反
S命令:替换
单个匹配:
基本格式 sed 参数 "/匹配的内容/替换的内容/g" 目标文件 /g指的是全行匹配
匹配替换:
去掉html中的所有tag标签:Sed s/<[^>]*>//g html.txt
在第三行将my替换成you Sed '3s/my/you/g' a.txt
在第三到六行将my替换成you Sed '3,6s/my/you/g ' a.txt
只替换每一行的第一个s Sed 's/s/S/1' a.txt
匹配bash一行,将root替换成bob sed -e "/bash/s/root/bob/g" /etc/passwd
多个匹配:
第1到3行的my换成有 3到最后的this换成that
Sed -e '1,3s/my/you/g' –e '3,$s/this/that/g' a.txt
去掉文件中的注释和空行 sed -e "/^#/d" -e "/^$/d" a.txt
根据文件:sed -f sss /etc/passwd
文件内容:
等价于执行脚本:./sss /etc/passwd
注意执行脚本前需要对文件添加可执行的权限 chmod u+x sss
脚本内容:
圆括号匹配
圆括号\(\)括起来的正则表达式所匹配的字符串可以当做字符串来使用
Sed中使用的是\1 \2
Sed 's/this is my \([^,]*\), .*is\(.*\)/\1:\2/g' my.txt
待匹配的字符串: this is my cat , is Betty
提取结果: cat:Betty
&的作用:
用&来当中被匹配的变量,前后都可以加东西
将my替换成mydog Sed 's/my/[&]dog/g' my.txt
sed命令
N命令
作用:把下一行的内容纳入当成缓冲区匹配,把奇数行并入偶数行,并且只匹配一次
待处理文本:
将所有换行符替换成逗号,两行合并成一行
sed -i 'N;s/\n/,/g' a.txt
结果:
i命令a命令
append insert用来添加行的
在第一行后插入一行
sed " 1 i this is my monkey , my monkey's name is wukong " a.txt
在第一行后追加一行
sed " 1 a this is my monkey , my monkey's name is wukong " a.txt
在最后一行以后追加一行
sed " $ a this is my monkey , my monkey's name is wukong " a.txt
匹配fish这一行,在后面追加一句
sed "/fish/a this is my monkey ,my monkey's name is wukong" my.txt
c命令
c命令是替换匹配行
将第一行替换:sed " 1 c this is my monkey , my monkey's name is wukong " a.txt
d命令
删除匹配:
sed /fish/d my.txt :将第二行删除:sed 2d my.txt
将第二行以后的内容全部删除:sed "2,$ d" a.txt
将orange和apple之间的删除掉 sed '/orange,/apple/d' a.txt
p命令
打印命令,把这个命令当成grep式的命令:Sed '/fish/p' my.txt
直接显示匹配到的这一行:Sed –n '/fish/p' ny.txt
n指的是默认情况不显示,只有在匹配处才显示
从一个模式到另一个模式 Sed -n '/dog/ , /fish/p' my.txt
从第一行匹配到匹配fish成功的那一行
Sed –n '1, /fish/p' my.txt
awk基本用法
awk是一个强大的文本分析工具,awk除了针对行,还可以针对列做操作
相对于grep的查找,sed的编辑,
awk在其对数据分析并生成报告时,显得尤为强大。
简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。 $0指一整行 $n指的是第n列
打印命令:
读取某一列的值:
chkconfig --list| awk '{print $4}'
先做判断,再打印 第一列为rdisc时候打印第四列
chkconfig --list| awk '$1=="rdisc" { print $4}'
列之间加连接语句:
chkconfig --list| awk '{ print $4 " on level " $5}'
将所有用户和UID显示出来:awk –F : '{$1 " UID is " $3}' /etc/passwd -F 制定分隔符
提取出所有用户: cat /etc/passwd | awk –F ':' '{print $1}'
搜索支持正则,例如找root开头的: awk -F: '/^root/' /etc/passwd
运行awt程序:
awk工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。
统计运行级别为3的服务:
chkconfig --list | awk 'BEGIN {ii=1} { if ($5=="3:on") ii+=1} END {print ii} '
awk –f 执行脚本
chkconfig --list | awk -f aaa
awk内置变量
awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
$0变量是指整条记录。$1表示当前行的第一个域,$2表示当前行的第二个域,......以此类推。
awk编程实例:
下面统计/etc/passwd的账户人数
awk '{count++;print $0;} END{print "user count is ", count}' /etc/passwd
统计某个文件夹下的文件占用的字节数
ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size}'
[end]size is 8657198
显示/etc/passwd的账户
awk -F ':' 'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}' /etc/passwd
nano基本使用:
基本使用:nano-----ctrl+o---enter-----ctrl+x
用户管理:
useradd, userdel, usermod, passwd, chsh, chfn, finger, id, chage
useradd [options] USERNAME
-u UID
-g GID(基本组)
-G GID,... (附加组)
-c "COMMENT"
-d /path/to/directory
-s SHELL
-m -k
-M
-r: 添加系统用户
userdel:
userdel [option] USERNAME
-r: 同时删除用户的家目录
finger: 查看用户帐号信息
finger USERNAME
usermod
-u UID
-g GID
-a -G GID:不使用-a选项,会覆盖此前的附加组;
-c
-d -m:
-s
-l
-L:锁定帐号
-U:解锁帐号
chsh: 修改用户的默认shell
chfn:修改注释信息
密码管理:
passwd [USERNAME]
--stdin
-l
-u
-d: 删除用户密码
pwck:检查用户帐号完整性
组管理:
groupadd, groupdel, groupmod, gpasswd
创建组:groupadd
groupadd
-g GID
-r:添加为系统组
groupmod
-g GID
-n GRPNAME
groupdel
gpasswd:为组设定密码
newgrp GRPNAME <--> exit
chage
-d: 最近一次的修改时间
-E: 过期时间
-I:非活动时间
-m: 最短使用期限
-M: 最长使用期限
-W: 警告时间
权限管理:
chown, chgrp, chmod, umask
三种权限:
r:读
w:写
x:执行
三类用户:
u: 属主
g: 属组
o: 其它用户
chmod u+x /tmp/a.txt 给拥有者可执行的权限
ps:查看进程
分屏显示进程信息 :ps aux | more
从所有进程中查找java进程:ps aux |grep java
其他实用命令:
df
查看磁盘状况
netstat
查看网络状态: -ptnl
查ssh进程的网络状况 :netstat -ntpl | grep sshd
yum
yum install man 安装man命令对应的程序:是在线安装的
command not found 有一个原因是相关程序没有安装
iptables
设置参数:
-p 协议 后跟协议名称
-s 来源 后跟源ip
-d目的地 后跟目标ip
-j 对待策略 ACCEPT DROP REJECT(REJECT 是基于ACCEPT的)
--sport 源端口
--dport目标端口
-m 采用iptables的扩展模块
策略:INPUT(进入) FORWARD(转发) OUTPUT (发出)
-o 出口 eth0 eth1
-i 入口 eth0 eth1
配置文件操作:
-A 添加 -I 插入 -D 删除 -F清除 -L显示
在第二条处插入iptables –A INPUT 2 -s 192.168.0.2 --dport 22 -j ACCEPT
将第三条INPUT删除 iptables –D INPUT 3
匹配删除: iptables –D INPUT -s 192.168.0.2 –j ACCEPT
显示iptables iptables –L -n
清除iptables iptables–F 清除
示例:
iptables -A INPUT –p tcp --dport 66 --sport 55 -s 192.168.0.0 -d 192.168.0.254 -i eth0 -o eth0 –j DROP ACCEPT REJECT
iptables -A INPUT –p tcp --sport 1025:2222 -s 192.168.0.0 –j DROP
配置文件保存:
service iptables save
iptables配置文件位置: /etc/sysconfig/iptables
重启服务:
chkconfig iptables on
service iptables restart
实例:
拒绝访问iptables –A INPUT -s 192.168.0.2 –p tcp --dport 22 -j DROP
允许访问iptables –A INPUT -s 192.168.0.2 --dport 22 -j ACCEPT
设置所有数据包拒绝:iptables –P INPUT DROP iptables –F 清除不了iptables –P
设置所有数据包允许 iptables –P INPUT ACCEPT
我访问别人可以,别人访问我可以, 别人可以访问我的80端口
做一个小的防火墙:
2000/s以下可以正常访问, 2000/s-2200/s记录日志 日志在 /etc/syslog.conf中
iptables –A -m limit –limit 2000/s –j ACCEPT
iptables –A -m limit –limit 2200/s –j log
将网关绑定一个MAC地址 ,防止arp欺骗 arp –s gatewayIp gatewayMAC