0x00 快速入门
运维Linux命令大全
常用命令缩写 缩写 | 全称 | 说明 — | — | — apt | Advanced Packaging Tool | 是Debian Linux发行版中的APT软件包管理工具。一般配合apt-get或者apt-update awk | Aho Weiberger and Kernighan | Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的Family Name的首字符。一种编程语言,用于在linux/unix下对文本和数据进行处理。 bash | Bourne Again SHell | 一种shell bg | BackGround | 用于将作业放到后台运行,使前台可以执行其他任务。该命令的运行效果与在指令后面添加符号&的效果是相同的,都是将其放到系统后台执行。 cal | CALendar | 用于显示当前日历,或者指定日期的日历。 cat | CATenate | “连接”,连接文件并打印到标准输出设备上,cat经常用来显示文件的内容,类似于下的type命令。 chgrp | CHange GRouP | 用来改变文件或目录所属的用户组。 chmod | CHange MODe | 用来变更文件或目录的权限。 chown | CHange OWNer | 改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。 cd | Change Directory | 切换工作目录 cp | CoPy | 将一个或多个源文件或者目录复制到指定的目的文件或目录 dd | Data Description | 用于复制文件并对原文件的内容进行转换和格式化处理。 df | Disk Free | 用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。 du | Disk Usage | 查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的。 diff | DIFFerence | 在最简单的情况下,比较给定的两个文件的不同。 dpkg | Debian PacKaGe | Debian Linux系统用来安装、创建和管理软件包的实用工具。 ed | EDitor | 单行纯文本编辑器,它有命令模式(command mode)和输入模式(input mode)两种工作模式。 emacs | Editor MACroS | 是由GNU组织的创始人Richard Stallman开发的一个功能强大的全屏文本编辑器,它支持多种编程语言,具有很多优良的特性。(备注:vim大法好!!!) env | ENVironment | 用于显示系统中已存在的环境变量,以及在定义的环境中执行指令。 exec | EXECute | 用于调用并执行指令的命令。 fsck | File System Consistency checK, or fuck | 用于检查并且试图修复文件系统中的错误。 gawk | Gnu Aho Weiberger and Kernighan | grep | Gnu Regular Expression Print | (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 grub | GRand Unified Bootloader | 多重引导程序grub的命令行shell工具。 ifconfig | InterFace CONFIGuration | 被用于配置和显示Linux内核中网络接口的网络参数。 init | INITialization | Linux下的进程初始化工具 insmod | INStall Module | 用于将给定的模块加载到内核中。 ln | LiNk | 用来为文件创件连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接。如果要创建符号连接必须使用”-s”选项。 ls | LiSt | 显示目标列表 lsmod | LiSt Module | 用于显示已经加载到内核中的模块的状态信息。 man | MANual | Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息。一般戏称有问题找男人。。。 mkdir | MaKe DIRectory | 创建目录 mkfs | MaKe FileSystem | 用于在设备上(通常为硬盘)创建Linux文件系统。 mv | MoVe | 对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。 nano | Nano’s ANOther editor | 是一个字符终端的文本编辑器,有点像DOS下的editor程序。 parted | PARTition EDitor | 是由GNU组织开发的一款功能强大的磁盘分区和分区大小调整工具,与fdisk不同,它支持调整分区的大小。 passwd | PASSWorD | 用于设置用户的认证信息,包括用户密码、密码过期时间等。 ping | Packet InterNet Grouper | 用来测试主机之间网络的连通性。执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。 popd | POP from Directory | 删除目录栈中的记录; pushd | PUSH to Directory | 是将目录加入命令堆叠中。 ps | Processes Status | 报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。 pwd | Print Working Directory | 以绝对路径的方式显示用户当前工作目录 rcconf | Run Command CONFiguration | Debian Linux下的运行等级服务配置工具,用以设置在特定的运行等级下系统服务的启动配置。 rm | ReMove | 可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。 rmdir | ReMove DIRectory | 用来删除空目录。 rmmod | ReMove MODule | 用于从当前运行的内核中移除指定的内核模块。 rpm | RPM/Redhat Package Manager | RPM软件包的管理工具。 sed | Stream EDitor | 一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。 ssh | Secure SHell | openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器。 su | Substitute User | “替代用户”,切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。 sudo | SuperUser DO | 用来以其他身份来执行命令,预设的身份为root。 sync | SYNChronize | 用于强制被改变的内容立刻写入磁盘,更新超块信息。 vim | vi Improved | 是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器。Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实现了很多增强功能。(备注:神一样的编辑器!!!) yum | Yellow dog Updater, Modified | 在Fedora和RedHat以及SUSE中基于rpm的软件包管理器
递归缩写 缩写 | 全称 | 说明 — | — | — GNU | Gnu is Not Unix | PHP | PHP: Hypertext Preprocessor | RPM | RPM Package Manager | WINE | WINE Is Not an Emulator | Wine 是类UNIX系统下运行微软Windows程序的”兼容层”。在Wine中运行的Windows程序,就如同运行原生Linux程序一样,不会有模拟器那样的性能问题。 PNG | PNG’s Not GIF | nano | Nano’s ANOther editor |
命令执行顺序: 1.执行用绝对路径或相对路径执行的命令 2.执行别名命令 3.执行BASH的内部命令 4.执行按照$PATH环境变量定义的目录查找顺序找到第一个命令
man 命令 - 查看命令的帮助文档
描述:这个man是manual(操作说明)的简写,让使用者更加方便的使用该命令, 在所有的 Unix 系统当中都可以利用 man 来查询命令或者是相关文件的用法;
Syntax&Param:
代码语言:javascript复制#基础语法
man [option] [级别] 命令
-f :查看命令拥有哪个级别的帮助等同于whatis 命令
-k : 查看所有包含关键字的命令 命令等于apropos 关键字
#内容级别
1.查看命令的帮助
2.查看可被内核调用的函数的帮助
3.查看函数和函数库(`大部分为C的函数库`)的帮助
4.查看特殊文件的帮助(主要是/dev目录下的文件)
5.查看配置文件或者是某些文件格式的帮助
6.查看游戏的帮助
7.查看其他杂项(惯例与协议)的帮助
8.查看系统管理员可用命令的帮助
9.查看和内核相关文件的帮助
# Man page 的内容部分说明(根据内容等级不同而存在不同):
- 0.命令(内容等级)
- 1.NAME - 简短的命令、数据名称说明
- 2.SYNOPSIS - 简短的命令执行语法(Syntax)简介
- 3.DESCRIPTION - 较为完整的说明
- 4.OPTIONS - 针对SYSNOPSIS部分的补充即选项参数
- 5.COMMANDS - 在该程序软件在执行时候可以在此程序软件中执行的命令
- 6.FILES - 程序或者数据所使用或参考或连接到的某些配置文件
- 7.ENVIRONMENT - 命令相关的环境参数
- 8.AUTHOR - 命令的作者
- 9.REPORTING BUGS - 请留言
- 10.COPYRIGHT - 公司版权说明
- 11.SEE ALSO - 该命令相关或者数据有相关的其它说明
- 12.EXAMPLE - 参考范例
- 13.BUGS - 相关错误
PS : 上述帮助命令等级中1/5/8三个号码非常重要也是我们最常遇到的;
PS : 帮助文档存放目录通常在/usr/share/man
该目录中,可以通过修改/etc/man.conf来更改设置;
PS : man page功能按键说明:
空格键 : 向下翻一页
PageDown : 向下翻一页
PageUp : 向上翻一页
Home : 去到第一页
End : 去到最后一页
/string : 向下查询string字符串
?string :向上查询string字符串
n,N : 根据 / 与 ? 查找模式的不同而不同前者是下一个而后者则是向前查询对于n来说,而N则相反;
q : 退出man帮助
基础命令示例:
代码语言:javascript复制#示例1.查看该命令有哪些运行级别
$man -f passwd
$whatis passwd
passwd (1) - update user's authentication tokens'
sslpasswd (1ssl) - compute password hashes
#示例2. 该命令的关键字查看
$man -k passwd
$apropos passwd
#Apropos适当地,adj. 恰好的;适当的 adv. ,恰好地;适当地;恰当地 ,prep. 关于
checkPasswdAccess (3) - query the SELinux policy database in the kernel
chpasswd (8) - update passwords in batch mode
gpasswd (1) - administer /etc/group and /etc/gshadow
#示例3.利用命令级别1进入查看命令文件数据
$man 1 passwd
PASSWD(1) User utilities PASSWD(1)
NAME
passwd - update user's authentication tokens
SYNOPSIS
passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w
warndays] [-i inactivedays] [-S] [--stdin] [username]
WeiyiGeek.分节说明
info 命令 - 在线的帮助文档命令
描述:基本上info与man的用途其实差不多都是用来查询命令的用法或者是文件的格式,简单的说在UNIX LIKE 系统中可以利用man来查询命令或者是相关文件的用法,但是在Linux里面又提供一种额外的方式即在线求助方式就是info命令; PS: info page的文件放置到/usr/share/info/目录中。 区别:
- 但是与man page一口气输出一堆信息不同的是,info page则是将文件数据拆成一个一个的段落每个段落用自己的页面来撰写
- 并且在各个页面中还有类似网页的『超链接』来跳到各不同的页面中,每个独立的页面也被称为一个节点(node)。
WeiyiGeek.文件相关性
代码语言:javascript复制#基础语法
info [命令]
#快捷键
空格:向下翻一页
tab:在node之间移动,node通常以*显示
enter:当光标在node上面时候可以使用回车键进入类似于a标签
b:移动光标到该info画面中的第一个node处
e:移动光标到该info画面当中的最后一个node处
n:进入下一个帮助小节
p:进入上一个帮助小节
u:向上移动一层
s(/) : 搜寻字符
H : 帮助命令
? : 命令一览表
q:exit
补充说明:
- File:代表这个info page的数据是来自info.info文件所提供的;
- Node:代表目前的这个页面是属于Top节点。 意思是info.info内含有很多信息,而Top仅是info.info文件内的一个节点内容而已;
- Next:下一个节点的名称为Getting Started,你也可以按『N』到下个节点去;
- Up:回到上一层的节点总揽画面,你也可以按下『U』回到上一层;
- Prev:前一个节点。但由于Top是info.info的第一个节点,所以上面没有前 节点信息: 『Menu』底下共分为四小节,分别是Getting Started等等的,我们可以使用上下左右按键来将光标移动到该文字或者『 * 』上面,按下Enter, 就可以前往该小节了!另外也可以按下[Tab]按键,就可以快速的将光标在上表的画面中的node间移动
WeiyiGeek.tab切换
基础语法:
代码语言:javascript复制#示例1.Linux在线帮助命令以及字符串的查找
info passwd
/date #查询相关字符
WeiyiGeek.搜索快捷键
help 命令
描述:获取内部命令帮助的命令
代码语言:javascript复制help 内部命令 #获取内部命令
ls --help #这是选项命令
#示例1.
$help cd
cd: cd [-L|[-P [-e]]] [dir]
Change the shell working directory.
Change the current directory to DIR. The default DIR is the value of the
HOME shell variable.
whereis 命令
描述:查询命令的可执行路径与帮助文件 特点:whereis查找的速度非常快,这是因为linux系统会将系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通 过遍历硬盘来查找,效率自然会很高。
代码语言:javascript复制#语法:
whereis【选项】命令名 //只有外来命令才能查询
#参数:
-b 只查找可执行文件
-m 只查找帮助文件
-s 只查找源source的文件
-u 查询费上面三种情况的文件
基础实例:
代码语言:javascript复制#示例1.
$whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
#示例2.
$whereis nmap
$whereis -b namp #查找nmap二进制的执行文件
ls: /usr/share/namp/bin/
WeiyiGeek.示例截图
history 命令
描述:查看当前用户的历史命令执行,历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改HISTSIZE与history格式;
代码语言:javascript复制history 【选项】【历史命令保存文件】
#选项
-c 清空历史命令
-w 把缓存中的历史命令写入历史命令保存文件~/.bash_history
#历史命令的调用:
1.使用上下箭头调用以前的历史命令
2.使用!n重复执行第n条命令
3.使用!!重复执行上一条命令
4.使用!字串重复执行最后一条以该字串开头的命令
#示例1.在通过history里面执行的上一个相似命令(来执行)
$!a
alias
alias egrep='egrep --color=auto'
history环境变量补充:(重点)
代码语言:javascript复制# grep -n "^HISTSIZE" /etc/profile
46:HISTSIZE=1000
47:HISTTIMEFORMAT="%F %T" #记录中带上了命令执行时间
# 1105 2019-08-01 16:49:03 history
#比如登陆过系统的用户、IP地址、操作命令以及操作时间--对应可以通过在/etc/profile里面加入以下代码实现
47:HISTTIMEFORMAT="%F %T $(whoami)#$(who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g') : "
# 134 2019-08-01 17:01:26 192.168.1.88 root # history
alias 命令
描述:建立命令的别名,提供一种便捷的方式完成某些长串命令操作;
代码语言:javascript复制#示例0.查看已存在的别名
$alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
#示例1.使用nginxrestart这个命令来代替/usr/local/webserver/nginx/sbin/nginx -s reload
alias nginxrestart='/usr/local/webserver/nginx/sbin/nginx -s reload' #临时生效,重启后失效
#需要将它放入~/.bashrc文件中,永久生效
echo 'alias nginxrestart="/usr/local/webserver/nginx/sbin/nginx -s reload"' >> ~/.bashrc
#示例2.例如:当我们将文件扩展名 pdf 定义成 zathura 后缀别名后,直接执行 pdf 文件名,就会调用zathura 打开该 pdf 文件(默认打开程序)
alias -s pdf=zathura #相当于Win中扩展关联
linux_study.pdf #来代替执行 zathuracheat_sheet_ssh_v4.pdf
修改配置文件:
代码语言:javascript复制$vi ~/.bashrc #写入环境变量配置文件 (可以对单个用户、也是可以全局通用的,只不过全局通用要在/etc/bashrc设置)
#alias 别名='原命令' 设定命令的别名
alias rm='rm -i'
alias ll='ls -l'
#alias别名设置立即生效,不用重启OS
$source ~/.bashrc
#别名转义
有些命令不是总是希望使用别名,可以在命令之前输入反斜杠来忽略所定义过的别名
$command
$ll
WeiyiGeek.别名转义
unalias 命令
描述:unalias 临时删除别名
代码语言:javascript复制unalias:用法:unalias [-a] 名称 [名称 ...]
#示例1.移除指定别名
unalias lll
#示例2.选项 -a 是取消全部的临时命令
unalias -a
which 命令 - 脚本文件名路径查询
描述:可以查看别名信息,cd命令是shell自带的找不到,whereis和which能找到的都是后来安装的命令;
代码语言:javascript复制which [-a] 命令名
# 参数
-a : 将所有由PATH目录中可以找到的命令均列出而不是第一个被找到的命令名称;
简单实例:
代码语言:javascript复制> which ls
ls: aliased to ls --color=tty
> which -a ls
ls: aliased to ls --color=tty
/usr/bin/ls
/bin/ls
source 命令
作用:可以强行让一个脚本去立即影响当前的环境,会强制执行脚本中的全部命令,而忽略文件的权限。
- 通常用于重新执行刚修改的初始化文件,如 .bash_profile 和 .profile 等等。
- source 命令可以影响执行脚本的父shell的环境,而 export 则只能影响其子shell的环境
#bash shell 的内置命令,从 C Shell 而来,另一种写法是点符号
root@fe70803be29a:~# source /etc/profile
root@fe70803be29a:~# . /etc/profile
#示例1.无执行权限任然可以执行
#!/bin/bash
a="hi"
echo $a
WeiyiGeek.无权限执行
source补充:
代码语言:javascript复制#souce只能更改影响当前执行脚本的权限,不能影响该脚本中引用的其他脚本,其他脚本里面得变量也不能影响file2的输出;
#### 案例1 ####
#file1 有执行权限
#!/bin/bash
a=hi.boy
echo "`dirname $0` $a"
#file2 无权限执行
#!/bin/bash
./file1 #将会另起进程(如果这时file1没有权限便不会被运行)
echo $a
#### 案例2 ####
#但是下面这种情况就比较特殊,就不会出现上面那种问题
#file1 无执行权限
#!/bin/bash
a="hello_world"
echo $a
#file2
#!/bin/bash
. ./file1
echo $a
WeiyiGeek.shell调用有权限
WeiyiGeek.shell调用无权限
为什么在shell脚本里面用export设置环境变量之后,当shell执行完了,用set命令看不到呢?
代码语言:javascript复制#示例1.
$export AA=123456
[root@izwz9biz2m4sd3bb3k38pgz /]# set | grep "AA"
AA=123456
#示例2.运行后set里面不存在AAA环境变量
#!/bin/bash
export AAA=123345
原因:当我们执行test.sh的时候,是当前终端所在的shell fork一个子shell然后执行test.sh的,执行完了再返回终端所在的shell。
我们在test.sh设置了AA环境变量,它只在fork出来的这个子shell中生效,子shell只能继承父shell的环境变量,而不能修改父shell的环境变量,所以test.sh结束后,父进程的环境就覆盖回去,所以在test.sh之后完之后,我们用set命令是看不了AA这个环境变量的值的。
那有什么办法可以让脚本的环境变量在脚本执行之后仍然对当前终端存在呢? 答:用sorcue 或者.(dot) ,明确告诉shell不要fork执行脚本,而是在当前的shell执行,这样环境变量就可以保存下来了。
WeiyiGeek.source特殊利用