Linux常用命令:
1.帮助命令
#语法格式: 命令 --help #作用: 查看命令的帮助信息 # 示例: # ls --help 查看ls命令的帮助信息 # netstat --help 查看netstat命令的帮助信息
#语法格式: man 命令 #作用: 查看命令帮助手册 # 示例: # man ls #查看ls命令帮助手册 # man netstat #查看netstat命令帮助手册
2.路径切换和检查
#语法格式: cd 目录 #作用: 切换到目录 # 示例: # cd /opt 切换到/opt目录下 # cd ~ 切换到用户目录 # cd - 切换到上次访问的目录 # cd .. 切换到上次目录
#语法格式: pwd #作用: 查看当前路径 # 示例: # pwd 查看当前路径,将显示当前路径
#语法格式: ls [-la] [文件/目录] #作用: 查看当前路径下的文件和目录,如有文件或目录,只查看当前文件或目录 # 示例: # ls 查看当前路径下所有的文件或目录 # ls -l 查看当前路径下所有文件或目录的详细信息 # ls -a 查看当前路径下的所有文件或目录,显示隐藏文件 # ls -l a.log 查看当前路径a.log下面的详细信息
#语法格式: find [路径] [参数] [匹配模式] #作用: 文件或目录可以根据给定的路径和表达式找到 # 示例: # find / -name "*.txt" 查询根目录下的一切.txt结尾的文件 。 # find /test -perm 644 查询/test所有权限为644的文件 # find . -type f 查询当前目录下的所有文件 # find . -type f -name "abc" 所有查询当前目录的文件包括abc字符的文件 # find . -type f | sort 查询当前目录中的所有文件并进行排序 # find . -type d 查看当前目录中的所有目录 # find . -size 10M
3.文件|目录操作
#语法格式: touch 文件名 #作用: 创建一个文件 # 示例: # touch a.log 创建一个a.log文件。
#语法格式: ln 源文件名 硬链接文件名 ln -s 源文件名 软连接文件名 #作用: 创建文件链接 # 示例: # ln a.txt a.txt.link 为a.txt创建硬链接文件a.txt.link。 # ln -s a.txt a.txt.link 为a.txt创建软连接文件 。 # 备注: 软链接文件:就像windows同样的快捷方式,只是源文件的一个方向,删除软连接文件,源文件任存在。 硬链接文件:例如,目录中有两个文件。除了名称不同外,这两个文件的实际磁盘空间仍然只有1个M,另一个文件也会改变任何文件的内容;
#语法格式: mkdir 目录名 #作用: 创建目录 # 示例: # mkdir test 创建一个test的目录。 # mkdir -p test 若存在test,不创建;如果不存在,则创建 # mkidr -p test/a/b 创建test下面再创建a目录,a再创建b目录 。
#语法格式: rm [-rf] 文件|目录 #作用: 创建文件或目录 # 示例: # rm a.txt 删除a.txt,删除前询问 。 # rm -f a.txt 直接删除a.txt ,不在询问 。 # rm -r test 删除test删除前查询目录 # rm -rf test 直接删除test不询问目录 。 # 注:任何删除操作都是危险的动作,谨慎使用 。
#语法格式: mv 源文件|目录 目标文件|目标目录 #作用: 有两层含义: 1. 重命名文件或目录 2. 移动文件或目录到目的目录 。 # 示例: # mv a.txt b.txt 修改文件名a.txt为b.txt 。 # mv a.txt test/ 移动a.txt 到test目录下 # mv abc bcd 重命名目录abc为bcd . # mv abc bcd/ 移动abc目录到bcd下 。
#语法格式: cp [-rf] 源文件|目录 目标文件|目录 #作用: 拷贝文件或目录为另一个文件或目录 。 # 示例: # cp a.txt b.txt 拷贝a.txt为b.txt ,若b.txt为了存在,提示是否继续复制 。 # cp -f a.txt b.txt 拷贝a.txt为b.txt ,即使b.txt以前存在,直接覆盖 。 # cp -r abc bcd 拷贝abc目录为bcd ,若abc如果存在,则提示是否继续复制 。 # cp -rf abc bcd 拷贝abc目录为bcd ,即使abc存在也是直接覆盖 。
#语法格式: zipinfo zip文件 #作用: 查看zip文件中的信息。 # 示例: # zipinfo abc.zip 查看abc.zip文件信息 。 # zipinfo -v abc.zip 显示abc.zip每个文件的信息 。
#语法格式: zip 压缩文件 文件|目录 #作用: 压缩目标文件或目录。 # 示例: # zip a.zip a.txt 将a.txt压缩形成a.zip 。 # zip a.zip test/ 将test目录下的所有文件和目录压缩到a.zip 。
#语法格式: gzip [-d] 文件|目录 #作用: 压缩|解压缩文件或目录 # 示例: # gzip a.txt 将a.txt压缩为a.txt.gz ,压缩后源文件不再存在。 # gzip -d a.txt.gz 解压a.txt.gz文件
#语法格式: gzip [-d] 文件|目录 #作用: 压缩|解压缩文件或目录 # 示例: # gzip a.txt 将a.txt压缩为a.txt.gz ,压缩后源文件不再存在。 # gzip -d a.txt.gz 解压a.txt.gz文件
#语法格式: gunzip 压缩文件 #作用: 解压文件 # 示例: # gunzip a.txt.gz 解压a.txt.gz # guzip test.tar.gz 解压test.tar.gz
#语法格式: tar [-c|xzvf] 文件|压缩文件 #作用: 归档并创建压缩文件 或 解压归档压缩文档 # 示例: # tar -cvzf a.tar a.txt # 将文件a.txt压缩归档 # tar -xvzf a.tar . 解压a.tar文件到当前目录 。
#语法格式: tftp 远程主机
#作用: 连接远程主机,上传或下载文件
# 示例: (需连接到远程主机)
# get a.txt 下载a.txt文件
# put a.txt 上传a.txt到远程主机
#语法格式: curl url
#作用: 进行文件下载或者请求http协议数据
# 示例:
# curl http://www.baidu.com #请求百度
# curl -o baidu.html http://www.baidu.com 将请求到的数据保存到baidu.html中 。
#语法格式: scp 远程主机账号@远程IP地址 本地目录
#作用: 登录远程主机进行拷贝文件或目录
# 示例:
# scp root@192.168.12.11:/soft/test.tar.gz /tools/ 将远程主机目录下的/soft/test.tar.gz 拷贝到本地目录下的tools/下
# scp root@192.168.12.11:/soft/ /tools/ 将远程主机目录soft 拷贝到本地目录的tools/下 。
#语法格式: scp 主机1 主机2
#作用: 远程主机间的文件或目录相互拷贝
# 示例:
# rcp test 192.168.128.169:/test 拷贝当前目录下的test 到192.168.128.169的/test目录下
# rcp root@192.168.128.169:./test /test 复制远程目录到本地的/test下
#语法格式: file 文件名
#作用: 查看文件的类型
# 示例:
# file a.txt #查看a.txt是什么类型
# file abc #查看abc是什么类型
#语法格式: du 文件名
#作用: 查看文件的大小
# 示例:
# du a.txt #查看a.txt的文件大小,以k为单位
# du -h a.txt #查看a.txt的文件大小,以M为单位 。
#语法格式: 有两种用法
chmod [u/g/o/a][+/-/=] rwx 文件/目录 +:增加权限,-取消权限, =设定权限
chmod 数字 文件/目录
#作用: 为文件或目录设置权限。
# 示例:
# chmod a=rw a.txt 为所有者设置读写权限 。
# chmod 644 a.txt 为所有者设置读权限,为用户设置写权限。
4.文本内容查看及过滤
#语法格式: cat 文件名
#作用: 查看文本内容,会将内容全部显示。
# 示例:
# cat a.txt 显示a.txt里的内容。
#语法格式: more 文件名
#作用: 百分比显示文件内容,按Enter继续。
# 示例:
# more a.txt 若只有一页,则全部显示,否则按百分比显示。
#语法格式:
tail 文件名 #查看文本内容
tail -n 数量 文件名 #只显示倒数的几行
tail -f 文件名 # 实时的查看文件写入的信息
#作用: 查看文本内容,
# 示例:
# tail a.txt 查看文件内容,和cat效果一样 。
# tail -n 2 a.txt 显示a.txt最后两行
# tail -f a.txt 实时监控a.txt文本内容。
#语法格式:
head 文件名
head -n 数量 文件名
#作用: 查看文本内容。
# 示例:
# head a.txt 查看文本内容,和cat效果一样。
# head -n 2 a.txt 查看文本的前两行 。
#语法格式: grep [选项] [模式] 文件
#作用: 文本搜索工具。
# 示例:
# grep "aaa" a.txt 从a.txt中搜索aaa字符的行
# grep -v "aaa" a.txt 从a.txt中不包含aaa的行
# grep -n "aaa" a.txt 从a.txt中搜索aaa字符的行,并在前面加上行号
# grep -i "aaa" a.txt 从a.txt中搜索aaa字符的行,其中忽略aaa的大小写
# grep -e "a*" a.txt 从a.txt中搜索匹配a字符的行
# ps -ef |grep "MySQL" 查看mysql的进程
#备注:grep命令非常强大,详细用法请参考本人另一篇关于grep命令的博文
#语法格式: sed [选项] 文件
#作用: 文本编辑工具。
# 示例:
# sed -n '2p' a.txt 从a.txt中的第二行内容
# sed '3,5d' a.txt 删除a.txt中第3到5行的内容,(注:源文件内容不变,只是回显内容会删除)
# sed '/aaa/d' a.txt 删除匹配aaa的行,从a.txt中 。
#备注:sed命令非常强大,详细用法请参考本人另一篇关于sed命令的博文
#语法格式: awk [选项] 文件
#作用: 文本分析工具。
# 示例:
# awk '{print $5}' a.txt 显示a.txt中第6行内容
# awk 'NR <=2 {print $1,$3,$5}' a.txt 显示前两行内容,每行只显示第1,3,5列 。
# awk '/^d/ {print $1,$9}' a.txt 显示以d开头的行,每行只显示第一,九列 。
#备注:awk命令非常强大,详细用法请参考本人另一篇关于awk命令的博文
#语法格式: cut 选项 文件
#作用: 用于剪切字符。
# 示例:
# cut -c 1-3 a.txt 只输出每行第一到第三的字符
# cut -f4 -d" " a.txt 显示第四列,以空格为分隔符
#语法格式: col 选项 文件
#作用: 用于过滤字符。
# 示例:
# man ls | col-b > ls_help 过滤掉ls手册中的控制字符并输出到文件
#语法格式: vi/vim 文件
#作用: 用于编辑文件。
# 示例:
# vi a.txt 编辑a.txt,可以进行修改里面的内容
# vim a.txt 编辑a.txt,可以进行修改里面的内容
# 备注:
vi和vim的用法基本一样,可以说vim是vi的增加版,就像记事本与notepad++
#语法格式: > 文件
#作用: 将内容输出到文件,若文件中有内容则覆盖。若文件不存在,则创建文件
# 示例:
# ll > a.txt 查看详细后输出到a.txt 。
# cat a.txt > b.txt 将a.txt中的内容添加到b.txt中 。
#语法格式: >> 文件
#作用: 将内容追加到文件,若文件中有内容则追加。若文件不存在,则创建文件
# 示例:
# ll >> a.txt 查看详细后追加到a.txt 。
# cat a.txt >> b.txt 将a.txt中的内容添加到b.txt中 。
#语法格式: tee 文件
#作用: 将内容输出到文件并输出内容显示在控制台上。若文件不存在,则创建文件,一般需要和管道符(|)一起使用。
# 示例:
# cat a.txt | tee b.txt 将a.txt中的内容添加到b.txt中,同时将添加内容回显到控制台上 。
#语法格式: join 文件1 文件2
#作用: 用于将两个文件中,指定栏目内容相同的行连接起来
# 示例:
# join a.txt b.txt 若第一行相同,将后面的内容连接起来 。
#语法格式: split 数量 文件
#作用: 用于将一个文件分割成数个
# 示例:
# split -5 c.txt 按每5行显示分隔出一个文件。
#语法格式: uniq 文件
#作用: 用于检查及删除文本文件中重复出现的行列,注意:重复的行一定是相邻的行,若不相邻不会删除
# 示例:
# uniq d.txt 将d.txt中相邻重复的行去掉 。
# uniq d.txt | sort 将d.txt中相邻重复的行去掉并排序
# 备注: 此命令经常和sort命令结合使用,用于去重和排序。
#语法格式: sort 文件
#作用: 对文本内容进行排序
# 示例:
# sort a.txt 将a.txt中的内容进行排序,默认为升序。
# sort -r a.txt 将a.txt中的内容进行相反顺序排序
# uniq d.txt | sort -r 将d.txt中相邻重复的行去掉并倒序排序
#语法格式: paste 文件1 文件2 ...
#作用: 用于合并文件的列。
# 示例:
# cat a.txt b.txt 将两个文件的列合并起来显示 。
5.用户|组操作
#语法格式: useradd 新用户
#作用: 创建用户
# 示例:
# useradd test 创建test用户
# useradd -d /home/test test 创建test用户,并指定test用户的家目录为home/test
# useradd -u 666 test 为test用户指定uid为666
#语法格式: adduser 新用户
#作用: 创建用户
# 示例:
# adduser test 创建test用户
# adduser -d /home/test test 创建test用户,并指定test用户的家目录为home/test
# adduser -u 666 test 为test用户指定uid为666
# 备注:useradd和adduser使用上一致,设置两个命令可能就是为了解决用户将字母记错输返。
#语法格式: userdel 用户
#作用: 删除用户
# 示例:
# userdel test 删除test用户
# userdel -r test 删除test用户及其家目录
#语法格式: usermod 用户 #作用: 修改用户 # 示例: # usermod -l test1 test 将用户test修改为test1 # usermod -d /home/test00 test 将用户test的家目录修改为/home/test00 # usermod -L test
锁定test用户的密码 # usermod -U test 解锁test用户的密码
#语法格式: passwd 用户
#作用: 修改用户密码,输入命令回车后会引到用户设置新密码 。
# 示例:
# passwd test 修改用户密码
#语法格式: groupadd 用户组
#作用: 添加用户组
# 示例:
# groupadd test 添加用户组为test
# groupadd -g 9999 test 为创建用户组test并设置gid为9999
#语法格式: groupdel 用户组
#作用: 删除用户组
# 示例:
# groupdel test 删除用户组test
#语法格式: groupmod 用户组
#作用: 修改用户组
# 示例:
# groupmod -n root test 更改test用户组为root
#语法格式: chown 文件|目录 用户|用户组
#作用: 更改文件目录的用户或用户组
# 示例:
# chown root /test/a.txt 把a.txt的所有者设置为root
# chown root:root /test/a.txt 把a.txt的所有者设置为root,组设置为root
# chown -R test:test * 把当前目录下的所有文件都设置为test用户和test用户组
#语法格式: su [-] 用户
#作用: 切换用户
# 示例:
# su test 切换当前用户为test用户
# su - test 切换当前用户为test用户
# 备注: 第一次切换时需要输入密码
6.任务管理器
#语法格式: ps [参数]
#作用: 显示当前系统的进程状态
# 示例:
# ps -ef 显示所有进程
# ps -aux 显示所有进程
# ps -ef | grep mysql 查看mysql进程
# ps -u root 显示root用户进程。
#语法格式: kill [参数]
#作用: 杀掉系统中执行的程序(进程)
# 示例:
# kill 319877 杀掉进程319877
# kill -9 319877 强制杀掉进程319877
#语法格式: top [参数]
#作用: 显示系统中各个进程的资源占用情况
# 示例:
# top 查看系统各个进程的资源占用,比如CPU ,内存信息。
# top -n 5 动态更新5次结束
# top -d 5 每隔5秒更新一次
#语法格式: vmstat [参数]
#作用: 显示虚拟内存状态
# 示例:
# vmstat 显示内存信息
# vmstat -s 以列表形式显示内存
# vmstat 2 每隔2秒刷新一次
#语法格式: free [参数]
#作用: 查看系统内存信息
# 示例:
# free 显示内存信息,默认以kb为单位
# free -m 显示内存信息,以mb为单位
# free -g 显示内存信息,以gb为单位
#语法格式: df [参数] 分区
#作用: 查看磁盘占用空间
# 示例:
# df 查看各分区在磁盘占用情况
# df -h 以比较容易阅读方式查看磁盘使用情况
# df /dev/shm 查看该挂载点下的使用情况
#语法格式: fdisk [参数]
#作用: 进行磁盘分区管理
# 示例:
# fdisk -l 查看所有分区情况
#语法格式: netstat [参数]
#作用: 显示各种网络信息
# 示例:
# netstat 查看各网络信息
# netstat -an | grep 3306 查看3306端口的使用情况
#语法格式: service [参数]
#作用: 服务管理
# 示例:
# service --status-all 查看所有服务的运行状态
# service mysql start 启动mysql
# service mysql stop 停止mysql
# service mysql restart 重启mysql
#语法格式: chkconfig [参数]
#作用: 更新(启动或停止)和查询系统服务的运行级信息
# 示例:
# chkconfig -list 显示所有运行级系统服务的运行状态信息(on或off)
# chkconfig –add httpd 增加httpd服务
# chkconfig –del httpd 删除httpd服务
7.网络管理
#语法格式:ifconfig
#作用: 查看或设置网络设备
# 示例:
# ifconfig 查看网络信息,比如IP地址
# ifconfig eth0 down 关闭eth0的网卡
# ifconfig eth0 up 开启eth0的网卡
# ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE 修改mac地址
# ifconfig eth0 add 32ffe:3840:320:2007::2/64 为网卡配置IPV6地址
# ifconfig eth0 del 32ffe:3840:320:2007::2/64 删除网卡的IPV6地址
# ifconfig eth0 192.168.128.169 修改ip地址为192.168.128.169
# ifconfig eth0 192.168.128.169 netmask 255.255.255.0 修改IP和子网掩码
# ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255 修改ip,子网掩码及网关
#语法格式: ping IP地址
#作用: 确认是否和某主机的网络相同
# 示例:
# ping 192.168.12.12 确认是否能连通到192.168.12.12
# ping www.baidu.com 确认是否能正常访问百度
# ping -c 4 www.baidu.com 只ping四次
# ping -c 4 -i 2 www.baidu.com 只ping四次,每次间隔2s
#语法格式: systemctl [选项] [服务]
#作用: 对服务进行管理,如启动/重启/停止/查看服务
# 示例:
# systemctl status httpd.service 查看http服务状态
# systemctl start httpd.service 启动http服务
# systemctl stop httpd.service 停止http服务
# systemctl restart httpd.service 重启http服务
# systemctl status firewalld 查看防火墙状态
# systemctl start firewalld 开启防火墙
# systemctl stop firewalld 关闭防火墙
#语法格式: firewall-cmd [参数]
#作用: 防火墙端口管理
# 示例:
# firewall-cmd --state 查看当前防火墙的运行状态
# firewall-cmd --zone=public --list-ports 查看所有放行的端口
# firewall-cmd --reload 重新加载修改的配置
# firewall-cmd --query-port=8888/tcp 查询端口8888是否被开放
# firewall-cmd --add-port=8888/tcp 开启8888端口通过防火墙
# firewall-cmd --permanent --remove-port=123/tcp 关闭123端口
8.安装更新配置
#语法格式: yum [选项]
#作用: rpm的软件包管理器
# 示例:
# yum install mysql 安装mysql
# yum remove mysql 卸载mysql
# yum clean mysql 清除缓存目录下的安装包
# yum install 全部安装
# yum update 全部更新
# yum update mysql 更新mysql
# yum info mysql 显示mysql安装包信息
# yum list mysql 显示mysql安装包信息
# yum list 显示所有已安装包和可安装包
#语法格式: sh 可执行文件
#作用: 运行可执行文件,一般都是shell脚本
# 示例:
# sh a.sh 运行a.sh文件,
# sh -x a.sh 运行并调试a.sh脚本
9.系统相关
#语法格式: set [参数]
#作用: 显示当前shell的变量,包括当前用户的变量;
# 示例:
# abcd=100
# set | grep abcd 显示abcd的变量值
#语法格式: unset [参数]
#作用: 删除shell变量的值
# 示例:
# abcd=100
# unset abcd 删除abcd的变量值
#语法格式: env [参数]
#作用: 设置或显示当前环境变量
# 示例:
# env 显示当前环境变量
# env abcd=10 定义环境变量
# env -u abcd 删除已经定义的环境变量abcd
#语法格式: export [参数]
#作用: 设置或显示环境变量
# 示例:
# export 显示当前环境变量
# export abcd=101 定义环境变量
#语法格式: shutdown [参数]
#作用: 关闭或重启
# 示例:
# shutdown -h now 立即关机
# shutdown -r now 立即重启
# shutdown -h 22:30 22:30关机
#语法格式: reboot [参数]
#作用: 重启计算机
# 示例:
# reboot 重启
#语法格式: poweroff [参数]
#作用: 关闭计算机
# 示例:
# poweroff 关闭计算机及电源
#语法格式: halt
#作用: 关闭操作系统
# 示例:
# halt 关闭系统
# halt -p 关闭计算机及电源,等同于poweroff
# halt -f 强制关机
#语法格式: exit
#作用: 退出当前执行的shell
# 示例:
# exit 退出当前shell
#语法格式: uname [参数]
#作用: 显示系统相关信息
# 示例:
# uname 显示当前系统
# uname -an 显示系统的详细信息
# uname -r 显示内核信息
# uname -i 显示当前架构
#语法格式: date [参数]
#作用: 显示或设定时间
# 示例:
# date 查看当前时间
# date -s "2021-04-04 22:38:56" 设置时间为2021-04-04 22:38:56
#语法格式: last
#作用: 显示最近用户或终端的登录情况
# 示例:
# last 显示最近用户的登录情况
#语法格式: history [参数]
#作用: 查看历史输入命令
# 示例:
# history 查看历史命令
# history | grep "sed" 查看输入过sed命令
# history -5 查看最近的5条命令
#语法格式: who [参数]
#作用: 查看当前登录用户信息
# 示例:
# who 查看登录用户信息
# who -H 带标题显示
# who -b 输出系统最近启动时间
#语法格式:crontab [参数]
#作用: 任务调度
# 示例:
# crontab -l 查看当前计划任务
# crontab -e 创建计划任务,打开后,需要以按照如下格式编辑
#备注
#设置格式如下:
minute(分) hour(小时) day(天) month(月) week(周) command(命令)
# 设置范围:
minute 是从0到59之间的任何整数
hour 是从0到23之间的任何整数
day 是从1到31之间的任何整数
month 是从1到12之间的任何整数
week 是从0到7之间的任何整数,其中0或7代表星期日
command 要执行的命令,可以是系统命令,也可以是自己编写的脚本文件
若某列没有设置,则使用*代替 。
# 举例:
* * 1 * * tar -czvf bk.tar.gz /log_bakup # 每天进行一次归档备份
#语法格式: sudo [命令]
#作用: 运行以管理员权限运行命令,一般是非root用户进行操作
# 示例: (假设当前账号为test)
# sudo mkdir abc 创建abc目录 。
#语法格式: clear
#作用: 清屏操作,也可以使用快捷键Ctrl + L
# 示例:
# clear 清屏
#语法格式: echo [变量]
#作用: 输出变量值
# 示例:
# echo $abc 输出变量abc的值,需要提前定义abc的值
# echo `pwd` 显示当前路径
Linux 概述
什么是Linux
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
Unix和Linux有什么区别?
Linux和Unix都是功能强大的操作系统,都是应用广泛的服务器操作系统,有很多相似之处,甚至有一部分人错误地认为Unix和Linux操作系统是一样的,然而,事实并非如此,以下是两者的区别。
-
开源性 Linux是一款开源操作系统,不需要付费,即可使用;Unix是一款对源码实行知识产权保护的传统商业软件,使用需要付费授权使用。
-
跨平台性 Linux操作系统具有良好的跨平台性能,可运行在多种硬件平台上;Unix操作系统跨平台性能较弱,大多需与硬件配套使用。
-
可视化界面 Linux除了进行命令行操作,还有窗体管理系统;Unix只是命令行下的系统。
-
硬件环境 Linux操作系统对硬件的要求较低,安装方法更易掌握;Unix对硬件要求比较苛刻,按照难度较大。
-
用户群体 Linux的用户群体很广泛,个人和企业均可使用;Unix的用户群体比较窄,多是安全性要求高的大型企业使用,如银行、电信部门等,或者Unix硬件厂商使用,如Sun等。 相比于Unix操作系统,Linux操作系统更受广大计算机爱好者的喜爱,主要原因是Linux操作系统具有Unix操作系统的全部功能,并且能够在普通PC计算机上实现全部的Unix特性,开源免费的特性,更容易普及使用!
什么是 Linux 内核?
Linux 系统的核心是内核。内核控制着计算机系统上的所有硬件和软件,在必要时分配硬件,并根据需要执行软件。
- 系统内存管理
- 应用程序管理
- 硬件设备管理
- 文件系统管理
Linux的基本组件是什么?
就像任何其他典型的操作系统一样,Linux拥有所有这些组件:内核,shell和GUI,系统实用程序和应用程序。Linux比其他操作系统更具优势的是每个方面都附带其他功能,所有代码都可以免费下载。
Linux 的体系结构
从大的方面讲,Linux 体系结构可以分为两块:
- 用户空间(User Space) :用户空间又包括用户的应用程序(User Applications)、C 库(C Library) 。
- 内核空间(Kernel Space) :内核空间又包括系统调用接口(System Call Interface)、内核(Kernel)、平台架构相关的代码(Architecture-Dependent Kernel Code) 。
- 1、现代 CPU 实现了不同的工作模式,不同模式下 CPU 可以执行的指令和访问的寄存器不同。
- 2、Linux 从 CPU 的角度出发,为了保护内核的安全,把系统分成了两部分。
用户空间和内核空间是程序执行的,我们可以通过两种方式完成用户空间到内核空间的转移:1)系统调用;2)硬件中断。
BASH和DOS之间的基本区别是什么?
BASH和DOS控制台之间的主要区别在于3个方面:
- BASH命令区分大小写,而DOS命令则不区分;
- 在BASH下,/ character是目录分隔符,\作为转义字符。在DOS下,/用作命令参数分隔符,\是目录分隔符
- DOS遵循命名文件中的约定,即8个字符的文件名后跟一个点,扩展名为3个字符。BASH没有遵循这样的惯例。
Linux 开机启动过程?
了解即可。
-
1、主机加电自检,加载 BIOS 硬件信息。
-
2、读取 MBR 的引导文件(GRUB、LILO)。
-
3、引导 Linux 内核。
-
4、运行第一个进程 init (进程号永远为 1 )。
-
5、进入相应的运行级别。
-
6、运行终端,输入用户名和密码。
Linux系统缺省的运行级别?
- 关机。
- 单机用户模式。
- 字符界面的多用户模式(不支持网络)。
- 字符界面的多用户模式。
- 未分配使用。
- 图形界面的多用户模式。
- 重启。
Linux 使用的进程间通信方式?
了解即可,不需要太深入。
- 1、管道(pipe)、流管道(s_pipe)、有名管道(FIFO)。
- 2、信号(signal) 。
- 3、消息队列。
- 4、共享内存。
- 5、信号量。
- 6、套接字(socket) 。
Linux 有哪些系统日志文件?
比较重要的是 /var/log/messages
日志文件。
该日志文件是许多进程日志文件的汇总,从该文件可以看出任何入侵企图或成功的入侵。
另外,如果胖友的系统里有 ELK 日志集中收集,它也会被收集进去。
Linux系统安装多个桌面环境有帮助吗?
通常,一个桌面环境,如KDE或Gnome,足以在没有问题的情况下运行。尽管系统允许从一个环境切换到另一个环境,但这对用户来说都是优先考虑的问题。有些程序在一个环境中工作而在另一个环境中无法工作,因此它也可以被视为选择使用哪个环境的一个因素。
什么是交换空间?
交换空间是Linux使用的一定空间,用于临时保存一些并发运行的程序。当RAM没有足够的内存来容纳正在执行的所有程序时,就会发生这种情况。
什么是root帐户
root帐户就像一个系统管理员帐户,允许你完全控制系统。你可以在此处创建和维护用户帐户,为每个帐户分配不同的权限。每次安装Linux时都是默认帐户。
什么是LILO?
LILO是Linux的引导加载程序。它主要用于将Linux操作系统加载到主内存中,以便它可以开始运行。
什么是BASH?
BASH是Bourne Again SHell的缩写。它由Steve Bourne编写,作为原始Bourne Shell(由/ bin / sh表示)的替代品。它结合了原始版本的Bourne Shell的所有功能,以及其他功能,使其更容易使用。从那以后,它已被改编为运行Linux的大多数系统的默认shell。
什么是CLI?
(英语**:command-line interface**,缩写])是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。也有人称之为(CUI)。
通常认为,命令行界面(CLI)没有图形用户界面(GUI)那么方便用户操作。因为,命令行界面的软件通常需要用户记忆操作的命令,但是,由于其本身的特点,命令行界面要较图形用户界面节约计算机系统的资源。在熟记命令的前提下,使用命令行界面往往要较使用图形用户界面的操作速度要快。所以,图形用户界面的操作系统中,都保留着可选的命令行界面。
什么是GUI?
图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。
图形用户界面是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务。与通过键盘输入文本或字符命令来完成例行任务的字符界面相比,图形用户界面有许多优点。
开源的优势是什么?
开源允许你将软件(包括源代码)免费分发给任何感兴趣的人。然后,人们可以添加功能,甚至可以调试和更正源代码中的错误。它们甚至可以让它运行得更好,然后再次自由地重新分配这些增强的源代码。这最终使社区中的每个人受益。
GNU项目的重要性是什么?
这种所谓的自由软件运动具有多种优势,例如可以自由地运行程序以及根据你的需要自由学习和修改程序。它还允许你将软件副本重新分发给其他人,以及自由改进软件并将其发布给公众。
磁盘、目录、文件
简单 Linux 文件系统?
也就是说在 Linux 系统中有一个重要的概念**:一切都是文件**。其实这是 Unix 哲学的一个体现,而 Linux 是重写 Unix 而来,所以这个概念也就传承了下来。在 Unix 系统中,把一切资源都看作是文件,包括硬件设备。UNIX系统把每个硬件都看成是一个文件,通常称为设备文件,这样用户就可以用读写文件的方式实现对硬件的访问。
Linux 支持 5 种文件类型,如下图所示:
Linux 的目录结构是怎样的?
这个问题,一般不会问。更多是实际使用时,需要知道。
Linux 文件系统的结构层次鲜明,就像一棵倒立的树,最顶层是其根目录:
:
- : 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里;
- : 存放系统管理和配置文件;
- : 存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示;
- **/usr **: 用于存放系统应用程序;
- : 额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里;
- : 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息;
- : 超级用户(系统管理员)的主目录(特权阶级o);
- 存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等;
- : 用于存放设备文件;
- : 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统;
- : 存放用于系统引导时使用的各种文件;
- **/lib **: 存放着和系统运行相关的库文件 ;
- : 用于存放各种临时文件,是公用的临时文件存储点;
- : 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等;
- : 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里。
什么是 inode ?
一般来说,面试不会问 inode 。但是 inode 是一个重要概念,是理解 Unix/Linux 文件系统和硬盘储存的基础。
理解inode,要从文件储存说起。
文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。
文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。
每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。
如果看的一脸懵逼,也没关系。一般来说,面试官不太会问这个题目。
Linux 通过 inode 节点表将文件的逻辑结构和物理结构进行转换。
- inode 节点是一个 64 字节长的表,表中包含了文件的相关信息,其中有文件的大小、文件所有者、文件的存取许可方式以及文件的类型等重要信息。在 inode 节点表中最重要的内容是磁盘地址表。在磁盘地址表中有 13 个块号,文件将以块号在磁盘地址表中出现的顺序依次读取相应的块。
- Linux 文件系统通过把 inode 节点和文件名进行连接,当需要读取该文件时,文件系统在当前目录表中查找该文件名对应的项,由此得到该文件相对应的 inode 节点号,通过该 inode 节点的磁盘地址表把分散存放的文件物理块连接成文件的逻辑结构。
什么是硬链接和软链接?
1)硬链接
由于 Linux 下的文件是通过索引节点(inode)来识别文件,硬链接可以认为是一个指针,指向文件索引节点的指针,系统并不为它重新分配 inode 。每添加一个一个硬链接,文件的链接数就加 1 。
- 不足:1)不可以在不同文件系统的文件间建立链接;2)只有超级用户才可以为目录创建硬链接。
2)软链接
软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。
- 不足:因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移;还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。
。总结区别如下:
- 硬链接不可以跨分区,软件链可以跨分区。
- 硬链接指向一个 inode 节点,而软链接则是创建一个新的 inode 节点。
- 删除硬链接文件,不会删除原文件,删除软链接文件,会把原文件删除。
RAID 是什么?
RAID 全称为独立磁盘冗余阵列(Redundant Array of Independent Disks),基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、 容量巨大的硬盘。RAID 通常被用在服务器电脑上,使用完全相同的硬盘组成一个逻辑扇区,因此操作系统只会把它当做一个硬盘。
RAID 分为不同的等级,各个不同的等级均在数据可靠性及读写性能上做了不同的权衡。在实际应用中,可以依据自己的实际需求选择不同的 RAID 方案。
当然,因为很多公司都使用云服务,大家很难接触到 RAID 这个概念,更多的可能是普通云盘、SSD 云盘酱紫的概念。
安全
一台 Linux 系统初始化环境后需要做一些什么安全工作?
-
1、添加普通用户登陆,禁止 root 用户登陆,更改 SSH 端口号。
修改 SSH 端口不一定绝对哈。当然,如果要暴露在外网,建议改下。l
-
2、服务器使用密钥登陆,禁止密码登陆。
-
3、开启防火墙,关闭 SElinux ,根据业务需求设置相应的防火墙规则。
-
4、装 fail2ban 这种防止 SSH 暴力破击的软件。
-
5、设置只允许公司办公网出口 IP 能登陆服务器(看公司实际需要)
也可以安装 VPN 等软件,只允许连接 VPN 到服务器上。
-
6、修改历史命令记录的条数为 10 条。
-
7、只允许有需要的服务器可以访问外网,其它全部禁止。
-
8、做好软件层面的防护。
- 8.1 设置 nginx_waf 模块防止 SQL 注入。
- 8.2 把 Web 服务使用 www 用户启动,更改网站目录的所有者和所属组为 www 。
什么叫 CC 攻击?什么叫 DDOS 攻击?
-
CC 攻击,主要是用来攻击页面的,模拟多个用户不停的对你的页面进行访问,从而使你的系统资源消耗殆尽。
-
DDOS 攻击,中文名叫分布式拒绝服务攻击,指借助服务器技术将多个计算机联合起来作为攻击平台,来对一个或多个目标发动 DDOS 攻击。
攻击,即是通过大量合法的请求占用大量网络资源,以达到瘫痪网络的目的。
防 CC、DDOS 攻击,这些只能是用硬件防火墙做流量清洗,将攻击流量引入黑洞。
流量清洗这一块,主要是买 ISP 服务商的防攻击的服务就可以,机房一般有空余流量,我们一般是买服务,毕竟攻击不会是持续长时间。
什么是网站数据库注入?
- 由于程序员的水平及经验参差不齐,大部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断。
- 应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的 SQL 注入。
- SQL注入,是从正常的 WWW 端口访问,而且表面看起来跟一般的 Web 页面访问没什么区别,如果管理员没查看日志的习惯,可能被入侵很长时间都不会发觉。
数据库网页端注入这种,可以考虑使用 nginx_waf 做过滤与预防。
Shell脚本
Shell 脚本是什么?
一个 Shell 脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell 脚本)来完成这些日常工作任务。
在 Linux 操作系统,"/bin/bash"
是默认登录 Shell,是在创建用户时分配的。
使用 chsh 命令可以改变默认的 Shell 。示例如下所示:
## chsh <用户名> -s <新shell>
## chsh ThinkWon -s /bin/sh
- 1
- 2
注释可以用来描述一个脚本可以做什么和它是如何工作的。每一行注释以 #
开头。例子如下:
#!/bin/bash
## This is a command
echo “I am logged in as $USER”
- 1
- 2
- 3
Shell语法:
可以在 Shell 脚本中使用哪些类型的变量?
在 Shell 脚本,我们可以使用两种类型的变量:
-
系统定义变量
系统变量是由系统系统自己创建的。这些变量通常由大写字母组成,可以通过
set
命令查看。 -
用户定义变量
用户变量由系统用户来生成和定义,变量的值可以通过命令
"echo $<变量名>"
查看。
在写一个 Shell 脚本时,如果你想要检查前一命令是否执行成功,在 if
条件中使用 $?
可以来检查前一命令的结束状态。
-
如果结束状态是 0 ,说明前一个命令执行成功。例如:
root@localhost:~## ls /usr/bin/shar /usr/bin/shar root@localhost:~## echo $? 0
- 1
- 2
- 3
- 4
-
如果结束状态不是0,说明命令执行失败。例如:
root@localhost:~## ls /usr/bin/share ls: cannot access /usr/bin/share: No such file or directory root@localhost:~## echo $? 2
- 1
- 2
- 3
- 4
下面的表列出了 Bourne Shell 为命令行设置的特殊变量。
内建变量 解释
$0 命令行中的脚本名字
$1 第一个命令行参数
$2 第二个命令行参数
….. …….
$9 第九个命令行参数
$## 命令行参数的数量
$* 所有命令行参数,以空格隔开
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
unset
命令用于取消变量或取消变量赋值。语法如下所示:
## unset <变量名>
- 1
Shell 脚本中 if
语法如何嵌套?
if [ 条件 ]
then
命令1
命令2
…..
else
if [ 条件 ]
then
命令1
命令2
….
else
命令1
命令2
…..
fi
fi
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
在 if-then
中使用测试命令( -gt
等)来比较两个数字。例如:
#!/bin/bash
x=10
y=20
if [ $x -gt $y ]
then
echo “x is greater than y”
else
echo “y is greater than x”
fi
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
Shell 脚本中 case
语句的语法?
基础语法如下:
case 变量 in
值1)
命令1
命令2
…..
最后命令
!!
值2)
命令1
命令2
……
最后命令
;;
esac
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
Shell 脚本中 for
循环语法?
基础语法如下:
for 变量 in 循环列表
do
命令1
命令2
….
最后命令
done
- 1
- 2
- 3
- 4
- 5
- 6
- 7
Shell 脚本中 while
循环语法?
如同 for
循环,while
循环只要条件成立就重复它的命令块。 不同于 for
循环,while
循环会不断迭代,直到它的条件不为真。
基础语法:
while [ 条件 ]
do
命令…
done