shell 命令总结

来源:互联网 发布:win10电脑没有网络 编辑:程序博客网 时间:2024/05/21 06:35

【Shell环境中的预定义变量】

$$     Shell本身的PID(ProcessID)
$!      Shell最后运行的后台Process的PID
$?     最后运行的命令的结束代码(返回值)
$-     使用Set命令设定的Flag一览
$*     所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@   所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$#    添加到Shell的参数个数
$0    Shell本身的文件名

$1~$n     添加到Shell的各参数值。$1是第1参数、$2是第2参数…。


【bash shell内置命令】

type -a :

file:表示外部命令

alias:命令别名所设置的名称

buildin:内部命令

注:命令的执行可以使用:绝对路径和相对路径(./)两种方式。


【用户管理】

#chown 用户名  文件名  :修改文件所有者

#chgrp  user  文件名 :修改文件所属组 


【目录与文件】

mkdir:创建目录     mkdir ~/sbin

           -m 设置用户权限
           -p 如果路径中某些目录不存在,系统会自动创建

touch:创建文件     touch test.c

file:查看文件类型

ln:用于文件链接

ln -sf :符号链接。链接文件和源文件使用不同的inode号

ln -f :硬链接。链接文件和源文件使用同一个inode号

注:

linux下各种目录总结:

~/ :当前用户的主目录

./  :当前目录

../ :上一层目录

文件名前加“.”,表示该文件是隐藏文件

cp:-r  递归扫描文件

       -f  强制复制

mv:-f:强制删除文件或目录;
        -i:删除已有文件或目录之前先询问用户;
        -r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
        -v:显示指令的详细执行过程。

【文件内容查看】

cat:从第一行开始查看 

tac:从最后一行开始查看

nl:查看时,显示出行号  nl test.c

more:一页一页显示,不能向前查看  more test.c  空格键向后翻页

less:和more类似,但可以向前查看   less test.c    空格键向后翻页

head:查看前几行  head -n 20 test.c

tail:查看后几行   tail -n 20 test.c

      tail -n +K是输出从第K行开始的内容

      cat file1 | tail -n +300 | head -n 200  查看file1文件的第300-500行的内容,也可以表示为  

      cat file1| head -n 500 | tail -n + 300

【系统】
# uname -a # 查看内核/操作系统/CPU信息
# head -n 1 /etc/issue # 查看操作系统版本
# cat /proc/cpuinfo # 查看CPU信息
# hostname # 查看计算机名
# lspci -tv # 列出所有PCI设备
# lsusb -tv # 列出所有USB设备
# lsmod # 列出加载的内核模块
# env # 查看环境变量

#dmesg:分析内核,以及其他硬件

#vmstat:检测cpu,内存,硬盘的状态


【资源】
# free -m # 查看内存使用量和交换区使用量
# df -h # 查看各分区使用情况
# du -sh <目录名> # 查看指定目录的大小
# grep MemTotal /proc/meminfo # 查看内存总量
# grep MemFree /proc/meminfo # 查看空闲内存量
# uptime # 查看系统运行时间、用户数、负载
# cat /proc/loadavg # 查看系统负载


【磁盘和分区】
# mount | column -t # 查看挂接的分区状态
# fdisk -l # 查看所有分区
# swapon -s # 查看所有交换分区
# hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
# dmesg | grep IDE # 查看启动时IDE设备检测状况


【网络】
# ifconfig # 查看所有网络接口的属性
# iptables -L # 查看防火墙设置
# route -n # 查看路由表
# netstat -lntp # 查看所有监听端口
# netstat -antp # 查看所有已经建立的连接
# netstat -s # 查看网络统计信息

#route #命令用来显示目前本机路由表的内容,并且还可以针对路由表中的记录来进行相应的添加、删除或修改等操作

#traceroute  #linux下侦测主机到目的主机之前所经过的路由的命令

                    traceroute www.baidu.com


【进程】
# ps -ef # 查看所有进程 

ps -l:查看当前用户下的进程

ps aux:查看所有进程

# top # 实时显示进程状态

【用户】
# w # 查看活动用户
# id <用户名> # 查看指定用户信息
# last # 查看用户登录日志
# cut -d: -f1 /etc/passwd # 查看系统所有用户
# cut -d: -f1 /etc/group # 查看系统所有组
# crontab -l # 查看当前用户的计划任务


【服务】
# chkconfig --list # 列出所有系统服务
# chkconfig --list | grep on # 列出所有启动的系统服务


【bash作业管理】

#&:在命令后添加一个&,如firefox &:后台执行
#jobs : 查看当前有多少在后台运行的命令
#Ctrl+z:或者发送信号17 : 用于将当前正在运行的前台进程暂停,变成后台进程

#ctrl+c:前台进程的终止。kill -9
#sleep :sleep 5表示延迟5s
#fg :将后台中的命令调至前台继续运行,如fg 1 ,1是编号
#bg :将后台暂停的进程继续运行,如bg 1,1是编号



【账户管理】

usermod -l 修改账号名称,使用格式:usermod -l new_name old_name


【查找】

1、正则表达式的基础

^ 行首标识

$ 篇尾标识或行尾标识

. 代表任意一个字符

? 代表前趋字符的一次出现

* 代表0个或多个前趋字符出现

[1-9] 代表一个属于1-9的字符

[^1-9] 代表一个不包含于1-9的字符

/< 词首标识

/> 词尾标识

/( /) 引用标识,可以多次引用,并在后面以/1 /2来引用

x/{m,n/} 代表x的至少m次,至多n次出现

      正则扩展

| 用于使用多个正则条件,匹配之一即可

+ 与. *类似,表示1个或多个重复字符

() 用于将多个内容组成单元组


简单的说:
find :搜索磁盘中的文件名,并将结果以路径的形式输出在标准输出上;
grep: 搜索出现关键字的文件,并将匹配的行显示在标准输出上。


2 grep

通用格式 grep [option] regx file

功能:grep命令用于在指定文件中查找与模式匹配的行,并将匹配的行显示在标准输出上。

    选项

-E 使用正则扩展

-e pattern 使用pattern中的正则

-f file 使用文件中的正则

-i 忽略大小写(性能较差,最好先用tr统一转换成大写或小写)

-v 反向显示不匹配的行

-V 显示版本号

输出控制选项:

-n 输出行号

-q 不显示未匹配的内容

-r 递归方式扫描文件

-l 只输出匹配的文件名

-L 只输出不匹配的文件名

-c 只显示匹配的个数


常用示例:

grep -i 'root' /etc/passwd 不区分大小写显示文件中有root的行

grep -v '^root' /etc/passwd 显示文件中开关不是root和行

grep -n 'root' /etc/passwd 显示文件中含有root的行,且打印此行在文件中的行号

grep -lr '$root' /etc 递归查找/etc下包含行结尾为root的文件名

grep -Lr 'root' /etc 递归查找/etc下文件中不包含root的文件名

grep -c 'root' /etc/passwd 统计文件中root出现的行数

grep "hello | world" 1.cpp 匹配包含hello的行和world的行


2、find 命令

语法:find 搜索路径 匹配表达式

功能:该命令用于在指定路径中查找符合条件的文件,搜索路径可以是多个目录,不同目录之间以空格分隔

(1)匹配表达式1

-name filename:要查找的文件名。可以使用通配符“*”,“?”,但要用双引号将文件名引起来

例子:【root@localhost tmp】# find –name “h*” –print

翻译:在当前目录下查找以h开头的文件

例子:【root@localhost tmp】# find / –name host -print

翻译:在整个文件系统中查找名为hosts的文件

-user username:查找属于username用户的文件

例子:【root@localhost tmp】# find /home –user user1 –print

翻译:找出/home下属于用户user1的所有文件

-group groupname:查找属于groupname组的文件

-print:显示找到文件路径名

(2)匹配表达式2

-exec 命令 {}:对找到的匹配文件,执行所列出的命令,而不询问用户是否执行这些命令,参数{} 由find找到当前的文件路径名取代,命令行末尾必须有“\;”。

例子:【root@localhost tmp】# find /home –user user1 –exec cat {}\;|more

翻译:找出/home下属于用户user1的所有文件并显示其内容

例子:【root@localhost tmp】# find /home –user user1 –exec rm –r {} \;

翻译:找出/home下属于用户user1的所有文件并删除

-ok 命令 {}:与-exec的用法相同,在执行命令之前询问用户是否要执行命令

(3)匹配表达式3

-atime n:查找前n天访问过的文件(仅第n天这一天)

-atime +n:查找前n天之前访问过的文件;-n则表示前n天之后

例子:【root@localhost tmp】# find /home –atime +365 –print

翻译:找出用户一年前访问过的文件

例子:【root@localhost tmp】# find $home –user user1 –atime +3 –exec rm –r {} \;

翻译:找出用户user1主目录下属于自己的前3天之前访问过文件并删除

(4)匹配表达式4

-type filetype:指定查找的文件类型

filetype 可以是:b块文件;c字符设备文件;d目录文件;f一般文件

例子:【root@localhost tmp】# find –type d –print

翻译:查找当前目录下的所有的子目录

例子:【root@localhost tmp】# find –type f –print

翻译:查找当前目录下的所有的普通文件

(5)匹配表达式5

-size Number和-size Numberc:按照文件大小进行查找。Numberc表示以字节为单位,否则以块(一般是512字节)为单位。-Number(或-Numberc)表示查找比该值小的文件,+Number(或-Numberc)表示查找比该值大的文件

例子:【root@localhost tmp】# find –size -10 –print

翻译:查找当前目录下所有长度小于10块的文件

例子:【root@localhost tmp】# find –size -10c –print | ls –l

翻译:查找当前目录下所有长度小于10字节的文件并以长格式显示文件信息

例子:【root@localhsot tmp】# find –size +100 –size -200 –exec ls –s {} \;

翻译:在当前目录下查找100~200块长的文件并显示文件的实际块数


3、sed

      sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法
      sed命令行格式为:
                         sed [-nefri] ‘command’ 输入文本

常用选项:

-n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。

-e∶直接在指令列模式上进行 sed 的动作编辑;

-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;

-r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)

-i∶直接修改读取的档案内容,而不是由萤幕输出。


常用命令:

a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~

c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!

d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;

i ∶ 插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);

p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~

s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!


举例:(假设我们有一文件名为ab)

删除某行

[root@localhost ruby] # sed '1d' ab #删除第一行

[root@localhost ruby] # sed '$d' ab #删除最后一行

[root@localhost ruby] # sed '1,2d' ab #删除第一行到第二行

[root@localhost ruby] # sed '2,$d' ab #删除第二行到最后一行


显示某行

[root@localhost ruby] # sed -n '1p' ab #显示第一行

[root@localhost ruby] # sed -n '$p' ab #显示最后一行

[root@localhost ruby] # sed -n '1,2p' ab #显示第一行到第二行

[root@localhost ruby] # sed -n '2,$p' ab #显示第二行到最后一行


使用模式进行查询

[root@localhost ruby] # sed -n '/ruby/p' ab #查询包括关键字ruby所在所有行

[root@localhost ruby] # sed -n '/\$/p' ab #查询包括关键字$所在所有行,使用反斜线\屏蔽特殊含义


增加一行或多行字符串

[root@localhost ruby]# cat ab

Hello!

ruby is me,welcome to my blog.

end

[root@localhost ruby] # sed '1a drink tea' ab #第一行后增加字符串"drink tea"

Hello!

drink tea

ruby is me,welcome to my blog.

end

[root@localhost ruby] # sed '1,3a drink tea' ab #第一行到第三行后增加字符串"drink tea"

Hello!

drink tea

ruby is me,welcome to my blog.

drink tea

end

drink tea

[root@localhost ruby] # sed '1a drink tea\nor coffee' ab #第一行后增加多行,使用换行符\n

Hello!

drink tea

or coffee

ruby is me,welcome to my blog.

end


代替一行或多行

[root@localhost ruby] # sed '1c Hi' ab #第一行代替为Hi

Hi

ruby is me,welcome to my blog.

end

[root@localhost ruby] # sed '1,2c Hi' ab #第一行到第二行代替为Hi

Hi

end


替换一行中的某部分

  格式:sed 's/要替换的字符串/新的字符串/g' (要替换的字符串可以用正则表达式)

[root@localhost ruby] # sed -n '/ruby/p' ab | sed 's/ruby/bird/g' #替换ruby为bird

[root@localhost ruby] # sed -n '/ruby/p' ab | sed 's/ruby//g' #删除ruby


插入

[root@localhost ruby] # sed -i '$a bye' ab #在文件ab中最后一行直接输入"bye"

[root@localhost ruby]# cat ab

Hello!

ruby is me,welcome to my blog.

end

bye


删除匹配行

sed -i '/匹配字符串/d' filename (注:若匹配字符串是变量,则需要“”,而不是‘’。记得好像是)

替换匹配行中的某个字符串

sed -i '/匹配字符串/s/替换源字符串/替换目标字符串/g' filename


0 0
原创粉丝点击