常用Linux命令
目录
什么是shell?
操作系统和使用者之间的一个接口(即终端、命令行)称之为一个shell。一般shell指字符界面的命令行,其实操作系统图形化的界面也是操作系统和使用者之间的一个接口,也可以称之为一个shell。
ctrl加shift加+ 放大命令行
ctrl加- 缩小命令行
ctrl+shift +t 打开新标签 alt+n 切换到第n个标签
linux中没有盘符,只有一个根目录 /,cd / :跳转到根目录下
linux 中命令的格式:命令 [-选线] [参数]
0x00 浏览操作:
ls:相当于windows cmd中用的dir命令,作用是列出当前目录里面的内容(包括文件和目录),shell有很多种类型,kali使用的B shell,B shell的配色方案 会区分显示文件(白色)和目录(蓝色),压缩包(红色),可执行文件(绿色)
ls加上路径:显示特定路径中所有内容,例如 ls /bin 显示根目录下的bin文件夹中的内容
ls 2*:只显示以2开头的文件和文件夹。*为通配符,可以表示很多位
ls 2?: 只显示以2开头并且只有两位的文件和文件夹,?为通配符,只能表示一位。
ls -l:以长格式(long也就是详细显示)来显示当前目录的内容。这个详细信息中我们最关心是最开头的10个字符,这10个字符可以分为两个部分:第一个字符和后面9个字符。第一个字符为:d表示directory,-表示这是一个文件,c表示这是一个字符型的设备,l则表示这是一个link(链接),链接类似于windows操作系统中的快捷方式(格式:链接名称->实际文件的位置),b表示是一个block(块设备),例如:硬盘设备。
ls -a:显示当前目录下所有内容(包括隐藏的文件和目录)a 就是all,在linux下凡是以.这个字符起始来命名的文件夹都是隐藏文件夹。
ls -lh:以容易人类阅读的方式(以k m等为单位)显示内容的大小。
ls --sort=size :按照大小排序显示,一般组合参数写,ls -alh --sort=size
ls --sort = time:按照时间排序显示
cd:进入某一个目录 例如 cd /media/
cd . 表示进入当前目录
cd ..表示进入上级目录
cd -:跳转到上次所在目录
pwd:查看当前的工作目录
0x01文件文件夹操作
touch 1.txt创建1.txt文件,touch .123.txt 以.开头的文件默认为隐藏文件
ln -s 1.txt 1_softlink.txt :表示给1.txt创建快捷方式1_link.txt文件,1.txt文件被删除后,1_softlink.txt就不能用了
ln 1.txt 1_hardlink.txt :创建硬连接文件,1.txt被删除后,1_hardlink.txt 仍然可以用
mv 原文件名 新文件名:重命名
mv 文件名 文件夹名:将文件移动到文件夹
mkdir laowang 创建laowang文件夹。
直接 cd 会进入~目录,其实就是根目录下的/root目录(用户主目录),不知道cd到什么地方的时候可以敲两次tab 键看看能cd到什么地方
cat:用来显示一个文本类型文件的内容
例如:cat /var/log/messages (messages文件记录了系统变化的信息)
cat 会一次性输出全部内容,当文件信息很多时,这样很不方便。
所以就有了more命令:more /var/log/messages 首先会显示满一个屏幕,然后如果想查看更多内容,按回车键就会一行一行的增加内容,左下角的百分比代表着显示内容占全部内容的比重。如果不想查看了,可以按q退出
cat 1.txt 2.txt: 先显示1.txt的内容 再显示 2.txt的内容
cat 1.txt 2.txt > xxx.txt :可以达到将1.txt 和2.txt的内容组合起来 覆盖写到 xxx.txt的效果
与more命令类似,less命令只不过没有了左下角的百分比。
以上命令都是从头到尾去显示一个文件的内容,但是这messages文件,会将系统最新的变动写在文件的最后,这个时候,我们再用more less cat命令去查看系统最新的变动信息会很不方便。
所以有了tail(尾巴,踪迹)命令:默认显示一个文件最下面10行的内容
tail -20 /var/log/messages 加上参数(例如-20)则可以任意指定,显示的行数
tail命令通常会与watch命令相结合使用,watch 通过-n参数来指定一个时间间隔,每隔多少时间去循环重复watch命令之后的命令:
例如:watch -n 2 tail -20 /var/log/messages 表示每隔两秒钟执行一次tail命令
rm:删除一个文件,若要删除一个文件夹则需要加上 -r 参数 或者 直接使用 rmdir + 文件夹名 (只能删除空文件夹)
rm / -rf:最危险的命令,表示从根目录开始删除所有文件
cp:拷贝一个文件 例如 cp 1.txt 1cp.txt 将1.txt拷贝一份叫1cp.txt,而拷贝目录则需要加上-r参数
cp -r 目录名 拷贝份目录名
0x03 查看本机信息操作:
top:监视linux系统的性能和进程,如果你想结束某个进程,直接按k,然后输入这个进程的PID,按回车,就会kill 这个进程。
按shift +m M 根据驻留内存大小进行排序
然后按C 就会 切换显示命令名称和完整命令行
free 查看本机内存有多大,以及内存使用情况 -m单位mb -g单位gb
uname -a 查看系统内核版本号
uptime 查看负载
ps:专门用来查看进程信息的,通常会使用-ef参数 -aux参数 来详细显示进程信息
shutdown -h now
shutdown -h +100 100分钟后关
shutdown -h 20:25
reboot 重启
df -h 查看硬盘的占用空间
du -h 查看当前文件夹有多大
0x04 Net-Tools:
ifconfig:查看当前的网络配置信息
ifconfig eth0 down 将网卡down掉(关闭掉)
有时我们可能需要修改网卡的mac地址,所以需要先把网卡down掉然后修改将网卡启动
macchanger -m 00:11:11:11:11:11 eth0 将eth0网卡的mac地址修改成00:11:11:11:11:11
ifconfig eth0 up 启动网卡eth0
netstat:查看网络连接信息。
netstat -pantu:查看计算机和那些网络中服务器产生了tcp udp的连接
netstat -pantu | egrep -v '0.0.0.0|:::' (egrep是grep的加强版,-v表示取反,那么含有0.0.0.0或者:::的行就会被筛选掉)(两个命令之间用|可以达到在一行执行多个命令的效果)
netstat -pantu | egrep -v '0.0.0.0|:::' | awk '{print $5}' 只显示每一行中第五列的信息内容
awk:默认以空格来划分列。
进一步筛选
netstat -pantu | egrep -v '0.0.0.0|:::' | awk '{print $5}' |cut -d ':' (用-d参数指定以冒号对每一行内容进行分块)-f 1 (表示通过冒号分块后只显示第一块)| uniq(把重复的行只显示一次) | sort(排序)> ip (表示将之前的命令执行的结果输出到一个名为ip的文件中)
如果我们打开一个新的视频,同样执行这个命令,那么新得到的ip就会覆盖原来ip文件中的内容。如果修改>为>>则会将新的内容追加到原来的内容后面。
mount:用来挂在远程或者本地文件夹(目录)或者 文件。 例如你可以挂载一个iso文件
dmesg :相当于 tail /var/log/messages
find:比如说你安装了nmap想知道,这个文件被安装在了什么地方:
find /(表示从根目录开始查找) -name nmap
如果想不区分大小写的去查找的话,可以写 find / -iname "nmap"
find . -name ‘ip*’ 从当前目录开始查找凡是以ip开头的文件
find . -name ‘ip*’ -exec(表示对搜索结果执行之后的操作) cp {} /tmp/{}.bak \;(表示结束这个命令) 将搜索的结果copy到tmp这个目录下并且以.bak结尾
如果权限不够,则在开头加上sudo即可
whereis :同上,只不过查找范围小于find,但是查找速度快于find。这是因为凡是通过操作系统的包管理工具,比如appget,安装到操作系统中的软件包生成出来的软件,都会在本地生成一个数据库,这个数据库中会收集这些软件名称。而whereis就是去这个数据库中搜索你搜索的字符串,然后返回数据库中存储的对应路径。但是如果我们安装软件时使用的是源码安装,那么数据库中就不会存储这些信息,当然也就搜索不到了。
whereis -b namp 只查找名称为namp的二进制格式的文件。一般在使用whereis之前,我们一般需要先用updatedb来更新下whereis要搜索的数据库。
echo:用来在当前的终端中输出某些信息
例如:echo ”hello world“
0x05 Linux三剑客:
(1)awk是一门编程语言,可以用来分析日志
awk是用来按列获取的(统计列),默认按照空格分割
awk '{print $1}' 文件名 获取该文件的第一列的内容,
awk -F '分隔符' '{print $1}' 文件名 指定分隔符。
(2)grep 是用来按行获取的,可以用来筛选内容
- grep "关键字" 文件名 获取文件中含有该关键字的行
- 命令 | grep "关键字" 将命令获取的内容交给grep来筛选
例如:
/etc/passwd 这个文件中存的当前操作系统的所有用户信息,cat出来的内容会很多,如果我只想查看包含特定字符串的内容的话,我们就可以使用grep命令
grep “ssh” /etc/passwd: 在/etc/passwd中查找含有ssh字符串的行
grep “ssh” /etc/passwd -n: -n选项表示显示哪一行
grep “ssh” /etc/passwd -v:-v选项 表示显示不包含 ssh字符串的行
grep “^ssh” /etc/passwd: 显示以ssh开头的行
grep "ssh$" /etc/passwd:显示以ssh结尾的行
例如:
ifconfig | grep "inet"
netstat -pantu | grep '22'
netstat -pantu | grep '22' |wc -l 统计行数(可以用来统计日志文件中ip访问的次数)
例如:
看日志文件时,有需要被#注释的内容,如果我们不想看这些内容,可以:
grep -v '^#' 文件名
其中-v表示取反。
如果还想将空行去除掉可以这样写
grep -Ev '^#|^$' 文件名
等价于:
egrep -v '^#|^$' 文件名
原理:因为linux文件中空行默认以$开头,只是默认隐藏了,通过cat -A可以查看隐藏的$。
(3) sed 批量替换
sed -i 's#替换#替换成#g ' 文件名
记忆方法:sg 中间三个#
0x06重定向:
ls > xxx.txt 表示将前一个命令的输出存储(覆盖写)在xxx.txt
ls >> xxx.txt 表示前一个命令的输出追加到xxx.txt
如果文件不存在,则会先创建文件。
0x07归档管理:tar
tar -cvf xxx.tar *.txt 将*.txt 打包到xxx.tar,注意打包并没有压缩
tar -xvf xxx.tar 解包
tar -zcvf xxx.tar.gz *.txt :压缩打包 或者用 tar -jcvf yyy.tar.bz2 *.txt
tar -zxvf xxx.tar.gz:解压 对应用 tar -jxvf yyy.tar.bz2
tar -zxvf xxx.tar.gz -c 路径 表示解压到指定路径
linux 的所有命令其实都对应着 /bin 目录下的一个文件。用which可以查看某个命令所对应的文件的存储位置
例如:which ls 查看ls命令对应的文件
0x08 小工具:
cal 查看日历
cal -y 2008
date 查看当前时间
date "+某格式" 例如:date ”+%Y==%m==%d"
0x09管道符号:
|:前一个命令的输出作为后一个命令的输入。
&:前后两个命令依次执行,前面的命令即使执行失败,后面的命令也能执行
&&:只有前面的命令执行成功,后面的命令才会执行。
||:只有前面的命令执行不成功,才会执行后面的命令
0x0A查看帮助文档:
1.命令 --help
2.man 命令 按F键往下翻一屏,按B往回翻一屏
自动补全 按tab键,一般输入过长文件名时使用。
历史命令:history
!命令编号:执行对应的命令
0x0B用户和用户组:
添加账户:
sudo useradd shuaige -m :-m表示在创建完账户之后顺便在home下创建该账户的家目录
sudo passwd shuaige 设置密码
注意新创建的用户,默认不能sudo,需要将其添加到sudo用户组和adm用户组中。
su shuaige :切换到shuaige,但是当前所在目录不会切
su - shuaige:切换用户到shuaige,并且将当前目录切换到对应的家目录
whoami :查看当前账户
exit :退出当前账户
userdel xxx:删除用户,用户的文件夹不会删。 加上 -r表示删除家目录
#表示超级管理员 $表示普通账户
cat /etc/group查看当前所有的用户组
groupadd xxx:创建用户组
groupdel xxx:删除用户组
groupmod +tab+tab 查看所有组的组名
一个账户能不能用sudo命令取决于这个账户是不是在sudo这个用户组里面
sudo usermod -a -G sudo 用户名 将一个
账户添加到sudo这个用户组
sudo usermod -a -G adm 用户名
0x0CLinux文件权限以及组
第一个meinv 是该文件所属的用户,其权限对应前三位
第二个meinv 是该文件所属的用户组,其权限对应4到6位
2表示该文件的软连接数量。
chgrp 组名 文件名 :修改文件所在的用户组,文件在哪个用户组就有哪个用户组的权限
chown [-R] user[:group] file:修改文件的拥有者
如果要修改一个文件夹中所有文件的 拥有者 那么需要加上-R
-R : 处理指定目录以及其子目录下的所有文件
文件权限:
r 可读(4) w可写(2) x可执行(1)
文件可执行表示 文件中的代码可以运行
文件夹可以执行表示 可以进入该文件夹,只要是最后一位是x,那么普通用户一定可以进入该文件夹。
一共10个位置:
第一个位置表示文件的类型:l for link(软链接,即快捷方式),d for directory
其后9个位置分成为三组,每一组最多3个位置xrw
修改文件的权限:
字母法:
u表示文件的拥有者(user) g表示同用户组者(grouper), o表示其他人(other)
chmod u=rwx 2.py
chmod g=rwx 2.py
chmod u=r,g=r,o=r 2.py
chmod u=,g=,r= 2.py 表示没有任何权限(除了超级管理员)
数字法:
r对应4 w对应2 x对应1
那么5对应rx,6对应rw,7对应rwx
chmod 137 2.py
相当于 chmod u=x,g=wx,o=rwx 2.py
如果一个文件夹是777,即所有的用户都可以对其rwx,那么它的背景色将是绿色;
chmod -x /var/ 将var的x的权限全部去掉
chmod +x /var/ 给var添加x权限(user,group,other都添加)
chmod -R 777 common/ 将该文件以及该文件夹下的所有文件的权限都修改为777。-R表示递归
注意:
普通用户在根目录下是没有w的权限的,例如:不能mkdir创建文件夹。
一般而言,普通用户在自己的家目录下是有w的权限。