Linux终端常用操作命令

关机重启

shutdown -h now:表示立即关机
shutdown -h 1:表示1分钟后关机
shutdown -r now:立即重启
halt:就是直接使用,效果等价于关机
reboot:就是重启系统

数据同步

sync:把内存的数据同步到磁盘。当我们关机或者重启时,都应该先执行以下sync指令,把内存的数据写入磁盘,防止数据丢失。

文本编辑器

vi abc.txt:启动编辑器打开abc.txt文件并编辑。
vim abc.txt:启动编辑器打开abc.txt文件并编辑,vim是vi的增强版。

增、删、改用户

useradd 用户名:添加用户
useradd -g 组名 用户名:添加用户的同时,给这个用户分配进某个组
useradd -d /home/dog/zhangsan:给新创建的用户指定家目录
usermod –g 组名 用户名:改变用户所在组
usermod –d 目录名 用户名:改变该用户登陆的初始目录。
userdel 用户名:删除用户,但是会保留家目录
userdel -d zhangsan:删除zhangsan用户以及它的主目录

新建或修改用户密码

passwd 123456:给用户修改密码

查看用户信息

id zhangsan:查询用户信息

切换用户

su zhangsan:切换用户-----从权限高的用户切换到权限低的用户,不需要输入密码,反之需要。当需要返回到原来用户时,使用exit指令。

增删组

groupadd 组名:增加组。
groupdel g:删除组。

帮助命令

man ls:查看ls命令的帮助信息
help cd:查看cd命令的帮助信息

查看文件绝对路径

pwd:显示当前工作目录的绝对路径

查看当前文件的信息

ls:查看当前文件的列表。
ls -a:显示当前目录所有的文件和目录,包括隐藏的。
ls -l:以列表的方式显示信息。
ls -la:查看当前目录的所有内容信息。
ls -lah:查看文件的所有者,查看文件/目录所在组。

改变访问目录

cd /home/dog:改变文件访问路径,去到dog目录下。
cd:回到家目录。
cd …:回到上一级目录。

增、删文件夹

mkdir menu1:创建一个menu1目录。
mkdir -p menu1/animal/dog:创建多级目录。
rmdir menu1:删除menu1目录-----删除的是空目录,如果目录下有内容时无法删除的。
rmdir -rf menu1:删除非空目录。

创建文件

touch abc.txt:创建空文件。

复制粘贴文件

cp abc.txt /home/dog/:拷贝文件到指定目录。
cp -r menu1/ menu2/:将test整个目录拷贝到zwj目录-----要注意当前目录位置和目标目录位置,当发现目标文件下有相同文件,会提示你是否覆盖。
\cp -r menu1/ menu2/:强制覆盖不提示的方法。

删除文件

rm abc.txt:删除文件或目录
rm -rf dog/:递归删除整个文件夹bbb

移动、重命名文件

mv abc.txt edf.txt:将abc.txt文件重新命名为def.txt。
mv abc.txt /home/:将abc.txt文件移动到home目录下。

查看文件内容

cat abc.txt:查看文件内容,是以只读的方式打开,而不能修改文件。
cat -n abc.txt:查看文件,并显示行号。
cat -n abc.txt | more:查看文件,显示出行号,并分页显示。
more abc.txt:基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。
more的快捷键:空格:向下翻一页,回车:向下翻一行,q:推出more,Ctrl+F:向下滚一屏,Ctrl+B:返回上一屏,=:输出当前的行号。
less abc.txt:分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
head abc.txt:head用于显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容。
head -n 5 abc.txt:查看文件头5行内容,5可以是任意行数。
tail abc.txt:tail用于输出文件中尾部的内容,默认情况下tail指令显示文件的后10行内容。
tail -n 5 abc.txt:查看文件后5行内容,5可以是任意行数。
tail -f abc.txt:实时追踪该文档的所有更新,工作经常使用。如果有变化,下面会显示一些时间列表。

文件内容覆盖

ls -l > a.txt:将ls-l的显示的内容覆盖写入到a.txt文件,如果该文件不存在,就创建该文件。
ls -al >> abc.txt:列表的内容追加到文件abc.txt的末尾。
cat 文件1 > 文件2:将文件1的内容覆盖到文件2。
ls -l /home/ > /home/abc.txt:将/home目录下的文件列表写入到/home/abc.txt中。
cal >> /home/mycal:将当前日历信息追加到/home/mycal文件中。

输出环境变量路径

echo $PATH:使用echo指令输出环境变量,输出当前的环境路径。

增、删软链接

ln -s /root linkToRoot:在/当前目录下创建一个软连接linkToRoot,连接到/root目录,软链接也叫符号链接,类似于windows里的快捷方式,主要存放了链接其他文件的路径。
rm -rf linkToRoot:删除软连接linkToRoot。

查看已执行过的命令

history:查看已经执行过历史命令,也可以执行历史指令
history 10:显示最近使用过的10个指令
!5:执行历史编号为5的指令

查看日期和日历

date:显示当前时间信息。
date+%Y:显示当前年份。
date+%m:显示当前月份。
date+%d:显示当前是哪一天。
date"+%Y-%m-%d%H:%M:%S":显示当前年月日时分秒。
date -s “2018-10-10 11:22:33”:设置系统当前时间,比如设置成2018-10-10 11:22:22。
cal:显示当前日历。
cal 2020:显示2020年日历。

搜索文件

find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端。
find /home -name abc.txt:根据名称查找/home目录下的hello.txt文件。
find /opt -user nobody:查找/opt目录下,用户名称为nobody的文件。
find / -size +20M:查找整个linux系统下大于20m的文件(+n大于,-n小于,n等于)。
find / -name *.txt:查询/目录下,所有.txt的文件。

过滤搜索

grep过滤查找,管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理。
cat hello.txt | grep -n yes:在hello.txt文件中,查找"yes"所在行,并且显示行号,-n区分大小写。
cat hello.txt | grep -ni yes:在hello.txt文件中,查找"yes"所在行,并且显示行号,-ni不区分大小写。

解、压缩文件

gzip hello.txt:将当前目录下的hello.txt文件进行压缩,gzip只能将文件压缩为*.gz文件。使用gzip对文件进行压缩后,不会保留原来的文件。
gunzip hello.txt.gz:将当前目录下的hello.txt.gz文件进行解压。
zip -r mypackage.zip /home/:将/home下的所有文件压缩成mypackage.zip。
unzip -d /opt/tmp/ mypackage.zip:将mypackge.zip解压到/opt/tmp目录下。
tar指令是打包指令,最后打包后的文件是.tar.gz的文件。
-c:产生.tar打包文件,-v:显示详细信息,-f:制定压缩后的文件名,-z:打包同时压缩,-x:解包.tar文件。
tar -zcvf a.tar.gz a1.txt a2.txt:压缩多个文件,将当前目录下的a1.txt和a2.txt压缩成a.tar.gz。
tar -zcvf myhome.tar.gz /home/:将/home的文件夹压缩成myhome.tar.gz。
tar -zxvf a.tar.gz:将a.tar.gz解压到当前目录。
tar -zxvf myhome.tar.gz -C /opt/:将myhome.tar.gz解压到/opt/目录下。指定解压到的那个目录,事先要存在才能成功,否则会报错。

修改文件权限

ls -l 中显示的内容如下:
-rwxrw-r–1 root root 1213 Feb 2 09:39 abc
第0位确定文件类型(d,-,l,c,b)
第1-3位确定所有者(该文件的所有者)拥有该文件的权限。—User
第4-6位确定所属组(同用户组的)拥有该文件的权限,—Group
4)第7-9位确定其他用户拥有该文件的权限—Other
rwx作用到文件:
1)[r]代表可读(read):可以读取,查看。
2)[w]代表可写(write):可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件。
3)[x]代表可执行(execute):可以被执行。
rwx作用到目录:
1)[r]代表可读(read):可以读取,ls查看目录内容
2)[w]代表可写(write):可以修改,目录内创建+删除+重命名目录
3)[x]代表可执行(execute):可以进入该目录
ls -l 中显示的内容:-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc
第一个字符代表文件类型:文件(-),目录(d),链接(l)其余字符每3个一组(rwx)读®写(w)执行(x)
第一组rwx:文件拥有者的权限是读、写和执行
第二组rw-:与文件拥有者同一组的用户的权限是读、写但不能执行
第三组r–:不与文件拥有者同组的其他用户的权限是读不能写和执行
可用数字表示为:r=4,w=2,x=1因此rwx=4+2+1=7
1 文件:硬连接数或,目录:子目录数
root:用户
root:组
1213:文件大小(字节),如果是文件夹,显示4096字节
Feb 2 09:39:最后修改日期
abc:文件名
通过chmod指令,可以修改文件或者目录的权限
chmod -g bandit tom:创建bandit组,将tom这个用户从原来所在的police组,修改到bandit组
第一种方式:+、-、=变更权限:
u:所有者,g:所有组,o:其他人,a:所有人(u、g、o的总和)
1)chmod u=rwx,g=rx,o=x 文件目录名
2)chmod o+w 文件目录名
3)chmod a-x 文件目录名
chmod u=rwx,g=r,o=rx abc:给abc文件的所有者读写执行的权限,给所在组读执行权限,给其它组读执行权限。
chmod u-x,g+w abc:给abc文件的所有者除去执行的权限,增加组写的权限
chmod a+r abc:给abc文件的所有用户添加读的权限
第二种方式:通过数字变更权限:
规则:r=4 w=2 x=1,rwx=4+2+1=7
chmod u=rwx,g=rx,o=x 文件目录名,相当于:chmod 751 文件目录名
要求:将/home/abc.txt文件的权限修改成rwxr-xr-x,使用给数字的方式实现:
rwx=4+2+1=7,r-x=4+1=5,r-x=4+1=5
chmod 755 /home/abc.txt
当某个用户创建了一个文件后,默认这个文件的所在组就是该用户所在的组。除文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组。

修改文件所有者

chown tom apple.txt:使用root创建一个文件apple.txt,然后将其所有者修改成tom。
chown -R tom kkk/:将/home/kkk目录下所有的文件和目录的所有者都修改成tom,包括子目录和子目录下的文件,首选我们应该使用root操作。

修改文件所在组

chgrp bandit /home/abc.txt:请将/home/abc.txt文件的所在组修改成bandit。
chgrp -R bandit /home/kkk:请将/home/kkk目录下所有的文件和目录的所在组都修改成bandit。

定时执行任务

crontab进行定时任务的设置,是指系统在某个时间执行的特定的命令或程序。
案例1:每隔1分钟,就将当前的日期信息,追加到/tmp/mydate文件中
1)先编写一个文件/home/mytask1.sh,在这个sh文件添加内容:date>>/tmp/mydate
2)给mytask1.sh一个可以执行权限,chmod 744。/home/mytask1.sh,让mytash1.sh文件成为可执行文件。
3)输入crontab -e命令,进入任务调度文件。
4)在调度文件添加内容:*/1 * * * * /home/mytask1.sh。
5)成功,等待每分钟刷新记录。
crontab –r:终止任务调度。
crontab –l:列出当前有那些任务调度。
service crond restart:重启任务调度

Linux分区

Linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分。
Linux采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。
1)Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘。
2)对于IDE硬盘,驱动器标识符为“hdx~”,其中“hd”表明分区所在设备的类型,这里是指IDE硬盘了。
“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“~”代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例,hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。
3)对于SCSI硬盘则标识为“sdx~”,SCSI硬盘是用“sd”来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样。

查看分区情况

lsblk:查看当前系统的分区情况
lsblk -f:查看系统的分区与挂载的情况。

查看磁盘运行状况

df -h:查询系统整体磁盘使用情况
df -lh:查询系统整体磁盘使用情况。
du -h /目录:查询指定目录的磁盘占用情况,默认为当前目录,
-s:指定目录占用大小汇总,-h:带计量单位,-a:含文件,–max-depth=:1子目录深度,-c:列出明细的同时,增加汇总值。
ls -l /home | grep “^-” | WC -l:统计/home文件夹下文件的个数。
ls -l /home | grep “^d” | WC -l:统计/home文件夹下目录的个数。
ls -lR /home | grep “^-” | WC -l:统计/home文件夹下文件的个数,包括子文件夹里的。
ls -lR /home | grep “^d” | WC -l:统计文件夹下目录的个数,包括子文件夹里的。

Linux进程

1)在LINUX中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个ID号。
2)每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例如www服务器。
3)每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
4)一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束。

查看进程

ps -a:显示当前终端的所有进行信息。
ps -u:以用户的格式显示进行信息。
ps -x:显示后台进程运行的参数。
ps -e:显示所有进程。
ps -f:全格式。
ps -aux:经常使用。
ps -ef:以全格式显示当前所有的进程。会显示出UID:用户id、PID:进程id、PPID:父进程id、 C:优先级因子、 STIME:进程启动的时间、TTY:完整的终端名称、 TIME:CPU时间、 CMD:启动进程所用的命令和参数 。
ps -ef | grep sshd:全格式地显示sshd服务进程信息。
ps –aux | grep sshd:查看进程列表中是否正在执行***服务。
ps -ef | more:以全格式显示当前所有的进程,查看进程的父进程。
pstree -p:以树的形式显示进程PID。
pstree -u:以树的形式显示进程所属的用户。
top与ps命令很相似。它们都用来显示正在执行的进程。Top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的的进程。
top:查看执行的进程。在这个命令里,输入"u:用户名",查看指定用户。输入"k:PID",结束某进程。
top -d 10:指定系统状态更新的时间(每隔10秒自动更新,默认是3秒)

结束进程

若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程。使用kill命令来完成此项任务。
kill 4001:杀死进程号为4001的进程。
kill gedit:杀死gedit进程。
kill -9 4001:强制杀死进程号为4001的进程。
kill all 进程名称:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用。

Linux服务

服务(service)本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysql,sshd防火墙等),因此我们又称为守护进程,是Linux中非常重要的知识点。

查看Linux服务

查看服务名:
方式1:使用setup->系统服务,就可以看到。
方式2:ls -l /etc/init.d/:列出系统有哪些服务。

修改Linux服务的状态

service 服务名 start:开启服务。
service 服务名 stop:停止服务。
service 服务名 restart:重启服务。
service 服务名 reload:重载服务。
service 服务名 status:查看服务状态。
service iptables restart:重启防火墙服务。
service network stop:停止网络服务。
注意:在CentOS7.0后不再使用service,而是systemctl。这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置。如果希望设置某个服务自启动或关闭永久生效,要使用chkconfig指令。

Linux服务的运行级别

服务的运行级别(runlevel):
查看或者修改默认级别:vi/etc/inittabLinux
系统有7种运行级别(runlevel):常用的是级别3和5•运行级别
0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动•运行级别。
1:单用户工作状态,root权限,用于系统维护,禁止远程登陆•运行级别。
2:多用户状态(没有NFS),不支持网络•运行级别。
3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式•运行级别。
4:系统未使用,保留•运行级别。
5:X11控制台,登陆后进入图形GUI模式•运行级别。
6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动。

查看、修改服务的运行级别

chkconfig命令可以给每个服务的各个运行级别设置自启动/关闭。
chkconfig --list:显示当前系统所有服务的各个运行级别的运行状态。
chkconfig --list | grep sshd:显示当前sshd服务的各个运行级别的运行状态。
chkconfig iptables --list:显示当前iptables(防火墙)服务的各个运行级别的运行状态。
chkconfig --level 5 sshd off:将sshd服务在运行级别5下设置为不自动启动。
chkconfig --level 5 iptable soff:当运行级别为5时,关闭防火墙。
chkconfig iptables off:在所有运行级别下,都关闭防火墙。
注意:chkconfig重新设置服务后自启动或关闭,需要重启机器reboot才能生效。

查看网络状态

netstat -an:以一定的顺序查看当前网络情况。
netstat -p:显示哪个进程正在调用。
netstat -anp:查看所有正在执行的服务的网络情况。
netstat -anp | grep sshd:查看sshd服务的网络情况。

rpm软包

rpm是一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHatPackageManager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。Linux的分发版本都有采用(suse,redhat,centos等等),可以算是公认的行业标准了。
rpm -qa:查询所有已经安装了的rpm软件包。
rpm -qa | more:分页显示,查询所有已经安装了的rpm软件包。
rpm -qi firefox:查询安装firefox的软件包信息。包括名称、日期、版本等等。
rpm -ql firefox:查询firefox软件包中的文件。可以看到安装到的目录。
rpm -qa | grep firefox:查询当前的Linux有没有安装firefox。
rpm -e firefox:卸载firefox软件包。
rpm -e --nodeps firefox:强制卸载firefox软件包。不推荐这样做,因为这样会导致依赖此包的其他软件包会无法启动。
rpm -ivh /opt/firefox-45.0.1-1.el6.centos._x86._64.rpm:安装redis的软件包。-i:安装、-v:提示、-h:进度条。

yum软件包管理

Yum是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。使用yum的前提是可以联网。
yum install firefox:安装firefox。
yum list | grep firefox:查询yum服务器是否有需要安装的软件。