跳过前面的部分,直接查看【Linux常用操作命令 】
【起源】林纳斯·托瓦兹(芬兰)出于个人爱好编写了一套程序,后来在1991年10月5日发布了Linux内核,而内核+用户空间应用程序就是Linux系统。
【简述】Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
【版本】市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等
【应用领域】主要应用于嵌入式设备、超级计算机和服务器等领域,很多家庭、企业,甚至政府都推荐使用Linux。
为什么很多服务器都使用linux系统?
显而易见,要论普及程度,windows系统居于首位,但是绝大多数公司的研发工作比如服务器端都更愿意去使用Linux,这一现象与Linux的良好特性是分不开的。
(1)开放性。开放性是指系统遵循世界标准规范,特别是遵循开放系统互连(OSI)国际标准。凡遵循国际标准所开发的硬件和软件,都能彼此兼容,可方便地实现互连。
(2)多用户。多用户是指系统资源可以被不同用户各自拥有使用,即每个用户对自己的资源(例如:文件、设备)有特定的权限,互不影响。Linux和Unix都具有多用户的特性。
(3)多任务。多任务是指计算机同时独立的执行多个程序。Linux系统调度每一个进程,平等地访问微处理器。由于CPU的处理速度非常快,其结果是,启动的应用程序看起来好像在并行运行。事实上,从处理器执行一个应用程序中的一组指令到Linux调度微处理器再次运行这个程序之间只有很短的时间延迟,用户是感觉不出来的。
(4)内核优势。Linux系统比较简单,内核优化的非常好,不存在刷新功能,工作时占用资源特别少,占用内存小,早期的linux占用64MB就可以很流畅的运行;这一特性导致它在服务器行业不可撼动,而windows系统较为复杂,运行效率低。
(5)良好的用户界面 。Linux向用户提供了两种界面:用户界面和系统调用,即桌面式界面和命令式界面(shell)。
Linux的传统用户界面是基于文本的命令行界面,即shell,它既可以联机使用,又可存在文件上脱机使用。shell有很强的程序设计能力,用户可方便地用它编制程序,从而为用户扩充系统功能提供了更高级的手段。可编程Shell是指将多条命令组合在一起,形成一个 Shell程序,这个程序可以单独运行,也可以与其他程序同时运行。
系统调用给用户提供编程时使用的界面。用户可以在编程时直接使用系统提供的系统调用命令。系统通过这个界面为用户程序提供低级、高效率的服务。Linux还为用户提供了图形用户界面。它利用鼠标、菜单、窗口、滚动条等设施,给用户呈现一个直观、易操作、交互性强的友好的图形化界面。
(6)使用者与群组的规划。在Linux的机器中,档案的属性分为 【可写 、可读 、可执行】,这些属性可分为【档案拥有者、档案所属群组、其它非拥有者与所属群者】 。这对于项目计划或者其它计划开发者具有相当良好的系统保密性。
(7)丰富的软件支持。与其他的操作系统不同的是,安装了Linux系统后,用户常用的一些办公软件、图形处理工具、多媒体播放软件和网络工具等都已无需安装。而对于程序开发人员来说,Linux更是一个很好的操作平台,在Linux 的软件包中,包含了多种程序语言与开发工具,如gcc、cc、C++、Tcl/Tk、Perl、Fortran77 等。
(8)设备独立性 。设备独立性是指操作系统把所有外部设备统一当作成文件来看待,只要安装它们的驱动程序,任何用户都可以象使用文件一样,操纵、使用这些设备,而不必知道它们的具体存在形式。 具有设备独立性的操作系统,通过把每一个外围设备看作一个独立文件来简化增加新设备的工作。当需要增加新设备时、系统管理员就在内核中增加必要的连接。这种连接(也称作设备驱动程序)保证每次调用设备提供服务时,内核以相同的方式来处理它们。当新的及更好的外设被开发并交付给用户时,操作允许在这些设备连接到内核后,就能不受限制地立即访问它们。设备独立性的关键在于内核的适应能力。其他操作系统只允许一定数量或一定种类的外部设备连接。而设备独立性的操作系统能够容纳任意种类及任意数量的设备,因为每一个设备都是通过其与内核的专用连接独立进行访问。
Linux是具有设备独立性的操作系统,它的内核具有高度适应能力,随着更多的程序员加入Linux编程,会有更多硬件设备加入到各种Linux内核和发行版本中。另外,由于用户可以免费得到Linux的内核源代码,因此,用户可以修改内核源代码,以便适应新增加的外部设备。
(9)网络支持。完善的内置网络是Linux的一大特点。Linux在通信和网络功能方面优于其他操作系统。其他操作系统不包含如此紧密地和内核结合在一起的连接网络的能力,也没有内置这些联网特性的灵活性。而Linux为用户提供了完善的、强大的网络功能。
支持Internet是其网络功能之一。Linux免费提供了大量支持Internet的软件,Internet是在Unix领域中建立并繁荣起来的,在这方面使用Linux是相当方便的,用户能用Linux与世界上的其他人通过Internet网络进行通信。
文件传输是其网络功能之二。用户能通过一些Linux命令完成内部信息或文件的传输。 远程访问是其网络功能之三。Linux不仅允许进行文件和程序的传输,它还为系统管理员和技术人员提供了访问其他系统的窗口。通过这种远程访问的功能,一位技术人员能够有效地为多个系统服务,即使那些系统位于相距很远的地方。
综上,linux是一个多用户、多任务、多线程、内核优化良好并提供丰富网络支持和具有设备独立性的开源性操作系统。企业服务器使用linux系统,降低了成本,掌握了系统控制权,可根据自己需要修剪系统功能,用户可定制性较强,便于开发和管理。
在根目录下输入命令:ls ,查看系统目录结构如下:
/root:该目录为系统管理员,也称作超级权限者的用户主目录。
/bin:Binary的缩写, 存放着最经常使用的命令。
/boot:存放启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
/dev :Device(设备)的缩写, 存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
/etc:存放所有的系统管理所需要的配置文件和子目录。
/home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/lib:存放系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
/media:linux系统会自动识别一些设备,例如U盘、光驱等等,并把识别的设备挂载到这个目录下。
/opt:默认为空。存放linux系统上额外安装的软件,比如安装一个ORACLE数据库或者部署一个项目就可以放到这个目录下。
/usr: 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。/usr/bin:系统用户使用的应用程序。/usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
/proc:映射系统内存的虚拟目录,可以直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令,使别人无法ping你的机器:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all。
/var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志
cat /etc/issue //查看Linux 版本信息
uname -a //查看架构信息
uname –r //查看内核 信息
有时候对linux进行配置或安装软件后,需要重启Linux系统才能使其生效。重启系统的命令为 reboot,但是有的配置直接使用命令就可以使其立即生效,例如:命令“source /etc/profile” 可使etc下的配置文件profile的改动信息即时生效。
cd user 切换到该目录下user目录
cd ../ 切换到上一层目录
cd / 切换到系统根目录
cd ~ 切换到用户主目录(root目录)
cd- 切换到上一个所在目录
mkdir /usr/test 创建/usr/test目录
pwd //查看当前目录路径(有时过多的操作而忘记当前位置,可用此命令查看当前路径)
pwd -P //显示出当前实际路径而非使用连接路径
find type f -print //查看当前目录下的文件,包括子目录下的文件
ls //显示当前目录下非影藏文件与目录
ls –a //显示当前目录下包括影藏文件在内的所有文件列表
ls -1 //当前目录下包括影藏文件在内的所有文件列表,以垂直方式分布列表。
ls -m //当前目录下包括影藏文件在内的所有文件列表,以水平方式分布列表,逗号隔开
ls -l|wc -l //用于统计当前文件夹中文件的数量。
命令:find 目录 参数
示例:查找/root下的与test相关的目录(文件) find /root -name ‘test*’
命令 :mv 目录名称 新目录名称
mv oldTest newTest
mv也可以对各种文件,压缩包等进行重命名操作
命令:mv 目录名称 目录的新位置
mv newTest /usr 在test下将newTest目录剪切到 /usr下面
命令:cp -r
目录名称 目录拷贝的目标位置 -----r代表递归拷贝
cp -r /usr/newTest /test 将/usr下的newTest拷贝到根目录下的test中
cp命令不仅可以拷贝目录还可以拷贝文件,压缩包等,拷贝文件和压缩包时不用写-r递归
命令:rm [-rf] 目录
示例:删除/usr下的newTest,进入/usr下使用rm -r newTest
示例:删除/test下的newTest而不需要询问强制删除,在/test下使用rm -rf newTest
rm不仅可以删除目录,也可以删除其他文件或压缩包,为了增强我们的记忆,无论删除任何目录或文件,都直接使用rm -rf 目录/文件/压缩包
touch /test/a.txt //在test目录下创建添加a.txt文件
(vi命令模式)
vi filename //打开filename文件
:w //保存文件
:w vpser.net //保存至vpser.net文件
退出:先按esc键进入退出模式,然后执行下面命令:
:q //退出编辑器,如果文件已修改请使用下面的命令
:q! //退出编辑器,且不保存
:wq //退出编辑器,且保存文件
:wq! //保存并退出编辑器
有的文件插入内容之后无法保存,可使用命令“:w!sudo tee %”强制执行。
还有一个vim命令模式,也是用来打开文件的,不同的是vim比较高级,可以视为vi的升级版本,vi适用于文本编辑,但是vim更适用于coding
rm //删除文件
rm -rf //删除文件夹
vi命令模式下执行下面命令后将进入插入模式,按ESC键可退出插入模式)
a //在当前光标位置的右边添加文本
i //在当前光标位置的左边添加文本
A //在当前行的末尾位置添加文本
I //在当前行的开始处添加文本(非空字符的行首)
O //在当前行的上面新建一行
o //在当前行的下面新建一行
R //替换(覆盖)当前光标位置及后面的若干文本
J //合并光标所在行及下一行为一行(依然在命令模式)
键入需要插入的信息之后,可以按ESC键,然后输入冒号和和保存退出命令。
形式:按ESC键,然后输入命令“:wq!”可强制保存并退出当前文件编辑器。
cat命令连接文件并打印到标准输出设备上,经常用来显示文件内容,例如:
cat m1 //在屏幕上显示文件ml的内容)
cat m1 m2 //同时显示文件ml和m2的内容)
cat m1 m2 > file //将文件ml和m2合并后放入文件file中,等于同事创建了新的文件file)
其他参数:
-n或-number //由1开始对所有输出的行数编号;
-b或--number-nonblank //和-n相似,只不过对于空白行不编号;
-s或--squeeze-blank //当遇到有连续两行以上的空白行,就代换为一行的空白行;
-A //显示不可打印字符,行尾显示“$”;
-e //等价于"-vE"选项;
-t //等价于"-vT"选项;
cat filname //正序查看 (场景:查看日志最近一次操作信息)
tac filename //倒序查看(场景:查看日志头部的工程启动信息信息)
tail filename //查看文件的末尾信息 (场景:查看最近一次日志变化)
tail -f filename //循环监控查看文件的末尾信息(场景:监控日志变化,常用)
linux 给文件改名的命令是mv命令,用来给文件或目录改名或将文件由一个目录移入另一个目录中,等同于DOS系统下的ren和move命令的组合,使用权限是所有用户。
格式
mv [options] 源文件或目录 目标文件或目录。
主要参数[options]
-i:交互方式操作。如果mv操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写,要求用户回答”y”或”n”,这样可以避免误覆盖文件。
-f:禁止交互操作。mv操作要覆盖某个已有的目标文件时不给任何指示,指定此参数后i参数将不再起作用。
选择参数
当选择参数类型是文件时,mv命令完成文件重命名,它将所给的源文件或目录重命名为给定的目标文件名。
实例:$ mv test.txt wbk.txt //将文件test.txt重命名为wbk.txt
.tar
tar xvf Filename.tar //解包
tar cvf Filename.tarDirname //打包
.gz
gunzip FileName.gz //解压1
gzip -d FileName.gz //解压2
gzip FileName //压缩
.tar.gz和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z
解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
.rar
解压:rar x FileName.rar
压缩:rar a FileName.rar DirName
CentOS中使用firewall工具管理防火墙,代替了原来的iptables,firewall的基本使用:
启动防火墙: systemctl start firewalld
查看防火墙状态: systemctl status firewalld
停止防火墙: systemctl disable firewalld
禁用防火墙: systemctl stop firewalld
例:防火墙开放/下发端口:
firewall-cmd --zone=public --add-port=8079/tcp --permanent
systemctl stop firewalld
systemctl start firewalld
linux防火墙默认打开,为了安全起见,防火墙一般不会关闭,linux系统的端口一般不对外全部开放,所以不太建议关闭防火墙,所以一般都采取下发开放个别端口的方法。上述三行命令首先添加开放的端口8079,然后关闭防火墙再重新打开防火墙,添加的端口开放才会成功。
例:防火墙回收端口:
firewall-cmd --remove-port=18081/tcp --permanent ##移除端口18081
firewall-cmd --reload ##重载防火墙配置,使其新规则生效
常用的firewall命令有:
firewall-cmd --state ##查看防火墙状态,是否是running
firewall-cmd --reload ##重新载入防火墙配置,比如添加规则之后,需要执行此命令可以刷新规则,如果开放了端口,可以使用此命令刷新规则
firewall-cmd --get-zones ##列出支持的zone
firewall-cmd --get-services ##列出支持的服务,在列表中的服务是放行的
firewall-cmd --query-service ftp ##查看ftp服务是否支持,返回yes或者no
firewall-cmd --add-service=ftp ##临时开放ftp服务
firewall-cmd --add-service=ftp --permanent ##永久开放ftp服务
firewall-cmd --remove-service=ftp --permanent ##永久移除ftp服务
firewall-cmd --add-port=80/tcp --permanent ##永久添加80端口
firewall-cmd --remove-port=80/tcp --permanent ##永久移除80端口
firewall-cmd --list-ports ##查看已经开放的端口
iptables -L -n ##查看规则,这个命令是和iptables的相同的
man firewall-cmd ##查看帮助
systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。
启动一个服务:systemctl start firewalld.service
关闭一个服务:systemctl stop firewalld.service
重启一个服务:systemctl restart firewalld.service
显示一个服务的状态:systemctl statusfirewalld.service
在开机时启用一个服务:systemctl enablefirewalld.service
在开机时禁用一个服务:systemctl disablefirewalld.service
查看服务是否开机启动:systemctl is-enabledfirewalld.service
查看已启动的服务列表:systemctl list-unit-files|grepenabled
查看启动失败的服务列表:systemctl --failed
查询时间 date
设置日期 date -s 02/18/2018
设置日期 date -s 10:12:50
set //查看本地shell定义的变量
env //查看环境变量
free //查看内存和交换区大小
/*显示结果的第二行中
(-buffers/cache) used内存数:第一部分Mem行中的 used – buffers – cached,反应被程序实实在在吃掉的内存量。
(+buffers/cache) free内存数: 第一部分Mem行中的 free + buffers + cached,反应现在系统可以被占用的内存量。
*/
strace //查看系统调用
lsof //查看所有打开文件
cat /proc/cpuinfo //查看CPU占用
crontab -e //定时任务修改,注意,crontab不能获取环境变量,也不支持相对目录,必须使用绝对目录,或者手动cd到工作目录
tail /var/log/cron //查看crontab日志
du //查看文件大小
ls -lht //查看文件大小
top //linux版本的任务管理器
which python //查看安装程序位置
tty //查看当前终端号
find ~ -iname “*.git”(mac) //查找文件
find . -name “*.git”(linux) //查找文件
netstat -tunlp //查看进程端口等信息
kill -pid //干掉进程
ps -ef |grep tomcat //查看进程状态
ps //显示当前活动的进程
-e //显示所有进程
-f //全格式
-l //长格式
–forest //显示进程树
中断当前执行过程的命令 contrl+C
查看某个端口:lsof -i:18081
杀死端口,即干掉端口对应的进程,也就是kill 对应的进程号:kill -9 73917
查看uuid的三种方法:
命令查看:blkid
文件查看:ls-l /dev/disk/by-uuid
命令查看:vol_id/dev/sda1
1.ifconfig -a 其中 HWaddr字段就是mac地址
2. cat/sys/class/net/eth0/address 查看eth0的mac地址
3. cat /proc/net/arp 查看连接到本机的远端ip的mac地址
4. 程序中使用SIOCGIFHWADDR的ioctl命令获取mac地址
注意:要和ifcfg-eth0中device和mac地址的eth0对应,mac地址也要对应
5.查看网卡物理地址(mac地址): ip addr
一般的linux系统都是默认安装了ssh服务,ssh的服务名一般都是sshd:
service sshd start //开启ssh服务
service sshd stop //停止ssh服务
service sshd restart //开启ssh服务
或者使用使用带有路径的脚本:
/etc/init.d/sshd start
/etc/init.d/sshd stop
/etc/init.d/restart
sync //将数据由内存同步到硬盘中
shutdown //关机指令,你可以man shutdown 来看一下帮助文档
//例如你可以运行如下命令关机:
shutdown –h 10 ‘This server will shutdown after 10 mins’
//这个命令告诉大家,计算机将在10分钟后关机,并且会显示在登陆用户的当前屏幕中
Shutdown –h now //立马关机
Shutdown –h 20:25 //系统会在今天20:25关机
Shutdown –h +10 //十分钟后关机
Shutdown –r now //系统立马重启
Shutdown –r +10 //系统十分钟后重启
reboot //就是重启,等同于 shutdown –r now
halt //关闭系统,等同于shutdown –h now 和 poweroff
telnet 10.5.146.2 8020 //查看端口应用是否可以访问
//下面两句话就可以实现一个简单的网络聊天程序
nc -l 1234
nc localhost 1234
nc -v 10.5.146.2 8021 //检查远程计算机端口是否开放
time命令,time后面跟一条可执行的指令,time负责测算这条指令的执行时间,如:time ps aux 表示执行ps aux,并计算这条指令的执行时间,结果会先展示ps的执行结果,然后隔一行展示如下结果:
real 0m0.032s //实际的时钟时间
user 0m0.004s //进程在用户模式使用的时间
sys 0m0.016s //进程在内核中使用的时间
real是后两者的和加上进程被阻塞的时间(如其他进程的时间片和IO阻塞)
cd /etc/sysconfig/network-scripts/ //目录下的文件写入时 出现 E121:无法打开并写入文件解决方案
解决方案:
1. 保存的时候用:w !sudo tee % ,表示强制创建一个文件并写入。
2. 输入密码即可
Linux系统的root账户不允许远程连接,修改配置重启可解决(因为root账户的权限更多,使用很方便,一般都使用root账户连接)。
典型例子:Xshell使用root用户连接Ubuntu14.04时,提示SSH服务器拒绝了密码,请再试一次
1.在Linux OS中root账户下键入:"vim/etc/ssh/sshd_config",可进入配置文件,有很多内容。
2.找到如下配置项:
# Authentication:
LoginGraceTime 120
PermitRootLogin prohibit-password
StrictModes yes
改为:
# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
点击ESC返回键,输入“:wq!”保存并退出。
3.重启 SSH 服务,输入命令:“servicesshd restart”或 “/etc/init.d/sshdrestart”即可。
①显示当前所在位置:pwd
②搜索命令: grep 要搜索的字符串 要搜索的文件
grep to sudo.conf //搜索/usr/sudo.conf文件中包含字符串to的行
grep to sudo.conf --color //搜索/usr/sudu.conf文件中包含字符串to的行 to要高亮显示
③管道命令: |
将前一个命令的输出作为本次目录的输入
ps -ef | grep system //查看当前系统中所有的进程中包括system字符串的进程
④查看进程 ps -ef
查看当前系统中运行的进程
⑤ 杀死进程 kill -9 进程的pid
⑥网络通信命令
ifconfig 查看当前系统的网卡信息,比如查看ip地址
⑦连接情况
ping 192.168.1.103 查看与某台机器的连接情况
⑧查看当前系统的端口使用
netstat -an
1.首先,在个人电脑上安装VMware,类似于自己的电脑上有一台电脑或者叫服务器,即提供了一台虚拟机。
2.在VMware上安装CentOS7或Linux其他系列的操作系统,即给服务器安装系统。一般服务器都会使用Linux,至于原因,很大程度上在于它的多用户、多任务、良好的网络支持,以及重要的内核优势(使用很小的内存便足以流畅的工作)特性。
3.在本地电脑上,安装Xftp和Xshell用于连接Linux,Xftp用于查看传输linux文件,Xhell则类似于linux系统的远程界面一样,可以操作linux系统。
4.可以在服务器Linux系统上部署项目,如在Linux安装Tomcat,然后将一个完成可运行的Maven项目打包为war包,然后部署到Linux的Tomcat上(解压war包到Webapps目录下)。