一、Linux介绍
Linux 是一种自由和开放源码的类 UNIX 操作系统。
Linux 是在 1991 由林纳斯·托瓦兹在赫尔辛基大学上学时创立的,主要受到 Minix 和 Unix 思想的启发。
Linux 遵循 GNU 通用公共许可证(GPL),任何个人和机构都可以自由地使用 Linux 的所有底层源代码,也可以自由地修改和再发布。
由于 Linux 是自由软件,任何人都可以创建一个符合自己需求的 Linux 发行版。
目前主流的 Linux 版本有:
- Debian(及其派生版本Ubuntu、Linux Mint)
- Fedora(及其相关版本Red Hat Enterprise Linux、CentOS)
- openSUSE
- 等等
本文基于CentOS为大家介绍 Linux 系统的使用。
安装CentOS参考我的上一篇博文:Linux01-虚拟机安装(VMware15+CentOS7)
二、Linux目录介绍
Linux系统目录和Windows系统目录是有区别的。
使用命令ls
可查看:
[root@localhost ~]# ls /
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
-
/bin:
bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。 -
/dev :
dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。 -
/home:
普通用户的主目录,在 Linux 中,每个用户都有一个自己的家目录,存储在home目录中,一般该目录名是以用户的账号命名的。 -
/lib64 和 /lib:
在centos中,lib64文件夹用于存放64位系统标准程序设计库。
lib文件夹用于存放标准程序实际库,也叫动态链接共享库,作用类似windows中的“.dll”文件。 -
/mnt:
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。 -
/proc:
proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。 -
/run:
是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。 -
/srv:
该目录存放一些服务启动之后需要提取的数据。 -
/tmp:
tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。 -
/var:
var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。 -
/boot:
这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。 -
/etc:
etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。 -
/media:
linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。 -
/opt:
opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。 -
/root:
该目录为系统管理员,也称作超级权限者的用户主目录。 -
/sbin:
s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。 -
/sys:
这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。
sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。
该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。 -
/usr:
usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。- /usr/bin:
系统用户使用的应用程序。 - /usr/sbin:
超级用户使用的比较高级的管理程序和系统守护程序。 - /usr/src:
内核源代码默认的放置目录。
- /usr/bin:
三、基础命令
前提:
- Linux命令区分大小写
- 语法:
命令 [选项1] [选项2]... [参数1] [参数2] ...
基础命令:
1.uname -r :查看内核版本,例如:2.6.32-431.el6.x86_64
Linux系统 = 内核 + 外围软件(收费)
2:主版本号
6:次版本号
32:修订版本号
431.el6.x86_64:红帽公司修订号
2.cat /etc/redhat-release : 查看系统版本
3.hostname :查看主机名
4.ifconfig:查看所有网卡信息
ifconfig 网卡名 :查看指定网卡信息
5.ifconfigcd 网卡名 ip : 设置临时ip(重启就没了)
6.clear :清屏
7.重启:shutdown -h now
关机:reboot
8.date :查看系统时间
四、文件和目录命令
1.pwd:查看当前的所在目录
2.ls:查看当前工作目录的内容(简略,只有名字)
1. ls -l:查看详情,等同于:ll命令
2. ls -lh [/目录]:查看详情(包含大小)
3. ls -a : 查看所有文件(包含隐藏文件)
ls -A :同上,去掉 . 和 .. 的结果
4. ls -l -d [/目录]: 显示目录的属性,也可以使用:ls -ldh
5. ls -R [/目录]:递归显示目录下的所有文件和目录
3.du:查看文件大小
du -sh /tmp/1.txt
4.cd:用于改变当前工作目录
1. cd 或者 cd ~ 都是回到当前用户的家目录
2. cd /路径 切换到指定目录
3. cd . 当前目录
4. cd .. 返回上一级 ,例:cd ../.. 返回父级的父级目录
5. cd - 切换到 上一次 的目录
5.创建文件夹
mkdir 文件夹名
mkdir -p /文件夹名/文件夹名 (创建多级目录)
6.创建文件 / 修改文件时间
touch 文件名
--如果文件名不存在就创建文件,如果存在就修改时间
7.复制文件
不改名复制文件: cp 源文件 目标目录
改名复制文件: cp 源文件 目标目录/文件名(改名后的文件名)
8.复制文件夹以及内容
cp -r 源文件夹 目标目录
cp -r 源文件夹1 源文件夹2 源文件1 目标目录 --将 “源文件夹1 源文件夹2 源文件1” 复制到 “目标目录”下
cp /home/wwb/* /usr/123 --复制wwb下的全部文件 到 123
9.删除文件
rm [-f] 文件名 f:不提示(确定要删吗?),直接删
10.删除文件夹(以及内容)
rm -rf 文件夹名
11.移动
文件夹:mv 源目录 目标目录/
文件: mv 源文件 目标目录
文件改名:mv 源文件 目标目录/改名的文件
12.通配符:
* 匹配任意多个字符 例:ls -l /tmp/*
? 匹配任意单个字符 例:ls -l /tmp/f?.txt
[] 匹配连续多个字符中的一个 例:ls -l /tmp/f[0-9].txt [A-Z] [a-z]
{} 匹配不连续多组字符 例:ls -l /tmp/f{1,12,a}.txt
13.查看文件的内容
cat [-n] 文件名 : 显示内容,n:并显示行号,适合查看小文件
more 文件名 : 分屏显示,适合查看大文件,空格翻屏
less 文件名 : 更好用,上下键滚动
?关键字:向前查找,/关键字:向后查找,按 q 退出
head -n 2 文件名: 查看头几行
tail -n 3 文件名: 查看尾几行 * 不指定行号,默认10行
14.管道 |
命令1 | 命令2 : 将命令1的输出结果,作为命令2的输入去执行(命令2就不需要参数了)
15.统计 wc
wc -l 文件名 : 统计文件有多少行
wc -l /etc/passwd : 统计当前系统有多少个用户
16.输出重定向 >
eg: ls -l /root > /tmp/1.txt --将命令执行的结果,写入到文件中。(文件不存在创建后写入,存在清空再写入)
ls -l /root >> /tmp/1.txt --追加写入
特殊用法:
# > /tmp/abc.txt --清空文件abc.txt
17.过滤:
grep [选项] 关键字 目标文件 :输出包含指定字符的行
选项: -i 忽略大小写
-v 取反(返回不满足条件的行)
--color 为关键字加颜色
关键字: ^a -- 以a开头
a$ -- 以a结尾
^$ -- 匹配空行
-E -- 匹配多个条件(或者关系)
案例:
grep root /etc/passwd --查找passwd中包含关键字root的行
grep -v root /etc/passwd --查找passwd中不包含关键字root的行
grep -v '^#' /etc/passwd | grep -v '^$' --查看去掉 注释 和 空行 后的内容(利用管道)
grep -vE '^#|^$' /etc/passwd --同上(利用-E)
五、vim
vim 文本编辑器
1.命令模式:只能查看,不能编辑(默认的模式)
vim /目录/文件 --文件存在就打开,不存在就创建并打开
--光标行内跳转: ^ --行首 $ --行尾
--光标行间跳转: 1G --头 G --尾 nG --到第n行
--翻页:pgup ,pgdn
--复制:yy --复制当前光标所在行
nyy --复制当前光标往下n行
--粘贴: p --光标所在处插入
--删除:x --删除光标所在的字符
d^ --删除光标到行首
d$ --删除光标到行尾
dd --删除光标所在行
ndd --删除光标往下的n行
2.输入模式:可以编辑修改
进入命令模式后,输入 i,o 就进入输入模式
i:在当前光标处插入字符
o:在当前行下添加一行空行
--编辑完成后,返回命令模式: esc 键
3.末行模式:保存退出
进入命令模式后,输入 如下
: --保存并退出
:w --保存
:q --退出
:wq --保存并退出
:x --保存并退出
:##! --强制执行,例: :q! 强制退出
:w /目录/文件 --另存为到指定的文件中
:r /目录/文件 --将指定的文件内容读进来
:!命令 --可以不退出编辑器就能执行命令
--字符串的查找
/ww --向下查找字符串“ww”
?ww --向上查找字符串“ww”
n/N --跳至下一个/上一个找到的字符串
--字符串查找替换
:s/old/new --替换光标坐在行第一个old为new
:s/old/new/g --替换光标坐在所有的old为new
:n,m s/old/new --替换n-m行的第一个old为new
:n,m s/old/new/g --替换n-m行的所有的old为new
:%s/old/new --替换整个文档每一行的第一个old为new
:%s/old/new/gc --替换整个文档的old为new,c的作用是替换前提示
--撤销
u/U --撤销最近一次编辑/撤销当前行的编辑
ctrl+r --反撤销(取消前一次的操作)
--显示/取消行号 :set nu/nonu
--高亮显示 :syntax on/off 默认开启
--查询结果高亮 :set hls/onhls 默认开启
--自动缩进 :set autoindent/on autoindent
--编辑完成后,返回命令模式: esc 键
4.如果想永久打开行号,命令行下输入:
# vim ~/.vimrc
i
set nu
:wq
六、网络设置
1.查看ip
ifconfig 网卡名
ifconfig 网卡名 ip地址 --设置临时ip(重启失效)
2.永久配置ip
#vim /etc/sysconfig/network-scripts/网卡名
DEVICE=eth0 #设备名
HWADDR=00:0C:29:88:97:B6 #mac地址
TYPE=Ethernet #以太网类型
UUID=c45ea00a-d9b2-4606-a735-dc3b5a 7a99d3 #唯一标示
ONBOOT=no #当前文件是否可以使用,no--系统启动的时候不加载,yes--加载
NM_CONTROLLED=yes
BOOTPROTO=dhcp #获取ip地址的方式,dhcp--自动获取,none/static--都表示手动配置
IPADDR= #ip
NETMASK= #子网掩码
GATEWAY= #默认网关
DNS1= #dns --dns还可以在 /etc/resolv.conf 中设置
DNS2=
3.关闭防火墙
1.临时命令
# iptables -L //查看防火墙
# iptables -F //关闭防火墙
2.永久关闭防火墙
# chkconfig iptables off //让防火墙服务不随系统的启动而启动
# /etc/init.d/iptables save //将当前防火墙状态保存
# service iptables save //保存防火墙设置的另一种方式,效果同上
3.关闭 selinux
# vim /etc/sysconfig/selinux
将文件中的
SELINUX=enforcing 改为 SELINUX=disabled
更改后重启生效。
--临时更改:setenforce 0
4.网络参数查看
1.netstat -anptu //查看网络链接
2.netstat -ln | grep :端口 //查看指定端口是否被开启
3.netstat -tulnp | grep 服务名 //查看指定服务所监听的端口
4.nslookup //域名解析
5.vim /etc/sysconfig/network //查看当前主机名
HOSTNAME=xxxxx //如果想改,更改HOSTNAME即可(reboot生效)
6.hostname 主机名 //临时修改主机名的方法
7.vim /etc/hosts //主机映射文件:记录主机名和ip的映射关系
windows中的文件位置是:C:\Windows\System32\drivers\etc\hosts
8.常见端口
服务 协议 端口
web服务 tcp 80
telnet服务 tcp 23
ssh tcp 22
ftp tcp 20/21
smtp tcp 25
pop4 tcp 110
imap tcp 143
dns tcp/udp 53
# vim /etc/services 记录服务与端口的信息的文件
七、压缩和解压缩
1.操作单个文件 --对现有文件直接操作,操作后,原文件被更改
1.gzip
压缩:
gzip /目录/1.txt --压缩后在原目录下生成 1.txt.gz 的文件
解压:
gzip -d /目录/1.txt.gz
2.bzip2
用法一样,压缩效率更高,压得更小
2.目录打包 --打包不是压缩
tar -c --打包
-x --解包
-f --必须要
-C --指定解包位置
-v --输出信息
-z --调用gzip压缩
-j --调用bzip2压缩
例:
打包:tar -cvf /tmp/111.tar /tmp/111 --将111打包为111.tar
解包:tar -xvf /tmp/111.tar -C /opt/ --将111.tar解压到opt下
打包并压缩:
tar -zcvf /tmp/111.tar.gz /tmp/111
解包并解压:
tar -zxvf /tmp/111.tar -C /opt/
八、环境变量
1.查看PATH
echo $PATH --查看变量值:echo 变量名
2.修改PATH
PATH=$PATH:/路径/ --临时修改
vim /root/.bash_profile --永久更改
...
source /root/.bash_profile --立即生效
3.which 根据PATH的路径去查找
例如: which shutdown 返回:/sbin/shutdown
九、SSH
Linux远程访问 - SSH
前提:telnet 远程访问 是明文的
SSH 远程访问 是加密的(Linux默认安装了SSH,直接用)
1.Linux中访问另一台Linux
ssh root@176.202.0.152
或者:ssh -l root 176.202.0.152
ssh -p 8431 root@176.202.0.152 --端口不是默认的22时使用
# 提示是否保存会话:y/n
# 等待一会儿
# 输入密码,即可连接成功
# exit 退出
修改ssh默认端口:
vim /etc/ssh/sshd_config
...
Port 8431 (默认22)
重启服务:service sshd restart
2.远程拷贝:scp
拷贝文件:
上传:scp /源目录/源文件 root@ip:/目标目录/ --默认22端口
下载:scp root@ip:/目标目录/目标文件 /本地目录/
* 如果端口改了:
scp /源目录/源文件 root@ip:/目标目录/
scp -P 8321 root@ip:/目标目录/目标文件 /本地目录/
拷贝目录:
上传:scp -r /本地目录 root@ip:/目标目录/
下载:scp -r root@ip:/目标目录 /本地目录/
十、权限
1.用户分类
1.超级管理员 root uid = 0 root的家目录:/root
2.普通用户 uid >= 500 普通用户的家目录:/home/XXX
3.系统用户--不是人为创建的 uid 1~499
2.不同文件保存账户不同信息
1.保存账户基本信息的文件
/etc/passwd --每个用户记录一行,用:分割为7段
2.保存账户密码信息的文件
/etc/shadow --每个用户记录一行,用:分割为9段
1.创建用户:
useradd [选项]
-u 指定uid
-d 指定家目录
-s 指定使用的shell
-e 指定过期时间
-g 指定主组(只有一个),没有指定时,默认新建一个跟用户名一样的组
-G 指定附加组(可以多个)
例:useradd 用户名 --创建用户
useradd -d /opt/stu01/ 用户名 --创建用户并指定家目录
2.为指定账户设置密码 密码文件:/etc/passwd
passwd [选项]
passwd --为当前用户更改密码
passwd 账户名 --设置指定用户的密码
passwd -d 账户名 --清空密码,无密码直接登录
passwd -S 账户名 --查看是否被锁定
passwd -l 账户名 --锁定,用户无法登陆
passwd -u 账户名 --解锁
passwd --stdin 账户名 --通过管道设置密码,和管道 | 联合使用
例:echo "123" | #passwd --stdin 账户名
3.更改现有用户属性
usermod -u [账户名] -g [组] -d [家目录] -s [指定使用的shell]
4.删除用户
userdel -r 用户名 -r:连同主目录一些删除 [可选]
3.组别
1./etc/group 组的账户文件
2./etc/gshadow 组的密码文件
3.创建组
groupadd 组名
4.删除组
groupdel 组名
4.命令别名
vim ~/.bashrc
...
alias myls='ls -lh' --执行myls等价于 ls -lh
5.权限(3个)-- 用户,用户组,其他人
可读取:-read 4
可写入:-write 2
可执行:-excute 1
归属关系:
--所有者: -user
--所属组: -group
--其他用户:-other
--所有用户:-all
查看权限:ls -l
---------------------------------------------
更改权限:
方式1: 数字方式
chmod 数字 文件或目录 *文件时 -R,递归设置
数字:user group other
r w x r - x r - x
4 2 1 4 0 1 4 0 1
7 5 5
例子:
sudo chmod -R 777 文件夹
方式2:
u:用户,g:组,o:其他人
+:增加权限
-:减小权限
=:设置成指定的权限
例子:
sudo chmod u+rwx,g=r,o-rwx 文件名 #该文件用户可读写执行,组只读,其他人什么也不能做
-----------------------------
更改文件夹所属用户和组:
chown -R 用户:组 文件或目录 *文件夹用 -R
chown -R 用户 文件 --只更改文件所属用户
更改文件所属组:
chgrp 组名 文件
切换用户:su 用户名