实验环境为red hat Linux 6.2。部分系统可能会有差别请区别对待!
Linux 和shell有关的命令:
cat /etc/shells 查看当前系统支持的shell
cat /etc/passwd 查看当前系统所有用户和密码
echo $0 输出shell本身的文件名
$$ shell本身的PID(ProcessID)
$? 最后运行的命令结束代码(返回值)
echo $? grep匹配成功输出为0 否则为1
bash --version 显示当前bash版本信息
ctrl alt F1 图形化界面
ctrl alt F2-F6 控制台界面
------------------------
Linux系统的登陆流程:
1.BIOS引导
从MBR中装载启动引导管理器(LILO或GRUB)运行该启动引导
2.GRUB启动引导
读取/boot/grub.conf文件并显示启动菜单
3.内核阶段
挂载根文件系统
4.Sys V init初始化阶段
启动/sbin/init程序和读取/etc/inittab文件
Linux基础命令(注意字母大小写)
ls -a 显示所有文件包括隐藏文件
ls -l 显示详细信息
ls -F 目录后加一符号,可执行文件加*,文件夹加/
cd - 回到上一步操作目录
cd ~ 回到home目录
cd .. 回到上层目录,cd ../../ 回到上两层目录
mkdir 新建文件夹
mkdir A B C 连续建立A B C三个文件夹
mkdir -p abc/123/bcd -p 建立多级目录
rmdir 删除空目录
rm -i test 询问是否删除test文件
-r 目录名 删除目录和该目录下的所有文件和子目录
-f 不经确认强制删除文件
touch 创建文件
echo aaa >>1.txt 创建文件并写入(>>连续写入,>覆盖写入)
echo 为屏幕输出
mv 1.txt 2.txt 移动目录或文件
mv 1a.txt -b 1b.txt 先对1b.txt备份(1b.txt~),再复制1a.txt到1b.txt,再 删除1a.txt
mv *.txt /tmp 所有.txt文件移动到/tmp目录下
cp 源文件 目的文件 连同源文件中的子目录一同拷贝
cp -r 源文件 目的文件 连同源文件中的子目录一同拷贝 -r批量
scp 1.txt root@172.18.12.87:/tmp/ 拷贝文件到目的主机的一个目录
scp -r 1.txt root@172.18.12.87:/tmp/ ./ 从目的主机拷贝文件到本地目录
more 1.txt 查看文件内容,分页查看,可查找文件内容
cat test 显示文件内容
cat file1 file2 顺序显示两个文件的内容
cat file1 file2 >>file3 1 2中的文件重定向到3中
cat -n --number 由 1 开始对所有输出的行数编号
-b 和 -n 相似,只不过对于空白行不编号
-A 显示制表符(windows和linux文本编辑回车的格式符 不一样)
su 提升权限至root用户
sudo 该条命令提升权限
su- 切换root用户,环境变量也切换过来了
useradd 添加用户
userdel 删除用户
passwd 修改密码
pwd 查看当前路径
man 命令符 帮助命令等同于 [命令符 --help]
ipconfig/flushdns windows系统刷新DNS解析缓存
chmod 777 1.sh u g o添加最高读写和执行权限
chmod +x 1.sh u g o添加执行权限到文件
chmod g+r 1.sh grup添加读权限到文件
chmod o-w 1.sh other剥夺写权限到文件
chown oracle:dba text 将 text 文件的属主和属组分别改为 oracle 和 dba
-------------------------------------------------------------------------------
u[user] g[grup] o[other]
rwx rwx rwx /*权限 r=4 x=1 w=2
-------------------------------------------------------------------------------
r(Read,读取) w(Write,写入) x(eXecute,执行)
S权限(SUID,Set UID) 可执行的文件搭配这个权限,便能得到特权,任意存取该文件的所有者能使用的全部系统资源。
t权限(Sticky) /tmp和 /var/tmp目录供所有用户暂时存取文件,该位可以理解为防删除位。如果没有写权限, 则这个目录下的所有文件都不能被删除, 同时也不能添加新的文件。如果希望用户能够添加文件但同时不能删除文件, 则可以对文件使用sticky bit位。设置该位后, 就算用户对目录具有写权限, 也不能删除该文件。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
和进程相关的命令:
ps -A 显示所有进程
ps -ef e所有 f详细信息
ps -ef | grep sshd | grep -v "grep" | awk '{print $2}' -v 不显示
cat httpd.conf | grep -v "#" | grep -v ^$ #不显示,空行也不显示
ps -aux > ps001.txt 重定向(将所有进程以文本形式写入ps001.txt)
top 动态显示进程 第二行最后0 zombie:非0说明有多少个僵尸进程。 0.0wa I/O读写操作问题[m t查看详细信息]
kill命令 杀死进程,-9强制杀死进程,杀死主进程后子程序也 会死亡
df -h 查看根目录下的磁盘空间,和使用率。h是human的 意思,df无法看到文件大小
du -h 查看当前目录空间大小
du -h --max-depth=1 abc/ 查看目录下深度为一的目录
mount /dev/cdrom /mnt/123 挂载的根节点
umount/dev/cdrom /mnt/123 直接挂载取消,[red hat中]
vi对文件编辑的功能有三种模式:一般模式,编辑模式,命令行模式。
一般模式下按下i,o,a键可进入文本输入模式,esc退回一般模式。
命令行模式通过:/等指令进入。q!强行离开不保存,q为退出,wq为保存退出。
一般行模式下的命令:
0(数字) 跳到行首
$ 跳到行尾
e 光标移到字尾
b 左移一个字,到前一个字的开头
w 右移一个字,到后一个字的开头
enter 跳到下一行行首
space 光标右移一位
backspace 光标左移一位
G 跳到最后一行
1G 可以跳到第一行,任何行都能跳
gg 跳到第一行行首
x 从光标前面删除
X 从光标后面删除
dd 为删除一行,前面加数字为往下删除的行数
yy 复制游标所在行,后加数字为复制次数,前加数字为复制下几行
p 为粘贴
8yyGp 从当前行复制8行粘贴到文档尾部(例子)
u 为撤销
U 撤销当前行上做的所有更改
. 重复上一次的修改
uu 恢复原本模样
命令行模式下:
:set nu 给每行标号
:set nonu 取消行标号
:wq 后加文件名为另存为这个文件名,源文件保存
:wq 3.txt 另存为3.txt(例子)
:1,10s/too/tootoo/gc 1到10行的too替换成tootoo
s代表替换,g代表全局,c代表询问
*********************************************************************
关于网络配置的命令:
ifconfig查看ip地址;
增加和删除ip :ifconfig+网卡+IP地址;
ifconfig+netmask+子网掩码;
ifconfig+网卡+down,关闭网卡;
ifconfig+网卡+up,打开网卡。
route 查询路由,netstat -r 也是查看路由表而且Windows,Linux通用
route add -net 192.168.2.0 netmask 255.255.255.0 dev eno16777736 添加表项,dev是表示从哪个网卡
route add 0.0.0.0 gw 192.168.1.1 添加默认路由和网关
route 的常用参数说明如下:<<<
-v 使用冗余输出模式-A family 指定特定的地址族(例如"inet" "inet6")
-n 使用数字显示的地址(例如 202.38.75.75)而不是去解释域名
-e 使用与 netstat 相同的输出格式
-ee 参数会产生很长的输出,包括内核路由表的几乎所有信息
-net 目标 target 是一个网段-host 目标 target 是一个单独的主机
-F 显示内核 FIB 路由表。结果可能被-e 和-ee 参数改变
-C 显示内核中路由缓存信息
del 删除一个路由表项
add 增加一个路由表项 >>>
netstat -atpa->allt->tcpp->pidu->udpl->listenn->端口号
nslookup 可双向解析域名解析成IP地址,解析的是域名不是URL
host [选项] [IP 地址/域名/主机名]
-a 显示所查域名或 IP 地址、域名或主机名的相关信息
ping [选项] [主机名/IP地址]
C:\Windows\System32\drivers\etc windows下的host文件路径
/etc/resolv.conf linux下DNS服务器地址
Iptables -F 清空iptables防火墙所有服务
telnet的登录和传输均为明文,密码和相关敏感信息极易被监听获取
ssh则使用加密协议登录和传输
*********************************************************************
关于安装的命令:
yum安装 /*基于RPM包安装,把所有的RPM包管理起来
yum源 /*网易http://mirrors.163.com/
RPM安装 /*演示的内网安全扫描工具Nessus的安装
RPM -qa /*查询所有的RPM包 -q查询 第三方软件安装在opt目录
源码安装:打包工具tar
tar -c /*创建包
tar -x /*解包
tar -t /*列出包中内容
tar -r /*增加文件到指定包中
tar -f /*后跟指定包文件
tar -v /*显示详细过程
tar -C /*指定解包后的路径
/*解压完后安装命令./configue, make ,make install 安装过程
tar命令:
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件! ---> c/x/t 仅能存在一个!不可同时存在!
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
-p :使用原文件的原来属性(属性不会依据使用者而变)
-P :可以使用绝对路径来压缩!
-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!
--exclude FILE:在压缩的过程中,不要将 FILE 打包!
*********************************************************************
Find命令用于查找指定文件 .是当前目录 /是根目录 ~是home目录,root权限下是root目录
find ~ -name "*.txt" -print 按名字查找home目录下所有txt文件并打印
find . -name "[A-Z]*".txt -print
find . -name "[A-Z,a-z,1-100]*".txt -print 查看以A-Z,a-z,1-100开头的txt文件
find . -name "1.txt" -prune -o -name "*.txt" -print 查看所有不是1.txt的txt文件
find . -path 目录查找
find . -path "./aa" -prune -o -name "*.txt" -print
在当前目录除aa之外的子目录内搜索 txt文件
find . \( -path "./aa" -o -path "./bb" \) -prune -o -name "*.txt" -print
除aa和bb之外的子目录中查找txt文件
find . ! -name "." -type d -prune -o -type f -name "*.txt" -print
在当前目录,不再子目录中,查找txt文件
find . -perm 755 -print
在当前目录及子目录中,查找属主具有读写执行,其他具有读执行权限的文件
find . -type l -print 在当前目录及子目录下,查找符号链接文件
find / -user www -type f -print 查找属主是www的文件
find / -nouser -type f -print 查找属主被删除的文件
find / -group mysql -type f -print 查找属组mysql的文件
find / -nogroup -type f -print 查找用户组被删掉的文件
find . -mtime -2 -type f -print 查找两天内修改的文件
find . -mtime +2 -type f -print 两天前修改的文件
mtime->被更改 atime->被访问 ctime->状态被改变
find . -newer "aa.txt" -type f -print 查找比aa.txt 还新的文件
find . !-newer "aa.txt" -type f -print 查找比aa.txt 还旧的文件
find . -newer "aa.txt" ! -newer "b.txt" -type f -print 查找比aa.txt新,比b.txt旧的
find / -size +1M -type f -print大于1M的文件,等于1M不写加减号,-1M为小于
find . -size 6c -print 查找等于6字节的文件 c->字节 k->kb
find . -name 'del.txt' -ok rm {} \; 查找del.txt并删除,删除前提示确认
find . -name 'aa.txt' -exec cp {} {}.bak \; 查找aa.txt 并备份为aa.txt.bak
*********************************************************************
cat 1.txt | grep -w "abcd" --color 匹配一个单词,--color加颜色
ps -ef | grep ssh | grep -v grep -v反选 -cw单词出现次数 -c出现次数多少行
grep -c "all" 1.txt 统计出现的次数
grep -n "abcd" 1.txt 显示匹配的行数
grep "abcd" 1.txt 2.txt 3.txt 查看匹配单词在哪个文件里具体位置
grep -l "abcd" 1.txt 2.txt 3.txt -l意为只显示文件名字,不显示具体位置
cat 1.txt | grep -i "ALL" -i不区分大小写
*********************************************************************
service camsd stop 停止 camsd 服务
service oracled start 启动 oracled 服务
service network restart 重启network服务
*********************************************************************
msconfig 打开开机启动项(Windows系统)
chkconfig --list 列出服务名
chkconfig --add httpd 增加httpd服务
chkconfig --del httpd 删除httpd服务
chkconfig --level httpd 2345 on 设置httpd在运行级别为2,3,4,5的情况下 都是on(开启)状态
chkconfig --list mysqld 列出mysqld的服务设置情况
*********************************************************************
sed命令可以将数据行进行替换、删除、新增、选取等特定工作。
sed 参数 动作 文件,-i直接修改文件内容
nl /etc/passwd | sed '2,5d' 显示行号并删除2-5行 d意为删除,nl显示行号
nl /etc/passwd | sed '2d' 只要删除第 2 行
nl /etc/passwd | sed '3,$d' 要删除第 3 到最后一行
nl /etc/passwd | sed '2a drink tea' 在第二行后加上drink tea字样
nl /etc/passwd | sed '2i drink tea' 在第二行前加上drink tea字样
nl /etc/passwd | sed '2a Drink tea or ......\ndrink beer' 增加两行以 上,则加\n
nl /etc/passwd | sed '2,5c number' 将第2-5行的内容取代成为number c取代
nl /etc/passwd | sed -n '5,7p' 仅列出 /etc/passwd文件内的第 5-7行
nl /etc/passwd | sed '/root/p' 搜索 /etc/passwd有root关键字的行
nl /etc/passwd | sed -n '/root/p' 使用-n的时候将只打印包含模板的行
nl /etc/passwd | sed '/root/d' 删除所有包含root的行,其他行输出
nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}' 搜索/etc/passwd,找到root 对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔, 这里把bash替换为blueshell,再输出这行。
nl /etc/passwd | sed -n '/bash/{s/bash/blueshell/;p;q}'
如果只替换/etc/passwd的第一个bash关键字为blueshell,就退出,加;q
/sbin/ifconfig eth0 利用 /sbin/ifconfig 查询IP
/sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' 将IP前面的部分删除
/sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
将 IP 后面的部分也予以删除
sed -i 's/\.$/\!/g' 1.txt 将1.txt内每一行结尾若为 . 则换成 !
sed -i '$a # This is a test' 1.txt 在1.txt 最后一行加入This is a test,
$代表的是最后一行,而a的动作是新增
sed -n "$=" if.txt 输出if.txt总行数
cat if.txt | wc -l 输出if.txt总行数
wc -l if.txt | awk '{print$1}' 输出if.txt总行数
sed -i '2s/C/b/' /home/1.txt 修改1.txt的第2行的C为b
sed -i 's/\r//' 192.168.2.0.txt 去除linux中windows文件中^M(制表符不同)
wc -l if.txt 输出文件行数和文件名
*********************************************************************
awk命令:简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。awk是以文件的一行为处理单位的。
head -n 10 头10行 tail -n 10 后10行,$1为第一列,以此类推。
last -n 5 | awk '{print $1}' 显示最近登录的5个帐号
cat /etc/passwd |awk -F ':' '{print $1}' 显示/etc/passwd的账户,
-F指定域分隔符为':'
cat /etc/passwd |awk -F ':' '{print $1"\t"$7}'
显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割
cat /etc/passwd |awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}'
只显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分 割,而且在所有行添加列名name,shell,在最后一行添加"blue,/bin/nosh"。
awk -F: '/root/' /etc/passwd 搜索/etc/passwd有root关键字的所有行,注意F和:之间没有空格
awk -F: '/^root/' /etc/passwd 搜索支持正则,例如找root开头的:
awk -F : '{print $4}' 1.txt | sed '/^$/d' 输出第四列并去除全文空行
awk -F: '/root/{print $7}' /etc/passwd
搜索/etc/passwd有root关键字的所有行,并显示对应的shell($7)
awk 'NR==1' cfg.txt | awk -F '=' '{print $2}' NR是已读的记录数,在此句可以理解为cfg.txt的第一行。
awk -F ':' '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd
统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容。
*********************************************************************
awk是一种程序语言,对文档资料的处理具有很强的功能。awk擅长从格式化报文或从一个大的文本文件中抽取数据。awk将一行文字按分隔符(filed-separator)分为多个域,依次记为$1,$2 . . . $n。$0代表所有域值。因此awk更适合于以域为单位来处理文件。
sed 是一个精简的,非交互式的编辑器,它能执行与编辑vi相同的编辑任务。作为编辑器,当然少不了插入(a/、i/),删除(d),查找替换(s)等命令。
总结:
1. 如果文件是格式化的,即由分隔符分为多个域的,优先使用awk;
2. awk适合按列(域)操作,sed适合按行操作;
3. awk适合对文件的抽取整理,sed适合对文件的编辑。