Linux学习心得
Linux是开源的,开源就是免费,不用花钱去买;简单易学,但是要多多练习,熟练掌握基础命令,学习中遇到的问题,去问问那些高手,或者去问老师,然后把掌握不牢固的记下来,勤加练习;掌握不熟练没关系,多练习敲几遍命令,一切都OK了。
Linux的发展史
1965 年之前的时候,电脑并不像现在一样普遍,它可不是一般人能碰的起的,除非是军事或者学院的研究机构,而且当时大型主机至多能提供30台终端(30个键盘、显示器),连接一台电脑。
为了解决数量不够用的问题:
#1965 年左后由贝尔实验室加入了 麻省理工学院 以及 通用电气 合作的计划 —— 该计划要建立一套 多使用者(multi-user)、 多任务(multi-processor) 、 多层次(multi-level) 的 MULTICS 操作系统,想让大型主机支持 300 台终端。
#1969 年前后这个项目进度缓慢,资金短缺,贝尔实验室退出了研究。
#1969 年从这个项目中退出的 Ken Thompson 当时在实验室无聊时,为了让一台空闲的电脑上能够运行 “星际旅行(Space Travel)” 游戏,在 8 月份左右趁着其妻子探亲的时间, 用了 1 个月的时间 ,使用汇编写出了 Unix 操作系统的原型。
#1970 年,美国贝尔实验室的 Ken Thompson ,以 BCPL 语言为基础,设计出很简单且很接近硬件的 B 语言 (取BCPL的首字母),并且他用 B 语言 写了第一个 UNIX 操作系统。
#1971 年,同样酷爱 “星际旅行(Space Travel)” 的 Dennis M.Ritchie 为了能早点儿玩上游戏,加入了 Thompson 的开发项目,合作开发 UNIX,他的主要工作是改造 B 语言 ,因为 B 语言 的跨平台性较差。
#1972 年, Dennis M.Ritchie 在 B 语言 的基础上最终设计出了一种新的语言,他取了 BCPL 的第二个字母作为这种语言的名字,这就是 C 语言 。
1973 年初, C 语言 的主体完成, Thompson 和 Ritchie 迫不及待地开始用它完全重写了现在大名鼎鼎的 Unix 操作系统!。
#1991 年 林纳斯(Linus) 就读于赫尔辛基大学期间,对 Unix 产生浓厚兴趣,尝试着在Minix 上做一些开发工作。
#因为 Minix 只是教学使用,因此功能并不强,林纳斯 经常要用他的终端 仿真器(Terminal Emulator) 去访问大学主机上的新闻组和邮件,为了方便读写和下载文件,他自己编写了磁盘驱动程序和文件系统,这些在后来成为了 Linux 第一个内核的雏形,当时,他年仅 21 岁!。
#林纳斯 利用 GNU 的 bash 当做开发环境,gcc 当做编译工具,编写了 Linux 内核,一开始 Linux 并不能兼容 Unix。
#即 Unix 上跑的应用程序不能在 Linux 上跑,即应用程序与内核之间的接口不一致。
一开始 Linux 只适用于 386,后来经过全世界的网友的帮助,最终能够兼容多种硬件。
Linux6和Linux7对比
防火墙
[CentOS6] iptables
[CentOS7] firewalld
默认数据库
[CentOS6] MySQL
[CentOS7] MariaDB
主机名
[CentOS6] /etc/sysconfig/network
[CentOS7] /etc/hostname
时间同步命令、修改时区、修改语言
[Centos6]
时间同步:ntpq -q
修改时区:vim /etc/sysconfig/clock
修改语言:vim /etc/sysconfig/i18n
[Centos7]
时间同步:chronyc sources
修改时区:timedatectl set-timezone Asia/Shanghai
修改语言:localectl set-locale LANG=zh_CN.UTF-8
修改主机名
[Centos6]修改的配置文件/etc/sysconfig/network 中的HOSTNAME (修改完成后永久成效)
[Centos7](永久生效)
方式一:配置文件/etc/hostname 直接编辑vim /etc/hostname
方式二:采用命令的方式:hostnamectl sethostname 主机名
网络服务的管理方式
[Centos6]
启动服务 service 服务名 start
停止服务 service 服务名 stop
查看服务状态 service 服务名 status
重启服务 service 服务名 restart
设置服务的开机自启 chkconfig 服务名称 on
设置服务的开机非自启 chkconfig 服务名称 off
查看所有服务的自启状态 chkconfig --list
[Centos7]
启动服务 systemctl start 服务名
停止服务 systemctl stop 服务名
查看服务状态 systemctl status 服务名
重启服务 systemctl restart 服务名
设置服务的开机自启 systemctl enable 服务名称
设置服务的开机非自启 systemctl disable 服务名称
查看所有服务的自启状态 systemctl list-unit-files
yum的区别
[Centos6]:默认情况下会从国外的镜像源网站获取安装包,比较慢,如果想安装下载快的话,需要去修改CentOS6-Base.repo ,使用CentOS6-Base-163.repo替换。
[Centos7]版本中:就近原则,从离得比较近的镜像源服务器获取安装包并下载安装
Linux的命令:
man [命令或配置文件] (功能描述:获得帮助信息)
help 命令 (功能描述:获得shell内置命令的帮助信息)
pwd (功能描述:显示当前工作目录的绝对路径)
ls -a 全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用)
ls -l 长数据串列出,包含文件的属性与权限等等数据;(常用)
cd 绝对路径 切换路径
cd相对路径 切换路径
cd ~或者cd 回到自己的家目录
cd - 回到上一次所在目录
cd … 回到当前目录的上一级目录
cd -P 跳转到实际物理路径,而非快捷方式路径
mkdir [选项] 要创建的目录
mkdir -p 创建多层目录
rmdir 要删除的空目录
创建空文件: touch 文件名称
cp [选项] 源文件 目标文件 (功能描述:复制源文件文件到目标文件)
cp -r 递归复制整个文件夹
ln -s file1 lnk1 创建一个指向文件或目录的软链接
rm -f file1 删除一个叫做 ‘file1’ 的文件’
rmdir dir1 删除一个叫做 ‘dir1’ 的目录’
rm -rf dir1 删除一个叫做 ‘dir1’ 的目录并同时删除其内容
rm -rf dir1 dir2 同时删除两个目录及它们的内容
mv dir1 new_dir 重命名/移动 一个目录
find -name<查询方式> 按照指定的文件名查找模式查找文件
find -user<用户名> 查找属于指定用户名所有文件
find -size<文件大小> 按照指定的文件大小查找文件。
mount /dev/hda2 /mnt/hda2 挂载一个叫做hda2的盘 - 确定目录 ‘/ mnt/hda2’ 已经存在
umount /dev/hda2 卸载一个叫做hda2的盘 - 先从挂载点 ‘/ mnt/hda2’ 退出
du 查看指定目录的磁盘占用情况
du -h /目录 查询指定目录的磁盘暂用情况,默认为当前目录
-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
–max-depth=1 子目录深度
-c 列出明细的同时,增加汇总值
groupadd group_name 创建一个新用户组
groupdel group_name 删除一个用户组
useradd user1 创建一个新用户
userdel -r user1 删除一个用户 ( ‘-r’ 排除主目录)
passwd 修改口令
passwd user1 修改一个用户的口令 (只允许root执行)
fdisk -l (功能描述:查看磁盘分区详情)
df 选项 (功能描述:列出文件系统的整体磁盘使用量,检查文件系统的磁盘空间占用情况)
ps aux | grep xxx (功能描述:查看系统中所有进程)
ps -ef | grep xxx (功能描述:可以查看子父进程之间的关系)
kill [选项] 进程号 (功能描述:通过进程号杀死进程)
killall 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)
pstree -p 显示进程的PID
pstree -u 显示进程的所属用户
文件的权限 - 使用 “+” 设置权限,使用 “-” 用于取消
ls -lh 显示权限
ls /tmp | pr -T5 -W$COLUMNS 将终端划分成5栏显示
chmod ugo+rwx directory1 设置目录的所有人(u)、群组(g)以及其他人(o)以读(r )、写(w)和执行(x)的权限
chmod go-rwx directory1 删除群组(g)与其他人(o)对目录的读写执行权限
chown user1 file1 改变一个文件的所有人属性
chown -R user1 directory1 改变一个目录的所有人属性并同时改变改目录下所有文件的属性
chgrp group1 file1 改变文件的群组
chown user1:group1 file1 改变一个文件的所有人和群组属性
打包和压缩文件
bunzip2 file1.bz2 解压一个叫做 'file1.bz2’的文件
bzip2 file1 压缩一个叫做 ‘file1’ 的文件
gunzip file1.gz 解压一个叫做 'file1.gz’的文件
gzip file1 压缩一个叫做 'file1’的文件
gzip -9 file1 最大程度压缩
rar a file1.rar test_file 创建一个叫做 ‘file1.rar’ 的包
rar a file1.rar file1 file2 dir1 同时压缩 ‘file1’, ‘file2’ 以及目录 ‘dir1’
rar x file1.rar 解压rar包
unrar x file1.rar 解压rar包
tar -cvf archive.tar file1 创建一个非压缩的 tarball
tar -cvf archive.tar file1 file2 dir1 创建一个包含了 ‘file1’, ‘file2’ 以及 'dir1’的档案文件
tar -tf archive.tar 显示一个包中的内容
tar -xvf archive.tar 释放一个包
tar -xvf archive.tar -C /tmp 将压缩包释放到 /tmp目录下
tar -cvfj archive.tar.bz2 dir1 创建一个bzip2格式的压缩包
tar -jxvf archive.tar.bz2 解压一个bzip2格式的压缩包
tar -cvfz archive.tar.gz dir1 创建一个gzip格式的压缩包
tar -zxvf archive.tar.gz 解压一个gzip格式的压缩包
zip file1.zip file1 创建一个zip格式的压缩包
zip -r file1.zip file1 file2 dir1 将几个文件和目录同时压缩成一个zip格式的压缩包
unzip file1.zip 解压一个zip格式压缩包
cat /etc/passwd 查看创建了哪些用户
date (功能描述:显示当前时间)
date +%Y (功能描述:显示当前年份)
date +%m (功能描述:显示当前月份)
date +%d (功能描述:显示当前是哪一天)
date “+%Y-%m-%d %H:%M:%S” (功能描述:显示年月日时分秒)
more 文件内容分屏查看器
空白键 (space) 代表向下翻一页;
Enter 代表向下翻『一行』;
q 代表立刻离开, more 不再显示该文件内容
Ctrl+F 向下滚动一屏
Ctrl+B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号
less 分屏显示文件内容
空白键 向下翻动一页;
[pagedown] 向下翻动一页
[pageup] 向上翻动一页;
/字串 向下搜寻『字串』的功能;n:向下查找;N:向上查找;
?字串 向上搜寻『字串』的功能;n:向上查找;N:向下查找;
q 离开 less 这个程序;
echo输出内容到控制台
ll >文件 (功能描述:列表的内容写入文件a.txt中(覆盖写))
ll >>文件 (功能描述:列表的内容追加到文件aa.txt的末尾)
cat 文件1 > 文件2 (功能描述:将文件1的内容覆盖到文件2)
echo “内容” >> 文件
top 查看系统健康状态
-d 秒数 指定top命令每隔几秒更新。默认是3秒在top命令的交互模式当中可以执行的命令:
-i 使top不显示任何闲置或者僵死进程。
-p 通过指定监控进程ID来仅仅监控某个进程的状态。
P 以CPU使用率排序,默认就是此项
M 以内存的使用率排序
N 以PID排序
q 退出top
netstat 显示网络统计信息和端口占用情况
netstat -anp | grep 进程号 (功能描述:查看该进程网络信息)
netstat -nlp | grep 端口号 (功能描述:查看网络端口号占用情况)
-n 拒绝显示别名,能显示数字的全部转化成数字
-p 表示显示哪个进程在调用
-l 仅列出有在listen(监听)的服务状态
crond 服务管理
重新启动crond服务 service crond restart
crontab 定时任务设置
-e 编辑crontab定时任务
-l 查询crontab任务
-r 删除当前用户所有的crontab任务
RPM查询命令(rpm -qa)
rpm -qa (功能描述:查询所安装的所有rpm软件包)
rpm -qi 安装包 (功能描述:查询安装的软件包的详细信息)
由于软件包比较多,一般都会采取过滤。rpm -qa | grep rpm软件包
RPM卸载命令(rpm -e)
rpm -e RPM软件包
rpm -e --nodeps 软件包
-e 卸载软件包
–nodeps 卸载软件时,不检查依赖。这样的话,那些使用该软件包的软件在此之后可能就不能正常工作了。
RPM安装命令(rpm -ivh)
rpm -ivh RPM包全名
-i -i=install,安装
-v -v=verbose,显示详细信息
-h -h=hash,进度条
–nodeps --nodeps,不检测依赖进度
YUM的常用命令
-y 对所有提问都回答“yes”
install 安装rpm软件包
update 更新rpm软件包
check-update 检查是否有可用的更新rpm软件包
remove 删除指定的rpm软件包
list 显示软件包信息
clean 清理yum过期的缓存
deplist 显示yum软件包的所有依赖关系
Linux面试题
1.下面那个用户存放用户密码信息(B)
A./boot B./etc C./var D./dev
2.用于自动补全功能时,输入命令或文件的前1个或后几个字母按什么键(B)
A.ctrl B.tab C.alt D.esc
3.vim退出不保存的命令是(A)
A.:q B.q C.:wq D.:q!
4.解压缩文件mydjango.tar.gz,我们可以用(A)
A.tar -zxvf mydjango.tar.gz
B.tar -xvz mydjango.tar.gz
C.tar -czf mydjango.tar.gz
D.tar - xvf mydjango.tar.gz
5.如果执行命令,chmod 746 file.txt ,那么该文件的权限是(A)
A.rwxr—rw-
B.rw-r—r—
C.—xr—rwx
D.rwxr—r—
6.vim有几种工作模式
命令模式
编辑模式
一般模式
7.如何让某个服务(假如服务名为 nginx)只在3,5两个运行级别开启,其他级别关闭?
答:先关闭所有运行级别:chkconfig nginx off
然后打开35运行级别:chkconfig --level 35 nginx on
8.有一天你突然发现公司网站访问速度变的很慢很慢,你该怎么办呢?
(服务器可以登陆,提示:你可以从系统负载和网卡流量入手)
答:可以从两个方面入手分析:分析系统负载,使用w命令或者uptime命令查看系统负载,如果负载很高,则使用top命令查看CPU,MEM等占用情况,要么是CPU繁忙,要么是内存不够,如果这二者都正常,再去使用sar命令分析网卡流量,分析是不是遭到了攻击。一旦分析出问题的原因,采取对应的措施解决,如决定要不要杀死一些进程,或者禁止一些访问等。
9.说出10个linux常用的指令
ls 查看目录中的文件
cd /home 进入 ‘/ home’ 目录;cd … 返回上一级目录;cd …/… 返回上两级目录
mkdir dir1 创建一个叫做 ‘dir1’ 的目录
rmdir dir1 删除一个叫做 ‘dir1’ 的目录 (只能删除空目录)
rm -f file1 删除一个叫做 ‘file1’ 的文件’,-f 参数,忽略不存在的文件,从不给出提示。
rm -rf /mulu 目录下面文件以及子目录下文件
cp /test1/file1 /test3/file2 如将/test1目录下的file1复制到/test3目录,并将文件名改为file2
mv /test1/file1 /test3/file2 如将/test1目录下的file1移动到/test3 目录,并将文件名改为file2
mv * …/ Linux当前目录所有文件移动到上一级目录
ps -ef|grep xxx 显示进程pid
kill 使用kill命令来终结进程。先使用ps命令找到进程id,使用kill -9命令,终止进程。
tar –xvf file.tar 解压 tar包
unzip file.zip 解压zip
unrar e file.rar 解压rar
free -m 查看服务器内存使用情况
10.如何查看所有java进程
grep是搜索关键字
ps -ef | grep java
-aux 显示所有状态
ps -aux | grep java
11.使用top查看系统资源占用情况时,哪一列表示内存占用呢?
答: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
301 root 20 0 0 0 0 S 0.3 0.0 0:00.08 jbd2/sda3-8
1 root 20 0 2900 1428 1216 S 0.0 0.1 0:01.28 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
VIRT虚拟内存用量
RES物理内存用量
SHR共享内存用量
%MEM内存用量
12.想修改ip,需要编辑哪个配置文件,修改完配置文件后,如何重启网卡,使配置生效?
答:使用vi或者vim编辑器编辑网卡配置文件/etc/sysconfig/network-scripts/ifcft-eth0(如果是eth1文件名为ifcft-eth1),内容如下:
DEVICE=eth0
HWADDR=00:0C:29:06:37:BA
TYPE=Ethernet
UUID=0eea1820-1fe8-4a80-a6f0-39b3d314f8da
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.147.130
NETMASK=255.255.255.0
GATEWAY=192.168.147.2
DNS1=192.168.147.2
DNS2=8.8.8.8
修改网卡后,可以使用命令重启网卡:
ifdown eth0
ifup eth0
也可以重启网络服务:
service network restart