linux基础
Linux系统
• centOS6.9
• centOS7.4
Linux哲学
• 一切接文件
CentOS下载
• https://wiki.cnetos.org/Download
• http://mirrors.aliyun.com
• http://mirrors.sohu.com
• http://mirrors.163.com
虚拟机软件
• VMware
Linux远程管理工具
• SecureCRT
• Xmanager
Linux系统
• 只有一个根目录,根目录下包含其他文件夹
• tmp:放临时文件
• usr:相当于Win系统中的Windows、Program files的组合
• etc:放配置文件
• boot:放启动相关文件,如:Kernel
• bin:二进制文件
Linux系统分区:
• mount:把分区挂载到文件夹下就可以了(就是给分区起个文件夹名)
• 文件夹叫挂载点
swap虚拟内存分区:
• 内存不足时,使用此块分区
我们分区:
• /:根分区(50G)
• boot:引导分区(500M)
• swap:虚拟内存(测试:原内存大小*2;生产:8或16G)
• Data:测试使用(60G)
分区类型
• 主分区:一块硬盘最多4个主分区,可以存数据
• 扩展分区:一块硬盘最多1个扩展分区,可以没有,不可以存数据。划分成逻辑分区后可以存数据。
逻辑分区:扩展分区中被划分出来的,可以存数据。
上下文切换:CPU工作在User Space和Kernel Space来回切换
• 切换时,必须保留原来的状态
• 上下文切换是需要成本的,应该减少
• User Space不能调用系统资源,如:内存
• Kernel Space可以调用一切系统资源
虚拟机安装:
• Windows的fat分区不支持4G以上的文件,可以转换分区为NTFS格式
• Windows分区转换命令:convert f:/fs:ntfs
单位换算:
1K=1024
1M=1024K
1G=1024M
1T=1024G
1P=1024T
1E=1024P
简单命令
• 查看CPU:scpu
• 查看内存:free -h
• 查看内存:cat /proc/meminfo
• 查看硬盘:sblk
• 查看网卡:ifconfig
• 查看Linux版本:cat /etc/centos-release
• 查看Linux版本:lsb_release -a
• 查看Linux版本内核:uname -r
• 查看都有谁正在登陆:who
• 查看我是谁:who am I
• 查看都有谁登录,在做什么操作:w
• 查看当前用户shell类型:echo $SHELL
• 查看系统支持的shell类型:cat /etc/shells
• 查看主机名:hostname
• 查看Linux系统提示:echo $PS1
• 修改Linux系统提示:PS1="[\u@\h]"
• 区分生产环境:PS1="\[\e[1;36m\][\u@\h \W]\\$\[\e[0m\]"
• 查看当前位置:pwd
• 修改系统提示文件:
○ root用户:vim .bash_profile(/root目录)
○ 非root用户:vim .bash_profile(/home目录)
• 内部命令:集成在shell里面(/bin/bash),已经加载到内存中,效率高
• 外部命令:是独立的文件
• 查看系统有多少个内部命令:enable
• 查看系统内部命令的用法:help
• 判断命令类型:type 命令
• 系统如何查找外部命令:
○ echo $PATH
○ 在以下文件中找:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
• 外部命令路径信息:which 命令
• 文件路径及相关文档路径:whereis 文件
• 系统查找命令方法:
○ 第一次去磁盘上找,并把命令hash到内存
○ 第二次去内存找
• 查看被hash的命令:hash
• 别名:
○ 经常cd /etc/sysconfig/network-scripts/
○ 更改家目录中的.bashrc文件,alias cdnet="cd /etc/sysconfig/network-scripts/"
○ 以后直接cdnet
• 查看系统中别名:alias
• 别名有效性:
○ /root/.bashrc:对root用户生效
○ /home/test/.bashrc:对test用户生效
○ /etc/.bashrc:对所有目录生效
• 修改文件生效:
○ 执行:. .bashrc
○ 执行:source .bashrc
• 解决别名与原始命令冲突
○ 原始文件加单引号:'hostname'
○ 原始文件加双引号:"hostname"
○ 原始文件加斜线:\hostname
○ 路径执行原始文件:/usr/bin/hostname
○ 加command命令:command hostname
• 退出操作:
○ ctrl + c:强行退出
○ ctrl + d:正常退出
• 命令换行:使用斜线 '\'
• Linux时间:
○ 硬件时间:clock
○ 系统时间:date
○ 修改系统时间:030710102018.30(月日小时分年.秒)
○ 系统时间覆盖硬件时间:clock -w
○ 硬件时间覆盖系统时间:clock -s
○ 同步网络服务器时间:
§ 1 执行命令:ntpdate 172.16.0.1
§ 2 修改文件:vim /etc/ntp.conf,添加server 172.16.0.1 iburst
§ 3 使服务生效:
□ systemctl start ntpd(CenOS7)
□ service ntpd start(CentOS6)
• 修改CentOS7的网卡名称:
○ vim /boot/grub2/grub.cfg
○ 在linux16后加上net.ifnames=0
○ 重启系统:reboot
• 时区:
○ 文件:/etc/localtime
○ 东八区:CTS
• 日历:
○ 当月:cal
○ 一年:cal -y
• 关机:
○ halt
○ poweroff
• 重启:
○ reboot
○ -f:强制,不调用shutdown
○ -p:切断电源
• 关机或重启:shutdown [OPTION]… TIME [MESSAGE]
○ -r:reboot
○ -h:halt
○ -c:cancel
○ TIME:
§ now:立刻关机
§ +m:几分钟之后关机
§ hh:mm:指定时间关机
• screen:共享桌面(光盘中自带)
○ 查看光盘挂在文件:lsblk
○ cd /run/media/root/CentOS\ 7\ x86_64/Packages/
○ rpm -ivh /run/media/root/CentOS\ 7\ x86_64/Packages/screen-4.1.0-0.23.20120314git3c2946.el7_2.x86_64.rpm
§ 共享:
□ 左边:screen -S helpme
□ 右边:
® 查看:screen -ls
® 加入:screen -x helpme
® 退出:exit
• echo:
○ 显示字符串
○ 显示变量:echo "$PATH"
○ 直接显示:echo '$100'
○ 八进制:echo -e '\0101' (输出A)
○ 十六进制:echo -e '\x41' (输出A)
• Linux计算器:bc
• 命令结果闪烁:
○ 外边双引号,命令用反向单引号(波浪线按钮)
○ echo -e "\033[43;31;5m `hostname`\033[0m"
• 引号总结:
○ 单引号:字符串(最傻)
○ 双引号:不认识命令,能识别变量
○ 反向单引号:命令(最聪明)
○ 大括号:组合
• 文件:
○ 创建文件:touch file
○ ll file
○ 创建大量文件:touch /data/file{1,2,3}.{txt}
○ 创建带日期的文件:touch /data/`date +%F`.log
• 历史命令:
○ 查看历史命令:history
○ 正常退出时,内存中命令写到家目录的.bash_history
○ 重新执行命令:!226(!历史命令id)
○ 历史命令保存个数
§ 默认:1000 - echo $HISTSIZE
§ 修改:/etc/profile中修改HISTSIZE
• 帮助
○ whatis + 命令:简单
○ man
○ help
• 帮助实践
○ 查看命令类型:
§ type + 命令
§ 或which + 命令(buildin是内部命令)
§ 内部命令帮助:help + 命令
§ 外部命令帮助:命令 --help
○ /usr/share/docl目录下,有已安装内容的帮助
○ Python官网:http://www.python.org
○ Linux官网:
http://kbase.redhat.com
http://www.redhat.com/docs
http://access.redhat.com
○ 网站:
http://tldp.org
http://www.slideshare.net
http://www.google.com
○ 检索方法:
Openstack filetype:pdf
rhca site:redhat.com/docs
• 目录结构:
/boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录
/bin:供所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
/sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序
/lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
/lib64:专用于x86_64系统上的辅助共享库文件存放位置
/etc:配置文件目录
/home/USERNAME:普通用户家目录
/root:管理员的家目录
/media:便携式移动设备挂载点
/mnt:临时文件系统挂载点
/dev:设备文件及特殊文件存储位置
b: block device,随机访问
c: character device,线性访问
/opt:第三方应用程序的安装位置
/srv:系统上运行的服务用到的数据
/tmp:临时文件存储位置
/usr: universal shared, read-only data
bin: 保证系统拥有完整功能而提供的应用程序
sbin:
lib:32位使用
lib64:只存在64位系统
include: C程序的头文件(header files)
share:结构化独立的数据,例如doc, man等
local:第三方应用程序的安装位置
bin, sbin, lib, lib64, etc, share
/var: variable data files
cache: 应用程序缓存数据目录
lib: 应用程序状态信息数据
local:专用于为/usr/local下的应用程序存储可变数据;
lock: 锁文件
log: 日志目录及文件
opt: 专用于为/opt下的应用程序存储可变数据;
run: 运行中的进程相关数据,通常用于存储进程pid文件
spool: 应用程序数据池
tmp: 保存系统两次重启之间产生的临时数据
/proc: 用于输出内核与进程信息相关的虚拟文件系统
/sys:用于输出当前系统上硬件设备相关信息虚拟文件系统
/selinux: security enhanced Linux,selinux相关的安全策略等信息的存储位置
• 文件类型:
-:普通文件
d: 目录文件
b: 块设备
c: 字符设备
l: 符号链接文件
p: 管道文件pipe
s: 套接字文件socket
• pwd: printing working directory
-P 显示真实物理路径
-L 显示链接路径(默认)
• 相对路径:相对当前位置的路径
• 绝对路径:路径写全了
• 上级目录:..
• 当前目录:.
• 获取当前位置:pwd
• 获取文件名:basename /usr/bin/ls - 结果:ls
• 获取文件夹名:dirname /user/bin/ls - 结果:/usr/bin
• 更换目录:
○ cd:回到家目录
○ cd -:回到刚刚的目录
○ cd ~wang:回到普通用户的家目录
• ls [options] [files_or_dirs]
ls -a 包含隐藏文件
ls -l 显示额外的信息
ls -R 目录递归通过
ls -ld 目录和符号链接信息
ls -1 文件分行显示
ls –S 按从大到小排序
ls –t 按mtime排序
ls –u 配合-t选项,显示并按atime从新到旧排序
ls –U 按目录存放顺序显示
ls –X 按文件后缀排序
• 文件时间
○ access time:访问时间。最后一次读取文件的时间(关闭,可以提省性能5%)
○ modify time:修改时间。改变文件内容的时间
○ change time:改变时间。改变原数据的时间(文件属性)
○ ll --time=ctime file
○ stat file:查看file文件全部时间
• 文件通配符
* 匹配零个或多个字符
? 匹配任何单个字符
~ 当前用户家目录
~mage 用户mage家目录
~+ 当前工作目录
~- 前一个工作目录
[0-9] 匹配数字范围
[a-z]:字母
[A-Z]:字母
[wang] 匹配列表中的任何的一个字符
[^wang] 匹配列表中的所有字符以外的字符
• 预定义字符类:man 7 glob
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母
[:upper:]: 任意大写字母
[:alpha:]: 任意大小写字母
[:alnum:]:任意数字或字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:punct:]:标点符号
[:print:]:可打印字符
[:cntrl:]:控制(非打印)字符
[:graph:]:图形字符
[:xdigit:]:十六进制字符
• 创建文件:touch 文件名
• 拷贝文件:
○ cp file1 /dir/
○ cp -p file1 /dir/(保留权限、所有者、时间戳属性)
○ cp -a file1 /dir/(保留所有属性)
○ cp /dir1/file1 /dir2/file2 /dir3/(复制多个文件到dir3)
○ cp -r /dir1/ /dir2/(复制文件夹)
○ cp -a /dir1/ /dir2/(复制文件夹,且复制属性)
○ cp -av /dir1/ /dir2/(复制文件夹,且复制属性,且显示复制过程)
• 移动文件:(剪切)
○ mv file1 /data/
• 删除文件:rm
○ 一般不适用,可以移动到特定目录中
• CentOS7修改
○ 锁屏
○ 网卡名:/boot/grub2/grub.cfg
• rm命令配置:
• alias rm="mv -t /backups/" 垃圾桶**
• tree 显示目录树
-d: 只显示目录
-L level:指定显示的层级数目
-P pattern: 只显示由指定pattern匹配到的路径
• mkdir 创建目录
-p: 存在于不报错,且可自动创建所需的各目录
-v: 显示详细信息
-m MODE: 创建目录时直接指定权限
• rmdir 删除空目录
-p: 递归删除父空目录
-v: 显示详细信息
• rm -r 递归删除目录树
• 文件存储:
○ 节点表(属性表):
§ 直接指针:可以指向4K大小的数据
§ 间接指针:可以指向4k*1024=4M大小的数据
§ 双重间接指针:可以指向4k*1024*1024=4G大小的数据
§ 三重间接指针:可以执行4T大小数据
• 文件和数据:
○ /dir/file1
○ /dir/file2
○ inode table中保存dir的 > file1的数据有inode num > inode table中找打file1对应的inode num > 再由指针指向数据
○ 查看目录下问价节点编号:ls -i
○ 查看目录最大节点编号:df -i (节点编号耗尽,不能新建文件)
○ 同一分区移动数据,节点编号不变;不同分区移动数据,节点编号变化
• 生成大的文件:
○ 100M大小的文件:dd if=/dev/zero of=bigfile bs=1M count=100
• 有人在用文件,怎么删除?
○ 安全的删除:> /dir/file 这样才能腾出空间
• 硬链接:同一分区下,一个节点编号对应多个文件(不能跨设备、跨分区,实际就是一个文件两个名)
○ ln f1 f11
○ f1和f11是同一个文件
○ 删除f1,f11还在,删除只是删除名字
• 软连接:相当于快捷方式。可以跨分区
○ ln -s f2 /root/f2
○ 软连接和被连接文件的节点编号不同
○ 软连接文件大小就是文件名字大小
• 硬链接和软连接的区别:
1、硬链接不能跨分区
2、硬链接inode number一样
3、硬链接的链接数会增长
4、硬链接不支持文件夹
5、硬链接删除原始文件,还可以访问
• 硬链接和软连接根本区别:
硬链接本质是一个文件,多个名字
软链接本质是多个不同文件
ntpdate serverip
vim /etc/ntp.conf
server serverip iburst
centos6
server ntpd start
chkconfig ntpd on 开机自动启动
centos7
systemctl start ntpd
systemctl enable ntpd 开机自动启动
• 分析文件类型:file
-b 列出文件辨识结果时,不显示文件名称
-f filelist 列出文件filelist中文件名的文件类型
-F 使用指定分隔符号替换输出文件名后默认的”:”分隔符
-L 查看对应软链接对应文件的文件类型
--help 显示命令在线帮助
• 输入输出
○ 0标准输出:stdout。默认输出到当前窗口,修改默认输出位置叫重定向
○ 1标准错误:stderr。
○ 2标准输入:键盘是标准输入设备。
○ 文件:ls /proc/$s/fd -l
○ 重定向:
§ echo "hello" > /dev/pts/2
§ ls > /data/lsout 重定向到文件(覆盖)
§ ls >> /data/lsout 追加文件
§ 正确信息和错误信息分开存放:ls /etc/centos-release /etc/noexist > /data/1.log 2> /data/2.log
§ 正确信息和错误信息写在一个文件:ls /etc/centos-release /etc/noexist &> /data/all.log
§ 标准输入用文件:
□ tr 'a-z' 'A-Z' < f1 (文件f1作为输入并进行大小写处理)
□ tr 'a-z' 'A-Z' < f1 > f2(文件f1作为输入并进行大小写处理,并重定向到f2)
§ 多行重定向发送给stdin
使用“<<终止词”命令从键盘把多行重导向给STDIN
直到 终止词 位置的所有文本都发送给STDIN
有时被称为就地文本(heretext)
mail -s "Please Call" admin@magedu.com <<END
> Hi Wang,
>
> Please give me a call when you get in. We may need
> to do some maintenance on server1.
>
> Details when you're on-site
> Zhang
> END
• 管道 |:第一个命令的标准输出作为第二个命令的标准输入
命令1 | 命令2 | 命令3 | …
将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN
STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现
最后一个命令会在当前shell进程的子shell进程中执行用来
组合多种工具的功能
ls | tr 'a-z' 'A-Z'
• 防火墙
centos 6.x的是iptables
centos7 是firewalld
• 屏幕和文件都需要结果
○ who | tee -a who.out
○ 屏幕上有输出的好处:有标准输出,可以继续管道
○ who | tee -a who.out | grep root
• 重定向:
> >> file 重定向输出
2> 2>>file 重定向错误
< file 输入重定向
<<keyword 多行重定向
&> file 输出和错误全重定向
cmd1 | tee file
• 判断用户:看用户UID
○ 方法:id -u root
○ root:0
○ 普通用户:
§ cent6:500开始,1-499系统用户(服务、进运行时使用)
§ cent7:1000开始,1-999系统用户
○ 系统用户:
§ shell类型:/sbin/nologin (不需要登录的shell)
• 组:用户账号的集合
○ 好处:统一权限管理
○ 管理员组:root 0
○ 组的id同用户id相同,新建用户就会有相同的组
• 组分类:
○ 主要组:必须有。新建账号是就已经建立。
○ 附加组:不必须。
○ id root
• 用户和组的配置文件:
○ 用户及其属性信息:/etc/passwd
○ 用户密码及其相关属性:/etc/shadow
○ 组及其属性信息:/etc/group
○ 组密码及其相关属性:/etc/gshadow
• 上传下载
○ rz:上传到Linux
○ sz:从Linux下载
• 用户管理命令:
○ Useradd:
§ useradd username 没有密码,不能登录,/etc/pwd下为!
§ Useradd -u 1234 username -r 创建系统用户,指定id。系统账号没有家目录
§ useradd -u 666 mysql -g mysql mysql -r -s /sbin/nologin 创建用户,且指定主 id shell类型
§ useradd -G mongdb,root 指定两个辅助组
§ useradd -M test 不创建家目录
○ Usermod:
§ 锁定账号:usermod -L username
§ 解锁账号:usermod -U username
○ Userdel:
○ /ect/default/useradd 用户创建默认规则
○ 用户邮箱:/var/spool/mail
○ 口令策略:/etc/login.cnf
○ 添加辅助组:usermod -aG wang mage
○ 删除辅助组:usermod -G "" wang 主组不能清除
○ 删除用户:userdel test 不会删除组
○ 删除用户:userdel -r test 删除用户、组、邮箱
• 组管理命令:
○ Groupadd -g 666 mysql 创建组,并指定id。先建立组
○ 新建文件,文件所有者是主组
○ gpasswd groupname 修改组口令
•
• 切换用户:
○ su test:不完整切换,不切换目录
○ su - test:相当于重新切换(身份和环境均切换),切换到家目录
○ 切换账号:用完就exit退回
○ 仅切换一次:su - root -c "cat /etc/shadow"
• 口令:
○ passwd -d wang 删除
○ passwd wang 添加口令
○ echo centos | passwd --stdin wang 避免确认口令,修改多个人的口令
○ passwd -e wang 账号设置过期
• 文件权限:
○ r 读
○ w 写
○ x 执行:脚本和二进制文件可以执行
○ 所有者、所属组、other:需要配置权限
• 目录
○ r 可以查看目录下的文件 ls
○ x 可以cd
○ w 新建、删除文件
• CentOS7设置ip地址:
○ 位置:cd /etc/sysconfig/network-scripts
○ 修改网卡文件名
mv ifcfg-ens33 ifcfg-eth0
○ 修改ip文件
vim ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static 静态ip
IPADDR=192.168.10.7
NETMASK=255.255.255.255
ONBOOT=yes
○ 重启服务
systemctl restart network
○ 查看网卡对应连接
○ nmcli connection reload
nmcli connection show
• chown test file1 改所有者
• chgrp test group1 改所属组
• chown test:group1 file1 改所有者和所属组
• chown -R test:group1 递归修改
• chmod 修改权限
○ 权限:u-user;g-group;o-other;a-all
○ 权限:+ 增加权限;- 删除权限;= 赋予权限
○ 权限:r-read;w-write;x-execute;X-给文件夹加执行权限
○ 权限:r-4;w-2;x-1
○ chmod g-r file1 删除所属组的读权限
○ chmod u=rwx,g=rw,o= file1 修改所有权限
○ chmod 640 file1 数字法修改权限
○ 删除目录是目录权限决定的,不是目录里面的文件决定的**
• umask(掩码)影响文件和文件夹默认权限:
○ 文件默认权限 = 666-umask
○ 文件夹默认权限=777-umask
○ 例外情况:对文件。如果666-umask结果有奇数就+1
○ umask
○ umask -S
○ umask文件(用户家目录):vim .bashrc
• /usr/bin/passwd 文件有特殊属性:
○ s-suid 当其他用户运行passwd文件时,临时切换成passwd所有者的权限
○ s-权限只适合可执行的二进制的文件
○ sgid-适合组内人员进行权限限制,chmod g+s DIR在父文件夹授权,子文件均属于一个组
○ t-加上后不能删除别人的文件(主要作用在文件夹上,避免文件被别人删除)
• 自定义账号权限:(除user、group、other外的权限)
○ setfacl -m u:wang:000 dir:set file acl权限
○ getfacl dir:查看file acl权限
○ setfcal -x u:wang dir:删除acl权限
○ setfacl -b dir:清空acl权限
○ setgacl -m g:g2:rw dir
○ getgacl dir
○ 是否有acl功能:tune2fs -l /dev/sda2 查看分区acl