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

Shell 常用命令

2015-11-25 12:46 507 查看

1. shell 获取当前脚本的路径

#!/bin/bash
#获取当前执行文件路径
filepath=$(cd "$(dirname "$0")"; pwd)
echo "filepath== "$filepath
#获取当前执行文件的父路径
parentpath=$(dirname $filepath)
echo "parentpath== "$parentpath


执行此文件结果:
bbs-MacBook-Pro-10:myedu pazhang$ ./test.sh
filepath== /Users/pazhang/project/workspace/myedu
parentpath== /Users/pazhang/project/workspace


2. shell 读文件

方式一:重定向方式

while read LINE
do
echo $LINE
done < /adms/config/database.yaml

方式二:管道方式

cat /adms/config/database.yaml |while read LINE
do
echo $LINE
done


注:这两种方式读文件都没有问题,但是如果你想保留读出的信息,或者想要通过读文件提取有用信息到变量中,那么只能使用第一种方式,第二种方式职能在读文件的过程中有效,读文件文件结束,你所保存在变量的值也就不复存在了。

3. shell 去掉字符串前后空格

var=" abc "
var="${var#"${var%%[![:space:]]*}"}"
var="${var%"${var##*[![:space:]]}"}"
echo "-"$var"-"



运行结果为:

-abc-
前后空格被去掉了

4. 创建目录

mkdir zhang
mkdir -p liu/liu


第一种方式是创建一个目录,第二种方式是递归创建目录,即可以创建嵌套的目录,此时需要-p参数。

5. 删除文件或目录

rm  file
rm -rf dir


第一种方式就是删除一个文件,第二种方式是强制删除一个目录
-r: 表示删除目录

-f: 表示强制删除

6. 拷贝文件或目录

cp file dir/
cp -r dir1 dir/


第一条是拷贝文件到dir目录,第二条是拷贝dir1目录到dir目录,注意最后的斜线,不能省

cp file dir/file1
这条命令表示把file拷贝到dir目录,并且名称改为file1

-r: 复制目录

-p: 连带文件属性复制

-d: 若原文件是链接文件,则复制链接属性

-a: 相当于 -pdr

7. 剪切文件或目录

mv file dir/
mv dir1 dir/
mv file1 file
第一条表示剪切file到dir目录下

第二条表示剪切目录dir1到dir目录下

第三条表示把file1重命名为file

:mv命令不区分文件和文件夹,因此没有-r 参数

8. 查看目录

ls
ls -l
ll
ll -h
ll -a


ls会把当前目录下的所有目录和文件列出来,不包含隐藏文件

ls -l 会把当前目录的所有文件和目录列出来,并且包含属性信息,不包含隐藏文件

ll 就是 ls -l

ll -h 会和 ls -l 一样,但是会把属性显示成人性化的方式,比如文件大小,会显示成x.k x.m 等,带单位的信息。

-a: 会列出所有文件,包括隐藏文件

9. 查看系统内核版本

cat /proc/version


查看当前系统版本,非内核版本可用如下命令

lsb_release -a


10. 查找文件

locate file


locate是在后台数据库中按文件名搜索,搜索速度更快
数据库的位置:/var/lib/mlocate

但是数据库不是实时更新的,更新周期为一天,你今天创建的文件是搜索不到的,怎么办呢?

有办法,执行如下命令:

sudo updatedb


就会更新locate后台数据库,然后就可以搜到了。

优点:速度快

缺点:只能按照文件名搜索

注意:locate会读取一个配置文件/etc/updatedb.conf,内容如下:

PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media /home/.ecryptfs"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre_lite tmpfs usbfs udf fuse.glusterfs fuse.sshfs curlftpfs ecryptfs fusesmb devtmpfs"


如果第一行的值为yes,表示下面的过滤条件全部生效,第三行表示过滤一些目录,如果你在这些目录下新建了文件,那么你是搜索不到的。

PRUNE_BIND_MOUNTS:开启搜索限制

PRUNENAMES:搜索时,不搜索的文件类型

PRUNEPATHS:搜索时,不搜索的文件路径

PRUNEFS:搜索时,不搜索的文件系统

whereis filename


搜索命令所在的目录及帮助文档所在的位置
-b: 只查找可执行文件

-m: 只查找帮助文件

which filename


搜索命令所在的目录和别名

find [搜索范围][搜索条件]

例如:

find / -name pazhang.txt
在跟目录下搜索名称为pazhang.txt的文件

避免大范围搜索,会非常耗费系统资源

find是在系统中搜索符合条件的文件名。如果需要匹配,使用通配符匹配,通配符是完全匹配。

通配符:

*: 匹配任意内容

?: 匹配任意一个字符

[]: 匹配任意一个括号内的字符 

find /root -iname pazhang.txt
#不区分大小写

find /root -user root
#按照所有者搜索

find /root -nouser
#查找没有所有者的文件

find /var/log -mtime +10

查找10天前修改的文件

-10: 10天内修改的文件

10: 10天当天修改的文件

+10: 10天前修改的文件

atime: 文件访问时间

ctime: 修改文件属性的时间

mtime: 修改文件内容的时间

find /var/log -size +10k


查找文件大于10k的文件

后边的参数于时间类似

find /var/log -size +10M


注意:使用M时用大写M,使用k时用小写k,也不要省去单位

find /var/log -inum 111111


根据I节点查询文件

find /var -size +20k -a -size -50k


查找大于20k小于50k的文件

-a: and,逻辑与,两个条件都满足才行

-o: or,逻辑或,两个条件满足一个即可

find /var -size +20k -a -size -50k -exec ls -lh {} \;
-exec 用于执行第二条命令

固定格式:-exec 空格 命令 空格 {}空格\;

grep -v "xxx" error.log


在文件中匹配符合条件的字符串

-i: 忽略大小写

-v: 取反,排除制定的字符串

find命令:在系统中搜索符合条件的文件名,如果需要匹配使用通配符匹配,通配符是完全匹配。

grep命令:在文件中搜索符合条件的字符串,如果需要匹配使用正则表达式进行匹配,正则表达式匹配是包含匹配。

11. 帮助命令

man 命令


查看命令的帮助文档,man只能用于查看Linux外部命令,比如ls,不能查看内部命令,比如cd

help 命令


help命令也是用于查看命令帮助文档,但是只能用于查看Linux内部命令,而不能查看外部命令,和man刚好相反。

注:那么如何判断命令是内部命令还是外部命令呢?请使用:whereis 命令,如果返回可执行文件的目录,表示是外部命令,否则是内部命令。

info 命令


进入帮助文档之后,可以做如下操作:

回车:在带有*号标记的行按回车,进入子帮助页面

u: 进入上层页面

n: 进入下一个帮助小节

p: 进入上一个帮助小节

q: 退出

当然,还有一个最常用的方式--help,例如:

ls --help


查看ls的帮助文档,简洁版的。

12. 压缩和解压缩命令

.zip格式

zip 压缩文件名 源文件
压缩文件

zip -r 压缩文件名 源目录
压缩目录

unzip 压缩文件名
解压缩文件

.gz格式

gzip 源文件
压缩为.gz格式的压缩文件,压缩后,源文件会消失

gzip -c 源文件 > 压缩文件
这个命令可以保留源文件,其实就是把压缩的内容写入到压缩文件中

gzip -r 目录
压缩目录下所有的子文件,自命令不会把文件打包,而是逐个压缩,目录不会被压缩

gzip -d 压缩文件
解压缩文件,压缩文件不会保留,会被删除

gunzip 压缩文件
解压缩文件

gunzip -r 压缩文件目录
可以解压目录下的所有压缩文件

.bz2格式

bzip2 源文件
压缩为.bz2格式,不保留源文件

bzip2 -k 源文件
压缩后保留源文件

注:bzip2命令不能压缩目录

bzip2 -d 压缩文件
解压缩文件,不保留压缩文件,使用-k可以保留

bunzip2 压缩文件
不保留压缩文件,使用-k可以保留

tar -cvf 打包文件名 源文件
tar -cvf test.tar test

可以打成tar包

选项:

-c: 打包

-v: 显示过程

-f: 指定打包后的文件名

tar -xvf tar文件
解压tar包

-x: 解压

.tar.gz格式

tar -zcvf 压缩包名.tar.gz 源文件
压缩

-z: 压缩为.tag.gz格式

tar -zxvf 压缩包名.tar.gz
解压缩.tag.gz文件

.tar.bz2格式

tar -jcvf 压缩包名.tar.gz 源文件
压缩

-j: 压缩为.tar.bz2格式

tar -jxvf 压缩包名.tar.gz
解压缩.tar.bz2文件

tar -zxvf xxx.tar.gz -C /tmp
tar -jxvf xxx.tar.bz2 -C /tmp


-C: 指定解压位置,注意是大写C

那么问题来了,怎么压缩到指定位置,其实很简单,例如:

tar -zcvf /tmp/xxx.tar.gz 源文件
就被压缩到指定目录下了

tar -zcvf /tmp/xxx.tar.gz 源文件1 源文件2
压缩多个文件

tar -ztvf xxx.tar.gz
只查看,不解压

-t: 只查看,不解压

13. shutdown命令

shutdown [选项] 时间
shutdown -r 08:00 & //&符号表示后台任务,不影响终端使用
shutdown -h now //立即关机
-c: 取消前一个命令,比如你先使用了定时关机,然后又想取消定时关机任务,就可以使用-c选项

-h: 关机

-r: 重启

halt
poweroff
init 0
这三条命令也可以关机,但是不如shutdown安全,shutdown会在关机前关闭正在运行的服务或程序,能够正确保存数据,而这三条命令却不可以,所以,建议使用shutdown命令

reboot
init 6
重启命令

系统运行级别:

0: 关机

1: 单用户

2: 不完全多用户,不含NFS服务

3: 完全多用户

4: 未分配

5: 图形界面

6: 重启

logout

退出登录

14. 挂载命令

mount


查询系统中已经挂载的设备

mount -a
根据配置文件/etc/fstab的内容,自动挂载

mount [-t 文件系统] [-o 特殊选项] 设备文件名 挂载点


选项:

-t 文件系统:加入文件系统类型来指定挂载的类型,可以ext3、ext4、iso9660等文件系统

-o 特殊选项:可以指定挂载的额外选项

mount -o remount,noexec /home/
重新挂载为不可执行,之后再执行可执行文件时,就会报权限不足

参数说明
atime/noatime更新访问时间/不更新访问时间,访问分区文件时,是否更新文件的访问时间,默认为更新
async/sync异步/同步,默认为异步
auto/noauto自动/手动,mount -a命令执行时,是否会自动安装/etc/fstab文件内容挂载,默认为自动
defaults定义默认值,相当于rw,suid,dev,exec,auto,nouser,async这七个选项
exec/noexec执行/不执行,设定是否允许在文件系统中执行可执行文件,默认是exec允许
remount重新挂载已经挂载的文件系统,一般用于指定修改特殊权限
ew/ro读写/只读。文件系统挂载时,是否具有读写权限,默认是rw
suid/nosuid具有/不具有SUID权限,设定文件系统是否具有SUID和SGID的权限,默认是具有
user/nouser允许/不允许普通用户挂载,设定文件系统是否允许普通用户挂载,默认是不允许,只有root可以挂载分区
usrquota写入代表文件系统支持用户磁盘配额,默认不支持
grpquota写入代表文件系统支持组磁盘配额,默认不支持
挂载光盘命令

mkdir /mnt/cdrom
建立挂载点

mount -t iso9660 /dev/sr0 /mnt/cdrom
挂载光盘

也可以使用如下命令:

mount -t iso9660 /dev/cdrom /mnt/cdrom
因为/dev/cdrom 是 /dev/sr0 的一个软连接,但是建议使用第一种方式

另外-t 参数也可以省略,因为默认的文件系统为iso9660

卸载光盘命令

umount /mnt/cdrom
卸载光盘

卸载命令不可省略,挂载使用完之后,一定要卸载

挂载U盘命令

fdisk -l
查看系统中识别的硬盘

因为U盘的名称不固定,所以要先查询一下

mount -t vfat /dev/sdb1 /mnt/usb/
挂载U盘

vfat:指定U盘的文件系统是fat32

注意:Linux默认不支持NTFS文件系统的

15. 查看登录用户信息

w 用户名
命令输出:

USER:登录的用户名

TTY:登录终端

FROM:从哪个IP登录

LOGIN@:登录时间

IDLE:用户闲置时间

JCPU:指的是和终端连接的所有进程占用的时间。这个时间里并不包括过去的后台作业时间,但却包括当前正在运行的后台作业所占用的时间

PCPU:是指当前进程所占用的时间

WHAT:当前正在运行的命令

who 用户名


命令输出:

-用户名

-登录终端

-登录时间(登录来源IP地址)

查询当前登录和过去登录的用户信息

last
last命令默认是读取/var/log/wtmp文件数据

命令输出:

-用户名

-登录终端

-登录IP

-登录时间

-退出时间(在线时间)

查询所有用户的最后一次登录时间

lastlog
lastlog命令默认是读取/var/log/lastlog文件数据

命令输出:

-用户名

-登录终端

-登录IP

-最后一次登录时间

16. echo

echo -e "\e[1;31m hello \e[0m"
输出颜色

30m = 黑色,31m = 红色, 32m = 绿色, 33m = 黄色

34m = 蓝色,35吗= 洋红, 36m = 青色, 37m = 白色

17. alias别名

alias
查看系统中所有命令别名

alias 别名='原命令'
设定别名

vim ~/.bashrc
写入环境变量配置文件

把新的别名加入到文件之后,执行如下命令:

source .bashrc
新的别名就会生效

unalias 别名
删除别名

注:命令生效顺序

1. 执行绝对路径或相对路径的执行命令

2. 执行别名

3. 执行bash的内部命令

4. 按照$path环境变量定义的目录查找顺序找到的第一个命令

18. 常用快捷键

ctrl + c: 强制终止当前命令

ctrl + l: 清屏

ctrl + a: 光标移动到命令行首

ctrl + e: 光标移动到命令行尾

ctrl + u: 从光标所在位置删除到行首

ctrl + z: 把命令放入后台

ctrl + r: 在历史命令中搜索

19. history历史命令

history [选项] [历史命令保存文件]
选项:

-c: 清空历史命令

-w: 把缓存中的历史命令写入历史命令保存文件~/.bash_history

历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改

HISTSIZE=1000 改成 HISTSIZE=10000

使用上、下箭头调用以前的历史命令

使用 ”!n“ 重复执行第n条历史命令

使用 “!!” 重复执行上一条命令

使用 “!字符串” 重复执行最后一条以该字符串开头的命令



20. 输出重定向

1.标准输入输出

设备设备文件名文件描述符类型
键盘/dev/stdin0标准输入
显示器/dev/stdout1标准输出
显示器/dev/stderr2标准错误输出
2.输出重定向





21. 管道符

1.多命令顺序执行



2.管道符

命令格式:

命令1 | 命令2

#命令1的正确输出作为命令2的操作对象

例如:

apt-cache mongodb | grep mongodb
查询mongodb安装包的时候把包含mongodb字符串的过滤出来

22. 通配符



Bash中的一些特殊符号:



23. VIM 编辑器使用

vim fileName //打开或创建文件
vim + fileName //打开文件,并且光标定位在最后一行
vim +3 fileName //打开文件,光标定位到第三行
vim +10000 fileName //如果你的文件没有10000行,那么作用和只是用“+” 一样,定位到最后一行
vim +/darren fineName //把光标定位到第一次出现darren字符串的位置,按n可以切换到下一次出现的行

vim fileName1 fileName2 fileName3 //会首先打开fileName1,这时可以输入“:n” 回车,切换到fileName2,依次类推,如果想回到fileName1,
输入“:N” 或 “:prev”按回车,回到上一个

注:第一个命令中的“n”可以循环转圈,第二个“n”不可以


底行模式常用指令

:w 保存到硬盘

:q 退出,不保存

:! 强制的意思一般和q一起使用:q!,表示强制退出

:ls 打开多个文件时,列出打开的所以文件

:n 打开多个文件是,切换到下一个打开的文件

:15 定位到第15行

/xxx 从光标位置向后搜索

?xxx 从光标位置开始,向前搜索

命令模式常用指令

h 光标左移

j 光标下移

k 光标上移

l 光标右移

ctrl + f 向下翻页(front)

ctrl + b 向上翻页(back)

ctrl + d 向下翻半页(down)

ctrl + u 向上翻半页(up)

dd 删除光标所在的行

o 在光标所在的行的下方插入一行,并切换到输入模式

yy 复制光标所在的行

p 在光标所在的行的下方粘贴

P 在光标所在的行的上方粘贴



24. Terminal 的光标快捷键

光标移动到行首       ctrl + a
光标移动到行末       ctrl + e
单词移动          alt + →(方向键)  (测试仅Mac可用)
从当前光标删除到行首    ctrl + u
从当前光标删除到末尾    ctrl + k
粘贴刚才删除的内容         ctrl + y
清除屏幕          ctrl + l
查找之前使用命令      ctrl + r



25. tail 

tail filename 默认查看最后10行
tail -n 10 filename 查看最后10行
tail -n +10 filename 查看第10行到最后一行
tail -q -n 10 file1 file2 file3 显示最后10行,并且不显示文件名的文件头。
tail -f filename 动态输出查询文件的内容

26. head

head filename 默认查看开始10行
head -n 10 filename 查看开始10行
head -n -10 filename 查看除最后10行外剩余的内容
head -q -n 10 file1 file2 file3 显示开始10行,并且不显示文件名的文件头。

27. 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: