Shell作为操作系统的外壳,为用户提供了使用操作系统的接口。Shell和核心是命令行提示符,它允许输入文本命令,然后解释命令,并在内核执行。
Linux系统上,通常有几种shell,不同的shell有不同的特性,所有的Linux发行版默认的Shell都是bash shell(Bourne again shell)。
基本的bash shell 命令
!!回车,唤出刚执行过的命令执行
pwd
print work directory 打印工作目录
clear
清屏
history
历史命令
scp
scp -r /opt/web/qf-web root@172.16.11.118:/opt/web/ ,将本机qf-web复制到118的/opt/web/目录下
免密传输,在src生成公钥ssh-keygen -t rsa(可能已经存在),在当前用户的home目录.ssh隐藏文件夹下,将id_rsa.pub公钥
加到dest用户home目录下的.ssh下的authorized_keys里。
-------------------搜索------------------------
grep
Global Regular Expression Print
grep -c Exception aaa.log ,输出匹配行的计数
-n:显示匹配行及行号
-v:显示不包含匹配文本的所有行。
-e: grep -e t -e f file1 ,指定多个匹配模式
pattern正则表达式主要参数:
\: 忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\<:从匹配正则表达式的行开始。
\>:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
.:所有的单个字符。
* :有字符,长度可以为0。
find
格式:find path -option [ -print ] [ -exec -ok command ] {} \;
-name filename #查找名为filename的文件,正则""
-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n #按文件访问时间来查找文件,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-perm #按执行权限来查找
find . -name "*sh" | xargs chmod a+x
find . -name .svn | xargs rm -rf
$find . -perm -007 -exec ls -l {} \; #查所有用户都可读写执行的文件
-------------------------遍历目录-------------------------------
cd
change directory 切换目录(制表符自动补全功能)
cd .. ,返回上一级目录(单点符.表示当前目录,双点符..表示父目录)
cd / ,返回根目录
cd ~ 或cd ,返回到用户home目录
cd - ,切换当前目录到上一个目录
cd /opt/v* ,从当前目录切换到/etc/v_ _(其他的匹配还可以?)
tab双击,提示目录下有哪些文件
cd /opt && ls ,切换到/opt目录并列出目录下的文件
ls/ll
ls -l long长清单
ls -lh 1024为单位
ls -lS 文件大小排序
ls -lt 最后修改时间排序
ls -l --block-size=M (K,M,G,T)
ls -a all所有文件(隐藏文件)
ls -p 目录文件加斜线
ls -r 翻转顺序
ls -F 文件末尾夹/
-------------------------处理文件-------------------------------
touch
创建空文件
cp
copy 复制文件或目录
-f:强行复制文件或目录,不论目标文件或目录是否已存在;
-R/r:递归处理,将指定目录下的所有文件与子目录一并处理;
-b:覆盖已存在的文件目标前将目标文件备份
cp /opt/t1 ../t2 . ,t1和t2文件复制到当前文件夹下
mv
move 移动,重命名
mv demo1.txt demo2.txt ,重命名为demo2.txt
mv demo1 demo2 ,demo2存在,移动到demo2下,不存在重命名为demo2
mv -b src desc ,如果dest存在,dest会备份为dest~,src重命名为dest
mv -u old.txt new.txt, new.txt的修改时间比old.txt的修改时间新,覆盖会失败
rm
remove 移除
-i 删除前逐一询问确认
-------------------------处理目录-------------------------------
mkdir
make directory 创建文件夹
mkdir ubuntu redhat slackware ,创建多个文件夹
mkdir -p letter/important ,递归的创建文件夹
rmdir
remove directory 删除空文件夹
----------------------查看全部文件内容---------------------------
cat
concatenate 查看整个文件内容
cat -n test1 给所有的行加上行号,-b
cat f1.txt>f2.txt ,文件f1内容写入到f2中,>>,不存则创建
more
分页查看,空格翻页,b键回退
less
less is more,more命令的升级版。
d后翻半页,u前翻半页
b前翻一页,空格后翻一页
/ ?搜索
nl
----------------------查看部分文件内容-------------------------
tail
显示文件最后几行内容
tail -n 100 a.txt 显示默认100行
tail -f a.log 显示a.log文件实时追加内容
head
显示文件开头几行内容
head -n a.txt
----------------------探查进程---------------------------------
ps
process status
ps -ef ,显示所有进程完整信息
top
第一行,当前系统时间,系统运行时间,几个用户登陆系统,1,5,15分钟负载情况
第二行,进程状态
第三行,us — 用户空间占用CPU的百分比。
sy — 内核空间占用CPU的百分比。
ni — 改变过优先级的进程占用CPU的百分比
id — 空闲CPU百分比
wa — IO等待占用CPU的百分比
hi — 硬中断(Hardware IRQ)占用CPU的百分比
si — 软中断(Software Interrupts)占用CPU的百分比
第四行,内存状态
第七行:PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)
kill
-l 列出所有可选信号
kill pid -9, 杀死进程
3 QUIT 结束运行
9 KILL 无条件终止
killall
killall pname
killall http*
--------------------检测内存---------------------
free
-k,-m,-g
-------------------检测磁盘空间------------------
df
disk free 设备上还有多少磁盘空间
df -h 用户易读的形式显示
du
disk usage ,某个特定目录的磁盘使用情况
du -h
du -sh ,显示统计
----------------------权限----------------------
chmod
chmod options mode file ,mode参数可以使用八进制模式或者符号模式
[ugoa][[+-=][rwxXstugo]] u 用户、g 组、o 其他,a 所有
chown
-----------------------文件处理------------------------
sort
排序
sort -t ':' -k 3 -n /etc/passwd 根据用户ID数值排序,-n数值排序,-t分隔符
-r 反序
cut
处理一个字符间隔的内容
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
who|cut -b 3-5,8
cut -c 3 cut_ch.txt
cat /etc/passwd|head -n 5|cut -d : -f 1
sed [-nefr] [动作]
选项与参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。
function:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
cat new.txt |sed '2,5d' 删除2-5行,不实际删除文件内容
nl /etc/passwd | sed '3,$d'
sed '2a drink tea'
nl /etc/passwd | sed '2i drink tea'
nl /etc/passwd | sed '2,5c No 2-5 number'
nl /etc/passwd | sed -n '5,7p'
nl /etc/passwd | sed -n '/root/p'
/sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' ,sed 's/要被取代的字串/新的字串/g'
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/' ,-e表示多点编辑,第一个编辑命令删除/etc/passwd第三行到末尾的数据,第二条命令搜索bash替换为blueshell
sed 的『 -i 』选项可以直接修改文件内容
sed -i 's/\.$/\!/g' regular_express.txt , sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !
sed -i '$a # This is a test' regular_express.txt
awk
awk的一般语法格式为:awk [-参数 变量] 'BEGIN{初始化}条件类型1{动作1}条件类型2{动作2}。。。。END{后处理}'
默认域分隔符是"空白键" 或 "[tab]键, $0则表示所有域,$1表示第一个域,$n表示第n个域
awk '{print}' /etc/passwd == awk '{print $0}' /etc/passwd
/etc/passwd |awk -F ':' '{print $1}'
cat /etc/passwd |awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}'
awk -F: '/root/' /etc/passwd
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size}'
awk -F ':' 'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}' /etc/passwd
awk -F: '$1~/mail/{print $1}' /etc/passwd
----------------------压缩数据-------------------
gzip是Linux上最流行的压缩工具
gzip
压缩文件,单个文件
-d ,解压缩
gunzip
解压文件
tar
tape archive
-c ,创建一个新的tar归档文件
-x ,从已有的tar归档文件中提取文件
-f ,输出结果到文件
-t ,列出tar归档文件的内容
-v ,在处理时显示文件
-z ,将输出重定向到gzip命令来压缩内容
tar -cvf test.tar test1/ test2/
tar -tf test.tar
tar -xvf test.tar
tar -czf test.tar test
tar -zxvf filename.tar.gz
---------------------网络----------------------
netstat
netstat -at ,只列出TCP连接,-u
netstat -ant ,禁用反向域名解析,显示的是ip
netstat -ntl ,所有处于监听状态的tcp连接
netstat -ntlp ,获取进程名、进程号以及用户 ID
netstat -ie ,打印网络接口,和ifconfig相似
---------------------日期----------------------
date
date +%Y%m%d
date +%Y%m%d-%H:%m:%S
date -s 20080523 //设置成20080523,这样会把具体时间设置成空00:00:00
date -s 01:01:01 //设置具体时间,不会对日期做更改
date -s “01:01:01 2008-05-23″ //这样可以设置全部时间
date -s “01:01:01 20080523″ //这样可以设置全部时间
date -s “2008-05-23 01:01:01″ //这样可以设置全部时间
date -s “20080523 01:01:01″ //这样可以设置全部时间