常用Linux命令

目录

什么是shell?

0x00 浏览操作:

0x01文件文件夹操作

0x03 查看本机信息操作:

0x04 Net-Tools:

0x05 Linux三剑客:

0x06重定向:

0x07归档管理:tar

0x08 小工具:

0x09管道符号:

0x0A查看帮助文档:

0x0B用户和用户组:

0x0CLinux文件权限以及组

文件权限:

修改文件的权限:

 

 


什么是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 是用来按行获取的,可以用来筛选内容

  1. grep "关键字" 文件名 获取文件中含有该关键字的
  2. 命令 | 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的权限。