您的位置:首页 > 运维架构 > Shell

shell 指令 (一)

2015-07-31 23:01 701 查看
权限:用户 读写 ugoa rwx

* useradd userdel groupadd groupmod usermod su sudo who whoami passwd

* chgrp chmod chown umask chattr lsattr

浏览:文本 文件 磁盘 配置 -m modify -c change -a access + date: Ymd His

* vim sed touch cat echo +date history|more less head tail | grep preg awk nl cut split wc join paste | sort diff locate | col expand tr

* file find ln cp ls mkdir rmdir mv rm whereis which | > < >> 2>/dev/null tee

* du df cd (dirs) pwd stat mount umount fdisk alias

* chkconfig timeconfig | shutdown login logout reboot | read readonly exec  + wait sleep exit + sh rpm mail xargs iconv

执行:压缩( zj jcv jxv) 任务(系统 网络 数据 (分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 周(0-7) 命令|(所有时刻) ,(分隔时段) -(时段内) /n(每隔n分钟)))

* gzip bzip2 tar dump restore

* at crontab nohup bg fg | ps pstree nice renice kill killall (pkill)

* top free uptime iostat vmstat dmesg w uname ulimit logrotate logwatch(clear)

* telnet ifconfig netstat ping apachectl httpd wget iptables ip yum (mail)

* mysqldump mysqlimport|loaddata|source mysqladmin mysqlshow mysql (-A-B |--single-trasanction --master-data)

===========================or==================================================

--文本:vim sed grep sort cat more touch less tail head diff locate awk nl

--文件:

* file find ln cp ls mkdir rmdir mv rm whereis which tee

* chgrp chmod chown umask

* gzip bzip2 tar dump restore

--磁盘:du df cd (dirs) pwd stat mount umount fdisk alias

--系统:

* user: useradd userdel groupadd groupmod usermod su sudo who whoami passwd

* task:

run : at crontab nohup bg fg

exec: w ps pstree top kill killall (pkill) nice renice free uname uptime iostat netstat dmesg vmstat ulimit logrotate (clear)

* config : echo date history chkconfig timeconfig read exec readonly shutdown | login|logout reboot wait sleep exit

--网络:

* info:telnet httpd ifconfig netstat ping apachectl

* use:wget iptables ip yum (mail) mysqldump mysqlimport|loaddata|source mysqladmin mysqlshow mysql

===========================or==================================================

--管道:重定向 执行 连接 拆分 匹配

* redirect : cat + > < >> 2>/dev/null tee

* execute : cat + sh mail tar rpm iconv xargs

* join: join paste col more expand head tr

* cut:echo +cut split awk sort grep wc touch less

* preg

--脚本: 循环 判断 参数 输出 任务 显示 读取 数据

#! expr bc if-then-else elif else if if-then case case esac

for while test util continue break shift

$# $* $@ getopt getopts read

stdin stdout stderr lsof /dev/null mktemp tee

trap & nohup nice renice cron

echo local return

vim sed gawk

mysql curl disk user bak sys trace

0.参数:

-v 反选

-i 忽略大小写 交互-p

-n 输出行号

-r 反向排序 递归

-u 去重排序

-t 分隔符

-a 追加 全部

-d 目录

-f 执行

-c 执行

-h 字节单位

-l 显示列表

-d delete

-s replace

zj压缩 jc(create)v jx(extract)v

时间:-m modify -c change -a access

date: Ymd His

权限:u(owner) g(group) o(others) a(all) rwx

轮询:

分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 周(0-7) 命令

* (所有时刻) ,(分隔时段) -(时段内) /n(每隔n分钟)

1.基础操作指令

--文本:vim sed grep sort cat more touch less tail head diff locate awk nl

vim
ctrl+f 向下一页
ctrl+b 向上一页
0 行首
$ 行尾
G文件最后一行

nEnter 光标向下移动n行
20yy复制下面的20行
pP 复制数据

. 重复上个操作

i-当前字符开始插入 o-光标所在下一行替换成新行 R-替换 Esc
:w :wq :q! :wq!

:n1,n2s/word1/word2/g n1行与n2行之间寻找word1这个字符串,并把它替换成word2
:1,$s/word1/word2/gc 第一行到最后一行查找word1字符串,并替换成word2,且给用户确认confirm

sed

nl /etc/passwd |sed ‘2,5d’ 删除2-5行
nl /etc/passwd |sed ‘2a drink tea’ 加在第三行 2i是加载第二行前
nl /etc/passwd |sed ‘2,5c No 2-5 number’ 替换2-5行为No 2-5 number
nl /etc/passwd |sed -n ‘2,5p’ 取出5-7行
sed ’s/要被替换的字符串/新的字符串/g'

touch

-mtime 修改过的时间

-ctime 状态改过的时间

-atime 访问时间

cat -n 打印行号 | nl -b a -n rz 2015.log 空白行也写入行号,同时补0

awk last -n 5 |awk '{print $! "\t" $3}' 最后5行的第一列到第三列

more + less : enter space q +pageUp pageDown

head -n number | tail -n number + -f file

grep

-v 反选

-i 忽略大小写

-n 输出行号

-An -Bm —color=auto ’搜索的字符’ (前n行 后m行)

+正则 (356页)

sort

-f 忽略大小写

-r 反向排序

-u 去重排序

-t 分隔符

diff:

from file to file (4d(delete)3 6c(replace)5)

-b 忽略空格

-B 忽略空白行

-i 忽略大小写

locate (可updatedb,更新后查询)

-i 忽略大小写

-r 正则匹配

--文件目录:file find ln cp ls mkdir rmdir mv rm whereis which tee umask chgrp chmod chown chattr lsattr

file: filename

whereis -m(只寻找某个命令下的) 命令名

which -a(列出所有) 命令名

chmod -R xyz

r-4 w-2 x-1

rwx rwx rwx ==> u(owner) g(group) o(others) a(all)

chmod u=rwx, go=rx filename | chmod a+w filename

chown -R 账号 dir/file

chgrp -R dir/file

chattr +a(只能增加) +i(无法更改)

lsattr -adr

find

-mtime + - mtime(n+1天前 n天内 n-n+1)

-user

-name

-size

-type

-perm

-exec( find / -perm +7000 -exec ls -l { 这里是find执行查询后的结果})

tee

-a(add) file

ls -l /home | tee -a ~/homefile | more 写入homophile文件,屏幕上显示出来

ls

-a 全部文件,连同隐藏文件一起列出来

-d 仅列出目录

-l 列出长数据串,包含文件的属性与权限等数据

cp

-a 连同文件属性一起复制过来了

-i 若目标文件存在,则会先问一下

-r 递归复制文件

rm -r 慎用

mv 移动和更改文件名(rename)

mkdir -p 多级别目录 + -m 711 dir | rmdir 只能删除空的目录 -p连同上层空空目录一起删了

ln -s

硬链接:只能连接文件,相当于备份,删了一个另一个不受影响

软连接:还能连接目录,相当于快捷方式,删了它不会影响源文件,但删了源文件它就消失了

umask

022

drwxrwxrwx r=4 w=2 x=1 022 ——w—w-

如果要增加权限,就要减少umask的值

--文件压缩:gzip bzip2 tar dump restore

tar

-jcv -f filename.tar.bz2 被压缩的文件名或目录名称

-jtv -f filename.tar.bz2

-jxv -f filenametar.bz2 -C 欲解压缩的目录

-z gzip压缩和解压缩 *.tar.gz

-j bz2压缩和解压缩 *.tar.bz2

dump

-1u -f dump.file origin.file

-W 查看备份时间

-S 查看大小

restore

-t -f file.dump 还原dump数据

-C -f file.dump 查看差异数据

-r -f file.dump 还原所有文件

gzip(-v file)

bzip2(-z file)

2.系统操作指令

--user : useradd userdel groupadd groupmod usermod su sudo who whoami passwd

useradd

(useradd usename 系统默认创建了必要项)

-u UID

-g group

-G group

-D 默认项

usermod 修改useradd后的用户参数

-c 加说明

-e 密码失效

-d 创建主文件

groupadd

-g gid

-r groupname

groupmode

-g 修改GID数字

-n 修改既有组名

userdel -r 用户名 //连同用户主文件一起删了

su - -c “命令行"

sudo visudo修改 用户+群组 | 不同的权限 | 免密码

who : 用户情况

passwd

—stdin echo “abc543cc” | passwd - -stdin username 直接更改用户密码为abc543cc

-l lock密码

-u ulock密码

-S 密码信息

-n不可修改密码天数

-x 必须修改密码天数

-w 密码过期前警告天数

-i 密码失效天数

--task

run : at crontab nohup bg fg

exec: w ps pstree top kill killall (pkill) nice renice free uname uptime
iostat netstat dmesg vmstat ulimit logrotate (clear)

--------------------------run-----------------------------------------

at

-c +命令

-l 浏览

-d 删除

-v 时间

-m email通知用户完成

atq 查看任务信息 | atrm jobNo 删除任务数

crontab

-u username

-e 编辑

-r 删除

-l 浏览

分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 周(0-7) 命令

* (所有时刻) ,(分隔时段) -(时段内) /n(每隔n分钟)

nohup 命令 &(这个是后台) 脱机或注销后后台工作还能继续执行的

fg number 后台拿到前台 | bg number 工作在后台下的状态变成运行中

--------------------------exec-----------------------------------------

w

第一行 current_time up_time user_use

第二行 各项说明

第三行及其后面,说明了每个用户的情况

ps

aux 查看系统所有的进程数据

-lA 查看所有系统的数据

axjf 部分进程树状态

top

-d 2 每两秒钟更新一次top

-b -n 2 > /tmp/top.txt top的信息进行2次,然后结果输出到 /tmp/top.txt中

-d 2 -p 13639 查看指定进程数据

pstree

-A 进程相关性

-Aup 同时显示PID与users

kill

kill -SIGHUP $(grep ’syslog’| grep -v ‘grep’ | awk ‘{print $2}' )

killall -9 httpd

nice

nice -n -5 vi & 执行vi 的优先级是-5

renice 10 18625 给18625这个进程的优先级是10

free

-m 目前系统内存的容量

uname

-a 系统内核的信息

uptime top 的第一行

netstat

-tlnp 系统上已箭筒的网络连接及其PID

dmesg

|more 内核开机的信息

|grep -i hd 开机时硬盘信息

iostat
-c cpu
-d 存储设备
-k KB
-m MB
-t 日期
间隔秒数
检测次数

lsof
-a 不同条件同时成立
-U socket文件
-u username
+d 目录

vmstat

vmstat 1 3 统计目前诸暨cpu状态 每秒1次,共计3次

vmstat -d 硬盘读写状态

killall -9 httpd 强制删除httpd服务

ulimit
-a 查看限制额度
-H 严格限制
-S 警告设置
-c 最大内核文件
-f 文件大小
-d 最大内存
-l 锁定内存
-t 最大CPU时间
-u 最大进程数

logrotate -vf verbose force

(ogrotate..conf
weekly 每周一次
rotate 4 默认保留4个
create 新建一个来存储
compress 启用压缩
size按照大小来切分
prerotate 之前做的事情
postrotate之后做的事情

--sys : echo date history chkconfig timeconfig read exec readonly shutdown | login|logout reboot wait sleep exit

shutdown -h time|+number|now

date %Y %m %d %H %i %s

chkconfig

- - level 0-6 服务名称 on|off

- - add|del 文件名(/etc/init.d/文件名)

echo :name=Vbird ==> echo $name ==> Vbird

history

-w 写入

-c 清除

n 最近n条命令

!!66 执行第66条命令 !!执行上一条命令 !al执行最近al开头的命令

read -p “please keying your number “ -t 30 named

磁盘指令:du df cd (dirs) pwd stat mount umount fdisk alias

cd ./ ../ ~ -(刚才的目录)

df

-h GB MB KB存储

-i inode数量来显示

du

-s 总量

-S 每个子目录的量

-h GB MB KB存储

pwd

-P 区分链接

mount (mount A B 把A挂载到B)

-l 查看挂载信息

-t 挂载指定类型

-o 指定对应参数

umount

stat filename 显示文件时间

Access: 2015-07-30 20:04:30.000000000 +0800

Modify: 2015-07-30 20:04:53.000000000 +0800

Change: 2015-07-30 20:04:53.000000000 +0800

Birth: 2014-09-06 14:23:52.000000000 +0800

fdisk

d delete

n add

p print

q quit

w execute

alias lm = ‘ls -l | more'

3.网络管理指令:

网络通信:telnet httpd ifconfig netstat ping apachectl

telnet -l userame ip

ifconfig eth0:80 192.168.1.1

httpd

-l 显示apache模块

-t 检查语法

-S 输出虚拟主机列表

netstat -a 显示系统中网络连接的状态

ping -c 3 www.sina.com ping3次sina

apachectl configtest 测试配置语法

网络应用:wget iptables ip yum (mail) mysqldump mysqlimport|loaddata|source mysqladmin mysqlshow mysql

wget -r -l 3 www.sina.com 下载3层网页

iptables -L -t nat 浏览 | iptables -save -t filter>iptables.bak 导出 | iptables -restore< iptables.bak 导入

ip link list 显示网络运行的信息

yum:
list info search provides whatprovides
install update
remove

其他: make php perl git apachectl

shell:

#! expr bc if-then-else elif else if if-then case case esac

for while test util continue break shift

$# $* $@ getopt getopts read

stdin stdout stderr lsof /dev/null mktemp tee

trap & nohup nice renice cron

echo local return

vim sed gawk

mysql curl disk user bak sys trace

test (Page 380)

文件类型

文件权限

文件比较

整数判断

字符串数据

多重判定

bc + - * % / ^ | scale=3 小数点取3位 1、3 ==>.333

pipe:
选取--cut grep

cut
-d ‘分隔字符’ -f fields
-c 字符范围

排序--sort wc uniq

wc
-l 行
-w 字
-m 字符

uniq
-i 忽略大小写字符的不同
-c 进行计数

双向重定向--tee

字符转换命令--tr col join paste expand

tr
-d 删掉字符
-s 替换字符

col
-x tab键转换成对等的空格键
-b 文字内有反斜杠,仅保留反斜杠后的那个字符

join

-t 通过分隔符连结的
-i 忽略大小写
-1 第一个文件哪个字段
-2 第二个文件哪个字段

paste -d file1 file2

expand -t file //tab键连结

切割--split

split
-b 大小分隔
-l 行数分隔

参数代换—xargs : cut -d ‘:’ -f1 /etc/passwd | xargs -p -e ‘lp’ finger

-0 特殊字符还原成一般字符
-e 遇见某个字符停止
-p 询问用户
-n 次数,使用几个参数

减号--
-
tar -cvf -/home | tar -xvf -(这个减号是取前面的输出作为输入)

管道:cut join exec redirect +preg

//redirect : cat + > < >> 2>/dev/null tee

cat test.sh test1.sh 2>/dev/null | grep -n 'echo'

ls test.sh test1.sh testsh.sh 2>err.txt | grep 'test'

grep -n 'echo' <test.sh

cat test.sh>test.txt

cat termcap* >> termcapback

cat test.sh|tee -a test.txt &>/dev/null <==> /dev/null 2>&1 正确和错误的信息全部丢弃

ls -l / | tee -a ~/homefile | more

//execute : cat + sh mail tar rpm iconv xargs

cat testpipe.txt | sh testpipe.sh

cat test.sh|mail -s 'test' 8292669@qq.com

tar -cvf -packname filename| tar -xvf -(这个减号是取前面的输出作为输入)

rpm -qa|grep licq

iconv -f gb18030 -t utf-8 new-aa.txt

cut -d':' -f1 /etc/passwd | xargs -p -n 5 -e'lp' finger

find /sbin -perm +7000 | xargs ls -l

//join: join paste col more expand head tr

last | tr '[a-z]' '[A-Z]'

cat /etc/passwd | tr -d ':' > /root/passwd.linux

man col | col -b > /root/col.man

cat /etc/man.config | col -x | cat -A | more

paste /etc/passwd /etc/shadow

cat /etc/group|paste /etc/passwd /etc/shadow -|head -n 3

join -t ':' -1 4 /etc/passwd -2 3 /etc/group

grep '^MANPATH' /etc/man.config | head -n 3 | \

>expand -t 6 - | cat -A

//cut:echo +cut split awk sort grep wc touch less

wc -l lsroot*

last | grep [a-zA-Z] | grep -v 'wtmp' | wc -l

grep --color=auto 'MANPATH' /etc/man.config

 touch `date +%Y%m%d%k%M%S`.txt

ls -al /etc | less

echo $PATH | cut -d ':' -f 3,5 //3- 3.5 3-5

export | cut -c 12-

cat /etc/passwd | sort -t ':' -k 3 -n

echo $PATH | cut -d ':' -f1 | sort | uniq -c

split -b 300k /etc/termcap termcap

split -l 10 /etc/termcap termcap

cat /etc/passwd | awk -F ':' '{print $1"\t"$2}'

kill -9 `ps -ef | grep smbd | tr -s ' ' | awk -F' ' '{print $2}'`

//preg

(sed -n '1,$p'|grep -n 'echo')<test.sh #这个脚本比较有意思了。由于前面是管道,后面需要把test.sh内容重定向到 sed ,然后sed输出通过管道,输入给grep.需要将前面用"()"运算符括起来。在单括号内的命令,可以把它们看作一个象一个命令样。如果不加括号test.sh就是grep 的输入了。

#上面一个等同于这个

sed -n '1,$p'<test.sh | grep -n 'echo'

sed -n '1,10p'<test.sh | grep -n 'echo' <testsh.sh#哈哈,这个grep又接受管道输入,又有testsh.sh输入,那是不是2个都接收呢。刚才说了"<"运算符会优先,管道还没有发送数据前,grep绑定了testsh.sh输入,这样sed命令输出就被抛弃了。这里一定要小心使用

cat filename |grep -v '^[0-9]*$' | sed 's/|/ /g' |sort -nrk 8 -nrk 9 |tail -n +1 |head -n 10

导出:Mysqldump

1)全量 mysqldump -A -B

mysqldump -B (会创建库表结构) database1 database2 | 不加 -B,就是库名 表1 表2

备份所有库 -A

刷新binlog参数 -F

备份表结构 -d

锁表 -x

只备份数据 -t

只读锁表 -l

2)增量binlog

//binlog转成sql

mysqlbinlog -d database mysql-bin.000014>bin.sql

//备份

mysqldump -uroot -proot —master-data=2 —events -single-transaction database gzip>/opt/all.sql.gz

—master-data 增加binlog 日志文件名及对应的位置点,

如果是2,就注释掉了changemasterto

如果是1,就包含了changemasterto,找到了结合

-single-transaction 备份事务数据库

导入:mysqlimport loaddata source (/path/file.sql)

mysqlimport

mysqlimport Meet_A_Geek Customers.txt

注意:这里Customers.txt是我们要导入数据的文本文件,而Meet_A_Geek是我们要操作的数据库,数据库中的表名是Customers,这里文本文件的数据格式必须与Customers表中的记录格式一致,否则mysqlimport命令将会出错。

其中表的名字是导入文件的第一个句号(.)前面文件字符串,

例子:导入一个以逗号为分隔符的文件文件中行的记录格式是这样的:

"1", "ORD89876", "1 Dozen Roses", "19991226"

我们的任务是要把这个文件里面的数据导入到数据库Meet_A_Geek中的表格Orders中,我们使用这个命令:

bin/mysqlimport –prl –fields-enclosed-by=" –fields-terminated-by=, Meet_A_Geek Orders.txt

-prl的意思是-password replace lock

-d or --delete 新数据导入数据表中之前删除数据数据表中的所有信息

-f or --force 不管是否遇到错误,mysqlimport将强制继续插入数据

-i or --ignore mysqlimport跳过或者忽略那些有相同唯一关键字的行, 导入文件中的数据将被忽略。

-l or -lock-tables 数据被插入之前锁住表,这样就防止了,你在更新数据库时,用户的查询和更新受到影响。

-r or -replace 这个选项与-i选项的作用相反;此选项将替代表中有相同唯一关键字的记录。

--fields-enclosed- by= char 指定文本文件中数据的记录时以什么括起的, 很多情况下数据以双引号括起。 默认的情况下数据是没有被字符括起的。

--fields-terminated- by=char 指定各个数据的值之间的分隔符,在句号分隔的文件中,分隔符是句号。您可以用此选项指定数据之间的分隔符。默认的分隔符是跳格符(Tab)

--lines-terminated- by=str 此选项指定文本文件中行与行之间数据的分隔字符串或者字符。 默认的情况下mysqlimport以newline为行分隔符。您可以选择用一个字符串来替代一个单个的字符:一个新行或者一个回车。

mysqlimport命令常用的选项还有-v 显示版本(version), -p 提示输入密码(password)等。

LOADDATA

LOAD DATA INFILE "/home/mark/data.sql" INTO TABLE Orders;//读取文件

LOAD DATA INFILE "/home/Order.txt" INTO TABLE Orders(Order_Number, Order_Date, Customer_ID); //选取字段

LOAD DATA LOCAL INFILE "C:\MyDocs\SQL.txt" INTO TABLE Orders; //读取本地

LOAD DATA LOW_PRIORITY INFILE "/home/mark/data.sql" INTO TABLE Orders;//没有其他用户读取后 写入

LOAD DATA LOW_PRIORITY INFILE "/home/mark/data.sql" REPLACE INTO TABLE Orders; //替换

LOAD DATA INFILE "/home/mark/Orders.txt" REPLACE INTO TABLE Orders FIELDS TERMINATED BY ','

ENCLOSED BY '"';

和 Load Data InFile 相反的是 把表的数据导出

Select * From `TableTest` Into OutFile 'C:/Data_OutFile.txt';

+mysqladmin

create databasename 创建一个新数据库

drop databasename 删除一个数据库及其所有表

extended-status 给出服务器的一个扩展状态消息

flush-hosts 洗掉所有缓存的主机

flush-logs 洗掉所有日志

flush-tables 洗掉所有表

flush-privileges 再次装载授权表(同reload)

kill id,id,... 杀死mysql线程

password 新口令,将老口令改为新口令

ping 检查mysqld是否活着

processlist 显示服务其中活跃线程列表

reload 重载授权表

refresh 洗掉所有表并关闭和打开日志文件

shutdown 关掉服务器

status 给出服务器的简短状态消息

variables 打印出可用变量

version 得到服务器的版本信息

+mysqlshow

1. show tables或show tables from database_name; -- 显示当前数据库中所有表的名称。

2. show databases; -- 显示mysql中所有数据库的名称。

3. show columns from table_name from database_name; 或show columns from database_name.table_name; -- 显示表中列名称。

4. show grants for user_name; -- 显示一个用户的权限,显示结果类似于grant 命令。

5. show index from table_name; -- 显示表的索引。

6. show status; -- 显示一些系统特定资源的信息,例如,正在运行的线程数量。

7. show variables; -- 显示系统变量的名称和值。

8. show processlist; -- 显示系统中正在运行的所有进程,也就是当前正在执行的查询。大多数用户可以查看他们自己的进程,但是如果他们拥有process权限,就可以查看所有人的进程,包括密码。

9. show table status; -- 显示当前使用或者指定的database中的每个表的信息。信息包括表类型和表的最新更新时间。

10. show privileges; -- 显示服务器所支持的不同权限。

11. show create database database_name; -- 显示create database 语句是否能够创建指定的数据库。

12. show create table table_name; -- 显示create database 语句是否能够创建指定的数据库。

13. show engines; -- 显示安装以后可用的存储引擎和默认引擎。

14. show innodb status; -- 显示innoDB存储引擎的状态。

15. show logs; -- 显示BDB存储引擎的日志。

16. show warnings; -- 显示最后一个执行的语句所产生的错误、警告和通知。

17. show errors; -- 只显示最后一个执行语句所产生的错误。

18. show [storage] engines; --显示安装后的可用存储引擎和默认引擎。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: