什么是linux
linux 就是一种操作系统,通俗的讲就是一种能够管理计算机硬件,并且提供操作这些硬件的软件接口的软件。相较于windows, 功能虽然相似,但底层的实现机制完全不同;对上层软件提供的访问接口完全不同;它的构造更简单,更稳定,因此主要用在服务器领域。
常见的发行版本有
RedHat(红帽): 红帽企业版 RHEL (red hat enterprise linux)
Fedora: 免费桌面版
Centos: 基于红帽企业版的一个社区免费开源版本,主要应用于服务器
Ubuntu: 有桌面版、服务器版、手机版
linux文件系统
root: 当前登录的用户
centos: 机器的主机名(机器在网络中的一个标识)
~ :当前所处的目录(root用户的主目录, /root 普通用户的主目录在 /home 下)
linux的文件系统目录结构
目录 | 含义 |
---|---|
/ | 顶层目录 |
/bin | 存放一些系统可执行程序(文件) |
/sbin | 存放一些超级用户root才能运行的程序(文件) |
/etc | 存放系统配置文件(环境变量配置文件/etc/profile, ip的配置文件/etc/sysconfig/network-script/ifcfg-eth0) |
/home | 存放普通用户的主目录的父路径 类似window的用户目录 |
/root | 超级用户root的主目录 或者 ~ 超级用户和普通用户不一样 |
/opt | 用于安装额外软件的目录(类似于c:/program files) |
/usr | unix shared resources 软件的资源(库、配置文件)共享目录 |
/dev | 存放设备文件(linux中,访问一个设备(光驱、显卡等硬件),也用访问文件的形式)的目录 |
/tmp | 系统临时目录(linux重启后,可能会清除tmp中的文件) |
/var | 存放一些软件运行过程中易变的内容(日志文件) |
目录操作命令:
-
切换目录
cd 你要去的目录
注意:路径的标识方法有两种:绝对路径 和 相对路径
绝对路径:路径从 / 开始写起的
相对路径:相对于当前所在的路径开始写起的: …/ 代表上一级 ./ 代表当前目录 (通常可以省略)
cd后面什么也不跟,就是进入的主目录
举例:由install目录,进入根目录下的tmp(相对路径写法)
-
查看目录
ls 你要查看的目录
d: 表示这是一个文件夹
-: 表示这是一个文件
l:表示软连接文件(link)
rwxr-xr-x:是这个文件的访问权限信息 r 读 w 写 x 执行
root root : 表示这个文件的属主:所有者,所属组
1256:大小(文件夹的这个值并不是文件夹的内容大小)
12月 15 19:34 :这个文件的最后修改时间
ls --help
查看详细用法
ls ./
查看当前目录,可以省略 ./
ls -l 路径
显示详细信息,在centos中 可以写成 ll
ls -a 路径
显示隐藏文件
ls -al 路径
显示详细信息和隐藏文件
ll –h 路径
就会把文件的大小加上单位
ls ./ > ./test.txt
这个命令会产生什么效果?
先创建文件,再把ls后的内容加到test.txt文件中 -
显示路径
pwd
显示当前所在的目录的全路径 -
创建文件夹
mkdir 路径
mkdir /test
在根目录下创建文件夹test
mkdir ./test
在当前目录下创建文件夹test
mkdir -p ./aa/bb
一次性创建多级目录 -
移动(改名)文件或文件夹
mv 源路径 目标路径
mv ./aa ../
将当前目录下的aa移动到上级目录
mv /root/aa/bb /root/
将/root/aa下的bb移动到/root下
mv ./install.log ./a.log
改名
mv ./haha.txt ./aaa/
表示将haha.txt移动到aaa目录下去
mv ./haha.txt ./aaa
如果aaa是一个已经存在的目录,则是移动到这个目录中去,如果aaa不存在,则是将haha.txt改名成aaa,所以移动的话,最后面最好加上“/” -
删除文件或文件夹
rm 路径
rm a.log
删除当前目录下的a.log文件,它会提示你要删除文件吗?
rm -f b.log c.log
加上-f 强制删除,没有提示
rm -r 路径
递归处理,将指定目录下的所有文件与子目录一并处理
rm -rf ./oo
-r 递归删除 -f 强制不用提示
rm –rf *
删除当前目录下的所有文件
文件内容操作命令
-
创建文件
touch 路径/文件名
touch ./test.txt
当前目录下生成一个名叫test.txt的空文件
使用echo输出信息重定向到一个指定文件中,文件不存在则创建
echo “hello world” > /root/test.txt
输出hello world到 /root/test.txt ,内容结尾会自动加一个回车符,若原文件存在且存在内容>
会覆盖内容
>>
追加 echo “hello linux” >> /root/xx.txt
利用文件编辑器,编辑内容后,保存为文件 -
编辑文件内容
vi 路径
打开后,vi 程序处于接收命令的状态,需要按一个命令键 i 进入编辑模式
编辑完内容后,按ESC键退出编辑模型,回到命令模式
在命令行模式下:
:wq
保存退出
:w
保存
:q
退出
:wq!
强制保存且退出
:q!
强制不保存,并退出
dd
删除光标所在的1行
3dd
删除光标所在行开始的3行
yy
复制光标所在的行
p
粘贴
u
(undo)撤销
ctrl+l
清屏(小写的L)或者clear
-
显示文件内容
cat/more/less/tail/head 路径
cat /root/xx.txt
一次性将文件全部显示出来
cat ./xx.txt >> ./yy.txt
这个命令产生什么效果?
将cat出来的内容追加到yy.txt中
cat ./xx.txt > ./yy.txt
这个命令产生什么效果?
将cat出来的内容加到yy.txt中,会将yy.txt中的内容覆盖掉
more /root/test.txt
可以分页查看文件内容,空格:向下翻页 ; 退出: q
less /root/test.txt
可以分页查看文件内容;
向下翻页: 空格
向上翻页: b (back)
向下一行: ↓
向上一行: ↑
跳到文件头:gg
跳到文件末: shift+g
搜索关键字:
按 /,输入关键字,然后回车
往后匹配: n
往前匹配: N
退出: q
tail -20 /root/a.log
查看文件尾部的20行(不带行数的话,默认看10行)
tail –f /root/a.log
## 实时刷新显示a.log文件中尾部新增的内容
head -20 /root/a.log
查看文件头部的n行 -
文件查找
find 搜索文件系统节点 文件夹/链接/文件
find ./ -name "*.txt"
查找当前目录下所有.txt结尾的文件
find ./ -type d -name "abc"
查找当前目录下叫abc的文件夹
find ./ -type f -name "abc"
查找当前目录下叫abc的文件(type表示要搜索的对象的类型 f:文件)
find ./ -maxdepth 1 -name "H*"
maxdepth表示要搜索的层数(默认会递归查到最里层)
find xxx -exec xxx
搜索到文件后,执行一个操作
find ./ -name "*.txt.dat" -exec rm -rf {} \;
搜出文件并删除
find ./ -name "*.txt.dat" -exec mv {} /databackup \;
搜出文件并移动
grep 搜索文本内容
grep "public" HelloWorld.java a.txt
“public”要搜的关键词 HelloWorld.java a.txt 表示要搜索的目标文件
which 搜索命令
which java
压缩解压缩操作
打包tar:将多个文件打入一个包文件(tar文件; tar ball)
打包:tar -cf doc.tar ./a.txt ./b.txt ./*.dat(路径)
将a.txt,b.txt *.dat打入doc.tar包
解包:tar -xf doc.tar
压缩:
gzip a.txt b.txt
分别压缩成a.txt.gz, b.txt.gz
gzip doc.tar
得到 doc.tar.gz
解压:
gzip -d doc.tar.gz
得到doc.tar
打包和压缩一次性完成(通常记住此命令即可):
tar -zcf doc.tar.gz(也可以写成*.gz) ./a.txt ./b.txt ./c.txt
将abc三个文件打包,然后压缩
解包和解压缩可以一次性完成:
tar -zxf doc.tar.gz
将doc.tar.gz解压,然后解包
tar -zxf doc.tar.gz -C /home/
将doc.tar.gz解压到/home目录下去
linux的网络配置
ip地址配置:修改配置文件 /etc/sysconfig/network-scripts/ifcfg-eth0
vi /etc/sysconfig/network-scripts/ifcfg-eth0 修改 ONBOOT=yes
然后,重启网络服务service network restart
,让配置文件生效:
网络服务重启完成后,用ifconfig
查看动态获取的ip地址
修改主机名
查看主机名:hostname
修改主机名:vi /etc/sysconfig/network
添加 HOSTNAME=centos
改完配置文件后,主机名不会立即生效,需要重启linux
不重启的话可以利用 hostname centos 立即生效;
但是,登录会话的提示符还是没有刷新,可以退出登录exit
,重连(连按两次回车);
Centos7 中也可以使用hostnamectl set-hostname xxx
进程管理
查看进程
ps -ef
显示系统中当前所有的进程
jps
jps不是linux的内置命令,它是jdk中的程序,用于显示当前的java进程
杀进程
杀死进程 kill
kill -9 4733(进程号)
top
实时监控系统中的进程及资源使用情况,按q
退出
进程挂起
Ctrl+z :挂起一个进程,该进程就暂停运行了,并放入后台
如果需要恢复,jobs
看被挂起的进程,然后fg 1(job ID)
进程后台运行
command &
放入后台运行,但是如果这个command会往控制台(标准输出)输出信息,它还是会继续输出的,会干扰我们的其他工作。可以对command的输出做重定向command > ./xx.log &
将程序的所有输出重定向到xx.log,并放入后台运行
java Hello 1>./std.out 2>./err.out &
将程序的标准输出重定向到std.out,错误输出重定向到err.out, 并放入后台运行
1表示标准输出2表示错误输出
java Hello 1>/dev/null 2>/dev/null &
java Hello 1>/dev/null 2>&1 &
将程序的标准输出重定向到/dev/null(黑洞),写入这里内容都会丢失。错误输出重定向到标准输出, 并放入后台运行
管道|
:把管道左边的命令的输出结果内容,作为右边的命令的输入流
ps -ef | grep "tomcat"
在ps -ef 输出的结果中查找 ”tomcat“
ls *.txt | less
将ls *.txt的结果用less查看,这样数据多的时候可以翻页
ll | cat
将 ll 的结果用cat查看
管道转输入参数
ls 1.txt 2.txt | xargs cat
产生效果: cat 1.txt 2.txt
ls *.txt | xargs rm -rf
产生效果: rm -rf 1.txt 2.txt
find ./ -name *.txt -exec rm -rf {} \;
产生效果: rm -rf 1.txt
rm -rf 2.txt
用户管理
useradd lee
添加用户lee 该用户主目录在/home/lee下
passwd lee
修改用户lee的密码
输密码:123
确认密码:123
groupadd
创建一个新的用户组
groupadd good
创建一个名为good的用户组
userdel lee
删除用户lee,保留用户的主目录
userdel -r lee
删除用户lee,且删除用户的主目录
usermod -g root lee
将lee改到root组,小g指定的组,是用户的主组
usermod -G good lee
给lee用户添加到一个额外的组good
groups lee
查看lee用户属于哪个组
服务管理
系统中运行的一些常驻后台的程序;
network服务:是linux的网络功能服务
service network restart
重启名为network的服务
iptables服务:是linux的防火墙服务
service iptables start
启动名为iptables的服务
service iptables stop
停止名为iptables的服务
chkconfig iptables off
关闭iptables服务的开机自启
chkconfig iptables on
开启iptables服务的开机自启
service iptables status
查看名为iptables的服务的状态
firewall-cmd --state
centos7查看防火墙状态
systemctl stop firewalld.service
停止firewall
systemctl disable firewalld.service
禁止firewall开机启动
文件权限管理
linux中不同用户对不同文件可以拥有不同的访问权限
linux中的文件的访问权限描述形式:
r:表示可读(对文件:能否读取内容; 对文件夹:能否ls)
w:可写(对文件:能否修改内容;对文件夹:能够在文件夹里面创建或删除文件)
x:可执行(对文件:能否运行;对文件夹:能否cd进去)
r w x (拥有者 )r - x( 所属组)r - x(其他人)
install这个文件夹,所有者是root,所属组是root
root用户对install的权限是:rwx 可读可写可执行
root组对install的权限是:r-x 可读可执行,不可写
其他人对install的权限是:r-x 可读可执行,不可写
chmod 修改文件权限
增加/取消权限:
chmod u+rwx aaa
对aaa文件夹添加所有者对它的rwx权限
chmod g+r aaa
对aaa文件夹添加所属组对它的r权限
chmod o-rw aaa
对aaa文件夹取消其他人对它的rw权限
chmod +x aaa
对aaa文件夹添加所有人对它的x权限
更简洁的办法:
比如,我想把aaa文件夹的权限改成 rw-rw-rw-
上面的3组权限可以用二进制表示:110 110 110
进而,上面的二进制,可以看成3个十进制数:6 6 6
那么,就可以用chmod命令一次性修改成目标权限:chmod 666 aaa
chown 修改文件的属主(所有者,所属组)
chown lee:good ./a.txt
## 将a.txt文件改成lee用户,good组来拥有
但这个修改属组的操作,只能是root才能进行
域名映射配置
vi /etc/hosts
192.168.137.10 centos 可以将IP映射到centos上
RPM包管理yum安装
redhat(红帽)制定了一个软件包发布的标准:RPM(redhat package managment)
安装rpm -ivh xx.rpm
卸载rpm -e xx.rpm
rpm在安装软件时,需要我们自己去解决依赖,非常麻烦!!!
yum
rpm的自动化依赖管理工具,可以从中央仓库获取依赖软件包(类似于java中用maven)
yum从哪里知道哪里有软件包仓库: /etc/yum.repo.d/*.repo
yum search xxx
从仓库中搜索软件包
yum install xxx
安装软件包
yum repolist xxx
查看当前所配置的所有库
yum list
查看*.repo中配置的仓库中的所有软件包
yum list | grep tomcat
看仓库中有没有tomcat (yum search tomcat
)
yum update
更新系统上的所有rpm包安装的软件
yum clean all
清除yum在本地缓存的库索引
yum erase xxx
卸载一个软件
本地yum库配置
- 局域网内部的一个web服务器,里面放了很多rpm软件包
- 本地文件夹,里面放了很多的rpm软件包
centos的安装光盘其实就是一个yum仓库
具体实现步骤:
i) 在linux系统中挂载一个dvd安装光盘到/mnt/dvd
补充: linux系统对外部存储的访问
linux系统中所有的存储设备,都需要“挂载”到文件系统中,才能访问存储设备中的文件
mount 设备 /文件系统目录
mkdir /mnt/dvd
mount -t iso9660 -o loop /dev/cdrom /mnt/dvd
(前提是,这台linux的光驱中已经插了光盘(iso镜像文件),并连接)
ii) 进入yum工具的配置文件目录
cd /etc/yum.repo.d/
将内置的仓库配置文件全部改名
rename .repo .repo.bak ./*
然后,拷贝一个配置文件做样本
cp CentOS-Base.repo.bak CentOS-localDvd.repo
然后修改vi dvd.repo
改完后,用yum去安装软件时,它都会从/mnt/dvd中获取软件包
修改yum源为国内源
- 首先备份系统自带yum源配置文件
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
- 查看CentOS系统版本
lsb_release -a
- 下载163或者ailiyun的yum源配置文件到/etc/yum.repos.d/
CentOS7
网易wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
阿里云wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
CentOS6
网易wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
阿里云wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
- 运行yum makecache生成缓存
yum makecache
这时候再更新系统就会看到以下mirrors.aliyun.com信息
时间管理
查看时间 date
date -d "1 day ago" +%Y-%m-%d
获取前一日的日期(两天 、三年、分钟小时秒等依此类推)
date -d "+1 day" +%Y-%m-%d
获取后一日的日期
设置时间 date -s
date -s "2017-12-25 09:38:40"
修改时间
网络时间同步ntpdate 0.asia.pool.ntp.org
ntpdate在系统中默认没有安装,需要先安装:
yum search ntpdate
搜索出软件包,再yun install xxx...
安装
其他
ctrl+alt+ F1
ctrl+alt+ F2
开启多窗口
如果要使用 netstat 或者 iptables发现命令不存在 yum install net-tools