-
- 简介
主流操作系统
MS | MS-DOS | Microsoft Windows | |||
Windows 9.X Kernel | Windows 95 | Windows 98 | |||
Windows NT Kernel | Windows 2000 | Windows XP to 11 | |||
Unix Kernel | Mach Kernel | NEXT | |||
XNU Kernel | Darwin OS | OSX/MacOS | |||
BSD Kernel | IOS | ||||
FreeBSD | Orbis OS | ||||
OpenBSD | |||||
SunOS | Solaris | ||||
Linux Kernel | Fedora | RedHat | CentOS | Rocky | |
Debian | Ubuntu | Mint | |||
Slackware | SUSE | OpenSUSE | |||
Gentoo | Chrome OS | ||||
Arch | Manjaro | ||||
Android |
Linux发行版本
1、内核:Linux内核Kernel目前最新稳定版 3.4 http://www.kernel.org/
2、发行版本:一些厂商以内核为基础,再添加一些软件和文档形成发行版本,例如RedHat Linux,Debian,Ubuntu, Novell/SuSE Linux等。
3、ubuntu Ubuntu版本号由发布的年份和月份(Y.MM)组成,首次发行版本为4.10,最新版本为12.04。
软件安装方式 | 适合用途 | ||
Redhat系列 商业公司维护 使用人数多,资源多 | RHEL(Redhat Enterprise Linux) (Redhat商业版) | 包管理方式采用的是基于RPM(RedHat Package Manager)包的YUM包管理方式,包分发方式是编译好的二进制文件。 | 稳定性好,适合服务器 |
Fedora Core (RHEL测试版) | 关注新技术,不关注稳定性,适合桌面 RHEL的测试平台(试验场) | ||
CentOS(Community Enterprise Operating System) (RHEL社区版) | RHEL的社区克隆版本,稳定性好,配置简单,适合服务器 | ||
Debian系列 社区组织维护 | Debian 社区类Linux的典范,最遵循GNU规范 Stable (Sarge) Testing (Etch) Unstable (Sid) | apt-get/dpkg包管理方式。 包分发方式是编译好的二进制文件。 | 稳定版,适合服务器 |
经过测试的版本 | |||
最新的测试版本,适合桌面 | |||
Ubuntu 基于Gnome的Ubuntu 基于KDE的Kubuntu 基于Xfc的Xubuntu | 使用基于apt的程序包管理器 包分发方式是编译好的二进制文件。 | 基于Debian的unstable版本加强而来,界面友好,容易上手,硬件支持非常全面,最适合做桌面系统。 | |
Gentoo Linux最年轻的发行版本,因此也吸取之前的发行版本的优点,这也是Gentoo被称为最完美的Linux发行版本的原因之一。 | Portage包管理系统。 包分发方式是源代码,必须编译后才能运行,安装较慢,但在经过各种定制的编译参数优化后,能将机器的硬件性能发挥到极致。 | Gentoo是所有Linux发行版本里安装最复杂的,但是又是安装完成后最便于管理的版本,也是在相同硬件环境下运行最快的版本。如果你需要一个桌面系统,而且还想非常灵活的定制自己的Linux系统,那么你完全可以选择Gentoo。 最佳学习对象 | |
FreeBSD 并非Linux系统,但与Linux支持的硬件环境比较一致,采用的软件也比较类似,用户也有许多重合。所以可视为一个Linux版本。 | stable:稳定版 | 采用Ports包管理系统,与Gentoo类似,基于源代码分发,必须在本地机器编后后才能运行,使用比Portage复杂。 | FreeBSD的最大特点就是稳定和高效,是作为服务器操作系统的最佳选择,但对硬件的支持没有Linux完备,所以并不适合作为桌面系统。如果你需要的是一个非常非常稳定的服务器系统,那么你的唯一选择就是FreeBSD。 |
current:测试版 | |||
SUSE 界面华丽 | SUSE商业版 OpenSUSE | 使用Yast来管理软件包 |
嵌入式开发常用debian、Fedora、Ubuntu。
Linux组成
硬件接口层——kernel(内核):是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序。
命令解释层——shell(壳):是系统的用户界面、用户和内核交互的接口、命令解释器。是高级编程语言(shell编程)。
外围应用层——第三方GNU应用程序:标准的Linux操作系统都会有一套应用程序例如X-Window,Open Office等。
下载地址
centos7.9下载地址:
bin (binaries)存放二进制可执行文件(系统必备命令)
boot 存放用于系统引导时使用的各种文件
dev (devices)用于存放设备文件
etc (etcetera)存放系统配置文件
home 存放普通用户文件的根目录
lib (library)存放跟文件系统中的程序运行所需要的共享库及内核模块(类似Windows的dll文件)
lost+found 丢失寻回文件
media 外部设备挂载点
misc 存放用途不明的文件
mnt (mount)系统管理员安装临时文件系统的安装点
net 存放网络相关文件
opt 额外安装软件的目录,如oracle数据库安装路径可选此
proc 系统内存映射,可访此获取系统信息
root 超级用户目录
sbin (super user binaries)存放二进制可执行文件(超级用户的系统管理命令)
selinux Redhat/CentOS特有的目录,selinux安全机制目录
srv (service)存放服务启动后要提取的数据
sys 该目录安装了linux2.6内核中新出现的sysfs文件系统
tmp (temporary)用于存放各种临时文件
usr (unix shared resources)用于存放共享的系统资源(类似于Windows的Program Files)
var (variable)用于存放运行时需要改变数据的文件(如各种日志文件)
Linux 的软件安装目录
/usr:系统级的目录,可以理解为C:/Windows/,/usr/lib理解为C:/Windows/System32,一般让软件包管理器来管理/usr目录。
/usr/local:用户级的程序目录,可以理解为C:/Progrem Files/,它和/usr目录具有相类似的目录结构。用户自己编译的软件默认会安装到这个目录下。
/opt:用户级的程序目录,可以理解为D:/Software,opt有可选的意思,安装到/opt目录下的程序,它所有的数据、库文件等等都是放在同个目录下面,当你不需要时,直接rm -rf掉即可,不影响系统其他任何设置。在硬盘容量不够时,也可将/opt单独挂载到其他磁盘上使用。
源码放哪里?
/usr/src:系统级的源码目录。
/usr/local/src:用户级的源码目录。
内部命令:属于Shell解析器的一部分
cd 切换目录(change directory)
pwd 显示当前工作目录(print working directory)
help 帮助
外部命令:独立于Shell解析器之外的文件程序
ls 显示文件和目录列表(list)
mkdir 创建目录(make directoriy)
cp 复制文件或目录(copy)
查看帮助文档
内部命令:help + 命令(help cd)
外部命令:man + 命令(man ls)
ls (list)以网格模式列出当前目录下的文件及文件夹(蓝文件夹,黑文件,绿可执行文件,红压缩包)
-l (long)
-a (all)注意隐藏文件、特殊目录.和..
-t (time)
ll 列出当前目录下的文件以及文件夹(列表模式)(相当于ls -l)(Redhat支持)
ll / 列出根目录下的文件以及文件夹(列表模式)(相当于 )(Redhat支持)
ls -a 或 ll -a 陈列时显示隐藏文件
find . 列出当前目录和子目录下所有文件和文件夹
find 路径名 -name "关键字" 查找文件
ls -l | grep "^-" | wc -l 统计当前目录下文件的个数(不包括目录)
ls -lR| grep "^-" | wc -l 统计当前目录下文件的个数(包括子目录)
ls -lR | grep "^d" | wc -l 查看某目录下文件夹(目录)的个数(包括子目录)
cd 目录名 进入指定目录
cd / 切换到根目录
cd 切换到主目录(回老家)(亦可cd ~)
cd .. 切换到上级目录
cd - 切换到上次目录
pwd 显示当前工作目录(print working directory)
mkdir 目录名 创建目录(make directoriy)
-p 父目录不存在情况下先生成父目录(parents)
touch 文件名 创建空文件
ln 链接名 文件名 创建链接
-s 对源文件建立符号连接,而非硬连接(symbolic)
cp 文件名 目录名或文件名 拷贝文件到目录或同时改名(copy)
cp -r 目录名 目录名 拷贝目录到目录(r:递归recursive)
mv 文件名或目录名 目录名或文件名 移动文件或目录到目录或同时改名(move)
注:mv只能修改单个文件名,使用rename命令加通配符可批量改名:
例如有foo1 foo2 foo3...到foo99的文件,如果想把数字部分都改为2个字符等宽,只需要把1位数字1、2、3...到9改为01、02、03...到09,使用下面命令即可:
rename foo foo0 foo?
其中?代表一个字符。除了问号,通配符还有*,代表任意字符,如若要将*.htm文件改为*.html,使用下面命令:
rename .htm .html *.htm
补充:如果只用于单个文件名的修改,使用方法和mv一样,可以省略第三个参数。
scp 文件名 用户名@IP:文件名 拷贝文件到指定系统的指定路径
scp -r 目录名 用户名@IP:目录名 拷贝目录到指定系统的指定目录
rm 文件名 删除文件(remove)
rmdir 空目录名 删除空目录(remove directoriy)
rm -rf 目录名 递归(recursive)且强制(force)删除目录(强制删除无需逐一确认)
echo 内容 终端输出($开头的内容是变量)
echo "hello" > hello.txt 输出 hello 到文件 hello.txt (重写模式)
echo "hello" >> hello.txt 输出 hello 到文件 hello.txt (追加模式)
cat 文件名 显示文本文件内容 (catenate)
more 文件名 分页查看文件内容(按空格下一页,按Enter逐行,按q退出)
less 文件名 分页查看文件内容(按空格下一页,按Enter逐行,按Shift + g到页尾,按g到页首,按/查找,按q退出)
tail 文件名 查看文件尾部内容
tail -20 文件名 查看文件尾部内容,显示20行(默认10行)(完整写法:tail -n 20 文件名)
tail -f 文件名 查看文件尾部内容(实时刷新),常用于实时查看日(fellow?:循环读取?)
head 文件名 查看文件头部内容(默认10行)
head -20 文件名 查看文件头部内容,显示20行(默认10行)(完整写法:head -n 20 文件名)
wc 文件名 统计文本的行数、字数、字节数(word count)(一个字被定义为由空白、跳格或换行字符分隔的字符串)
-l 或 --lines 只显示行数
-w 或 --words 只显示字数
-c 或 --bytes 或 --chars 只显示字节数
./可执行文件名 执行当前目录下的指定的可执行文件
压缩:
gzip
-d 将压缩文件解压(decompress)
-l 显示压缩文件的大小,未压缩文件的大小,压缩比(list)
-v 显示文件名和压缩比(verbose)
-数字 指定压缩速度,-1或--fast表最快压缩(低压缩比),-9或--best表最慢压缩(高压缩比)。系统默认-6
gzip * 把当前目录下的每个非压缩文件压缩成.gz文件(删除源文件)
gzip -l * 显示前目录下的每个压缩文件的大小,未压缩文件的大小,压缩比(list)
gzip -dv * 把当前目录下的每个压缩文件解压(删除原压缩文件)
gzip -rv 目录名 递归压缩目录内所有文件并查看压缩情况(r:递归;v:查看)
gzip -dr 目录名 递归解压目录内所有文件(d:解压;r:递归)
bzip2
-c 将压缩的过程产生的数据输出到屏幕上
-d 解压缩的参数(decompress)
-z 压缩的参数(compress)
-数字 指定压缩速度,-1或--fast表最快压缩(低压缩比),-9或--best表最慢压缩(高压缩比)。系统默认-6
归档:
tar
-c 建立一个压缩文件的参数指令(create)
-x 解开一个压缩文件的参数指令(extract)
-z 是否需要用 gzip 压缩
-j 是否需要用 bzip2 压缩
-v 压缩的过程中显示文件(verbose)
-f 使用档名,在 f 之后要立即接档名(file)
tar -cvf 新包名.tar 文件1 文件2 打包文件
tar -cvf 新包名.tar 目录 打包目录
tar -xvf 新包名.tar 解包到当前文件夹
tar -zcvf 新压缩包名.tar.gz 文件1 文件2 打包文件并以gzip压缩
tar -zcvf 新压缩包名.tar.gz 目录 打包目录并以gzip压缩
tar -zxvf 压缩包名.tar.gz 解压并解包到当前文件夹
tar -zxvf 压缩包名.tar.gz -C 目录 解压并解包到指定目录下
-
- 命令
权限描述:
三种基本权限: r 读权限(read); w 写权限(write); x 执行权限(execute)
示例的完整信息:一个文件,所属用户具有读写执行权限;所属组的用户有读写权限,没有执行权限;其他用户只有读权限 |
su 以root身份运行(不切换环境变量)
su - 以root身份运行(同时切换环境变量)
su 用户名 以指定用户身份运行(不切换环境变量)
su - 用户名 以指定用户身份运行(同时切换环境变量)
sudo 执行root权限的命令
sudo vi 文件名 以root身份编辑文件
sudo passwd 设置su密码
visudo 配置sudo权限(vi /etc/sudoers)
编辑 /etc/sudoers 文件,将hadoop用户添加到sudoers文件中去:
root ALL=(ALL) ALL
hadoop ALL=(ALL) ALL
chmod 修改文件或目录的权限(change mode)(-R:递归(大小写?))
chmod 707 文件名 修改指定文件的权限为对所属用户提供rwx权限,对所属组用户提供---权限,对其他用户提供rwx权限
chmod u+w 文件名 修改指定文件的权限为对所属用户(u)增加可写权限
chmod g-x 文件名 修改指定文件的权限为对所属组成员用户(g)删除可执行权限
chmod o=r 文件名 修改指定文件的权限为对其他用户(o)使具有可读权限
chmod +rwx 文件名 修改指定文件的权限为对所有用户(a)可读可写可执行(省略了默认值a:chmod a+rwx)
chown 用户名:用户组 文件名 修改指定文件的所属用户和所属组(change owner)
chgrp 用户组 文件名 修改指定文件的所属组(change group)
nohup 命令 > 文件路径 2>&1 & 以后台方式运行命令,并将该命令的标准错误输出重定向到标准输出的引用,即前面指定的文件路径
-
- 命令
配置文件
保存用户信息的文件:/etc/passwd
每一行的意思: 用户名:密码:用户id:用户所在组id:备注:用户家目录:shell命令所在目录
例如: root:x:0:0:root:/root:/bin/bash
只查某一用户的信息:cat /etc/passwd|grep 用户名
保存密码的文件:/etc/shadow
保存用户组的文件:/etc/group
每一行的意思: 用户组:用户组密码:用户组id:用户组所包含的用户
例如: sys:x:3:bin,adm
只查某一用户组的信息:cat /etc/group|grep 组名
保存用户组密码的文件:/etc/gshadow
用户配置文件:/etc/default/useradd
/etc/passwd格式
使用命令:man 5 passwd
account:password:UID:GID:GECOS:directory:shell
用户名 | 用户登陆系统的用户名 |
密码 | 密码位 |
UID | 用户标示号 |
GID | 默认组标示号 |
描述信息 | 存放用户的描述信息 |
宿主目录 | 用户登陆系统的默认目录,默认是在/home/下 |
命令解析器 | 用户使用的Shell,默认是bash |
Linux用户分类
超级用户:(root,UID=0)
普通用户:(UID在500到60000)
伪用户:(UID在1到499)
系统和服务相关的:bin、daemon、shutdown等
进程相关的:mail、news、games等
为用户不能登陆系统,而且没有宿主目录
/etc/shadow格式
查看命令:man 5 shadow
用户名 | 登陆系统的用户名 |
密码 | 加密密码 |
最后一次修改时间 | 用户最后一次修改密码距现在的天数,从1970-1-1起 |
最小时间间隔 | 两次修改密码之间的最小天数 |
最大时间间隔 | 密码有效天数 |
警告时间 | 从系统警告到密码失效的天数 |
账号闲置时间 | 账号闲置时间 |
失效时间 | 密码失效的天数 |
标志 | 标志 |
用户组
每个用户至少属于一个用户组
每个用户组可以包含多个用户
同一个用户组的用户享有该组共有的权限
/etc/group格式
组名 | 用的所在的组 |
组密码 | 密码位,一般不使用 |
GID | 主标示号 |
组内用户列表 | 属于改组的用户列表 |
常用命令
useradd 用户名 添加用户(必须设置密码才能正常登陆)
-u 指定userID(uid)
-g 指定所属的组名(gid)
-G 指定多个组,用逗号分开(Groups)
-c 用户描述(comment)
-e 失效时间(expire date)
例子:useradd -u 888 -g users -G sys,root -c "hr zhang" zhangsan
passwd 用户名 修改用户密码
usermod -d 目录名 用户名 修改用户主目录(要事先创建目录,并拷入环境变量文件)(modify)
usermod -l 新名 旧名 修改用户名(login)
usermod -g 组名 用户名 给用户修改组
usermod -G 组名1 组名2 … 用户名 给用户添加组
usermod -L 用户名 锁定用户
usermod -U 用户名 解锁用户
userdel 用户名 删除用户
userdel -r 用户名 删除用户同时删除主目录(remove)
whoami 我是谁
groups 查看当前用户所属组
groups 用户 查看指定用户所属组
groupadd 组名 添加用户组(-g:指定gid)
groupmod 修改用户组信息(-n:更改组名(name))
groupdel 组名 删除用户组
案例:修改某用户的主文件夹
1)以root身份登陆
2)在/home下建一文件夹(例如twx1)准备用作目标用户(例如twx1)的新主文件夹
3)修改/etc/passwd文件内容:twx1:x:1001:1001::/home/twx-one:/bin/bash,将twx-one改为twx1
或者:usermod -d /home/twx1 twx1
4)拷贝原twx-one文件夹内所有文件(包括隐藏文件)至twx1文件夹,并修改所属用户和所属用户组为twx1
SecureCRT连接Ubuntu报The remote system refused the connection.解决方案
进入Ubuntu系统,终端中敲入以下命令:
ps -ef|grep ssh
发现只有ssh-agent进程,而没有sshd进程,缺省情况下没有安装ssh-server
在终端中敲入以下命名安装openssh-server即可:
sudo apt-get install openssh-server
安装完毕后再次使用ps -ef|grep ssh命令查看sshd进程是否运行,如果正常运行使用SecureCRT重新尝试连接即可。
-
- 命令
Linux系统登陆的三种方式:图形界面、shell界面、远程登陆SSH
vi /etc/inittab 编辑默认启动界面(3为字符界面模式,5为图形界面模式)shutdown 关机
shutdown -r 关机后立即重启
shutdown -h 关机后不重新启动
halt (不安全)不理会各项服务,直接执行硬件关机
reboot 重新启动
init 0 关机(会先关闭运行的服务,用户进程和守护进程,最终关机)
init 1 重启
init 3 关闭当前界面并启动字符界面
init 5 或 startx 关闭当前界面并启动图形界面
# 0 - 停机(千万不能把initdefault设置为0)
# 1 - 单用户模式
# 2 - 多用户,没有 NFS
# 3 - 完全多用户模式(标准的运行级)
# 4 - 没有用到
# 5 - X11(xwindow)
# 6 - 重启(千万不要把initdefault设置为6)
top 实时显示当前系统中耗费资源最多的进程
ps 显示瞬时进程快照
-e /-A 显示所有进程,环境变量
-f 全格式
-a 显示所有用户的所有进程(包括其它用户)
-u 按用户名和启动时间的顺序来显示进程
-x 显示无控制终端的进程
ps -ef 查看系统中当前瞬间的进程信息快照
ps -ef|grep myshell.sh 搜索myshell进程的信息
free 显示内存和交换空间使用情况(默认单位KB) -b设置单位B -m设置单位MB -s 秒数 设置刷新时间
kill 进程号 按进程号杀进程
kill -9 进程号 绝杀!慎用!
killall 进程名 按名称杀进程
df -h 显示文件系统磁盘空间使用情况
du 查看当前目录下各级文件夹和文件大小
-h 文件大小以K,M,G为单位显示(human-readable)
-s 只显示各档案大小的总合(summarize)
du -sh 查看当前目录总大小
du -sh * 查看所有子目录大小
-
- 命令
ifconfig或ip addr 查看本地连接(/sbin/ifconfig)
netstat(-natp 或 -nltp) 查看网络相关信息
-a 显示所有连接和监听端口
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在Listen(监听)的服务状态
-p 显示建立相关链接的程序名
netstat -tunlp|grep 端口号 用于查看指定端口号的进程情况
ping 测试网络的连通性(通过发送Internet控制消息协议(ICMP)回响请求消息来验证与另一台TCP/IP计算机的IP级连接)
setup 进入设置(CentOS 7的命令为 nmtui ),可修改本机网络配置(重启网络服务生效)
service network status 查看网络设备
service network restart 重启网络服务(执行后终端会被断开)
service network stop 停止网络服务
lsof -i 列出当前系统打开的文件(list open files)。
lsof输出各列信息的意义:
COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
lsof filename.txt 显示开启文件filename.txt的进程
lsof -i 显示符合条件的进程情况
lsof -i :22 显示22端口现在运行什么程序
lsof -c abc 显示abc进程现在打开的文件
lsof -g gid 显示归属gid的进程情况
lsof +d /usr/local/ 显示目录下被进程开启的文件
lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长
lsof -d 4 显示使用fd为4的进程
修改ip地址的配置:
修改以下配置文件即可改ip地址:
vi /etc/sysconfig/network-scripts/ifcfg-网络名
或者用setup指令通过一个带提示的伪图形界面来修改
修改主机名
vi /etc/sysconfig/network 修改其中的hostname配置项:
HOSTNAME=yun12-01
要想立即生效,可以执行指令:
hostname nidezhujiming
管理地址映射:
vi /etc/hosts,添加以下内容:
192.168.2.250 域名或主机名
防火墙:
service iptables start 开启防火墙(重启后失效)
service iptables stop 停止防火墙(重启后失效)
service iptables restart 重启防火墙(重启后失效)
service iptables status 查看防火墙
chkconfig iptables --list 查看防火墙自启模式(3为字符界面模式,5为图形界面模式)
chkconfig iptables off 关闭防火墙随系统启动
chkconfig iptables on 开启防火墙随系统启动
CentOS 7防火墙:
centos从7开始默认用的是firewalld,这个是基于iptables的,虽然有iptables的核心,但是iptables的服务是没安装的。所以你只要停止firewalld服务即可:sudo systemctl stop firewalld.service && sudo systemctl disable firewalld.service
如果你要改用iptables的话,需要安装iptables服务:
sudo yum install iptables-services
sudo systemctl enable iptables && sudo systemctl enable ip6tables
sudo systemctl start iptables && sudo systemctl start ip6tables
firewall-cmd --zone=public --add-port=20/tcp -permanent 将20端口加入firewalld允许列表中
-
- vi命令
vi / vim是Unix / Linux上最常用的文本编辑器而且功能非常强大。
进入vi的命令
vi filename :打开或新建文件,并将光标置于第一行首
vi +n filename :打开文件,并将光标置于第n行首
vi + filename :打开文件,并将光标置于最后一行首
vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename....filename :打开多个文件,依次进行编辑
翻滚屏幕命令
Ctrl+u:向文件首翻半屏
Ctrl+d:向文件尾翻半屏
Ctrl+f:向文件尾翻一屏
Ctrl+b;向文件首翻一屏
nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。
移动光标命令
h :光标左移一个字符
l :光标右移一个字符
space:光标右移一个字符
Backspace:光标左移一个字符
k或Ctrl+p:光标上移一行
j或Ctrl+n :光标下移一行
Enter :光标下移一行
w或W :光标右移一个字至字首
b或B :光标左移一个字至字首
e或E :光标右移一个字至字尾
) :光标移至句尾
( :光标移至句首
}:光标移至段落开头
{:光标移至段落结尾
nG:光标移至第n行首
n+:光标下移n行
n-:光标上移n行
n$:光标移至第n行尾
H :光标移至屏幕顶行
M :光标移至屏幕中间行
L :光标移至屏幕最后行
0:(注意是数字零)光标移至当前行首
$:光标移至当前行尾
定位命令
:set nu 显示行号
:set nonu 取消行号
gg 到文本的第一行
G 到文本的最后一行
:行号 到文本的指定行
插入命令
i:在光标前插入
I:在当前行首插入
a:在光标后插入
A:在当前行尾插入
o:在当前行之下插入新行
O:在当前行之上插入新行
s:从当前光标位置处开始,以输入的文本替代指定数目的字符
S:删除指定数目的行,并以所输入文本代替之
ncw 或 nCW:修改指定数目的字
nCC:修改指定数目的行
删除命令
x:删除光标所在处字符
数x:删除光标所在处起n个字符
X:删除光标前的一个字符
数X:删除光标前的n个字符
d0:删至行首(不含光标所在处)
d$ 或 D:删至行尾(含光标所在处)
dd:删除当前行
数dd 或 数dw 或 数dW:删除当前行开始的n行
dG:删除当前行至末尾行的所有内容
:数,数d:删除指定范围的行
Ctrl+u:删除输入方式下所输入的文本
搜索及替换命令
/pattern:从光标开始处向文件尾搜索pattern
?pattern:从光标开始处向文件首搜索pattern
n:在同一方向重复上一次搜索命令
N:在反方向上重复上一次搜索命令
r:替换当前字符
R:从当前字符开始替换,按Esc键结束
:s/p1/p2/g:将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g:将文件中所有p1均用p2替换
选项设置
all:列出所有选项设置情况
term:设置终端类型
ignorance:在搜索中忽略大小写
list:显示制表位(Ctrl+I)和行尾标志($)
number:显示行号
report:显示由面向行的命令修改过的数目
terse:显示简短的警告信息
warn:在转到别的文件时若没保存当前文件则显示NO write信息
nomagic:允许在搜索模式中,使用前面不带“\”的特殊字符
nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始
mesg:允许vi显示其他用户用write写到自己终端上的信息
底行命令
:n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下
:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下
:n1,n2 d :将n1行到n2行之间的内容删除
:w :保存当前文件
:wq:保存且退出。快捷键ZZ
:wq!:强制保存且退出!
:e filename:打开文件filename进行编辑
:x:保存当前文件并退出
:q:退出vi
:q!:不保存文件并退出vi
:!command:执行shell命令command
:n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入
:r!command:将命令command的输出结果放到当前行
选择文本操作
v:进入字符可视模式
V:进入行可视模式
Ctrl + v:进入块可视模式
寄存器操作
yy:复制当前行
p:粘贴所复制的行
"?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字
"?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字
"?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字
"?p:取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字
ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。
撤销与重做
u:撤销
Ctrl + r:重做
date 显示时间
date -s 时间字符串 设置时间
cal 显示当前月份日历
cal -y 年 显示某年的日历
* 通配符
tab 命令补全
↑/↓ 找回写过的命令
Ctrl + c 停止当前进程
Ctrl + r 查看命令历史
Ctrl + l 清屏,与clear命令作用相同
clear 清屏
exit 退出终端
命令 --help 命令帮助
put 文件上传
注1:以根(通常习惯称为root)"/" 为开始的路径是绝对路径,不以"/" 开始的是相对路径。
注2:参数可连写
1. 查找所有".h"文件
find /PATH -name "*.h"
2. 查找所有".h"文件中的含有"helloworld"字符串的文件
find /PATH -name "*.h" -exec grep -in "helloworld" {} \;
find /PATH -name "*.h" | xargs grep -in "helloworld"
3. 查找所有".h"和".c"文件中的含有"helloworld"字符串的文件
find /PATH /( -name "*.h" -or -name "*.c" /) -exec grep -in "helloworld" {} \;
4. 查找非备份文件中的含有"helloworld"字符串的文件
find /PATH /( -not -name "*~" /) -exec grep -in "helloworld" {} \;
注:/PATH为查找路径,默认为当前路径。带-exec参数时必须以\;结尾,否则会提示“find: 遗漏“-exec”的参数”。
使用find和xargs
1. find pathname -options [-print -exec -ok]
-optinos
1)-name:按照文件名查找
find ~ -name “*.txt” -print
find ~ -name “[a-z][0-9].txt” -print
2)-perm:按照权限查找文件
find ~ -perm 755 -print 查找权限为755的文件
find ~ -perm 007 -print 查找o位置上具有7权限的文件
find ~ -perm 4000 -print 查找具有suid的文件
3)-prune
不在当前目录下查找
4)-user和-nouser
find ~ -user zhao -print 查找文件属主是zhao的文件
find ~ -nouser -print 查找文件属主已经被删除的文件
5)-group和-nogroup
find ~ -group zhao -print 查找文件群组是zhao的文件
6)按照时间
find ~ -mtime -5 -print 文件更改时间在5天内的文件
find ~ -mtime +3 -print 文件更改时间在3天前的文件
find ~ -newer file1 -print 查找比文件file1新的文件
7)按照类型查找
find ~ -type d -print 查找所有目录
8)按照大小
find ~ -size +1000000C -print 查找文件大小大于1000000字节(1M)的文件
9)查找位于本文件系统里面的文件
find / -name “*.txt” -mount -print
-exec,-ok:find命令对于匹配文件执行该参数所给出shell命令,相应命令形式为: ‘command’ {} \;
-ok 在执行命令前要确认
find ~ -type f -exec ls -l {} \;
find / -name “*.log” -mtime +5 -ok rm {} \;
find . -name core -exec rm {} \;
使用-x dev参数
防止find搜索其他分区
find . -size 0 -exec rm {} \;
删除尺寸为0的文件
2. xargs与-exec功能类似
find ~ -type f | xargs ls -l
find / -name “*.log” -type f -print| xargs grep -i DB0
find . -type f |xargs grep -i “Mary”
在所有文件中检索字符串Mary
ls *~ |xargs rm -rf
删除所有以~结尾的文件
svn过滤svn文件夹
1.使用管道进行双层“过滤”,其中第二次grep使用了-v选项,即逆向匹配,打印出不匹配的行
grep -r 'function_name' * | grep -v '.svn'
2.或者更简单一些,直接使用--exclude-dir选项,即指定排除目录,注意svn前的 \.
grep -r --exclude-dir=\.svn 'function_name' *
grep多个过滤条件
1、或操作
grep -E '123|abc' filename // 找出文件(filename)中包含123或者包含abc的行
egrep '123|abc' filename // 用egrep同样可以实现
awk '/123|abc/' filename // awk 的实现方式
2、与操作
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
3、其他操作
grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
find过滤svn文件夹
find -type f ! -path '*/.svn/*'
rpm命令
RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括RedHat、CentOS、SUSE等Linux的分发版本都有采用,可以算是公认的行业标准了。RPM文件在Linux系统中的安装最为简便。
rpm命令的常用参数
-i 安装应用程序(install)
-e 卸载应用程序(erase)
-vh 显示安装进度;(verbose hash)
-U 升级软件包;(update)
-qa 显示所有已安装软件包(query all)
-qa|grep 名称 显示包含该名称的所有已安装软件包(query all)
例子:rmp -ivh gcc-c++-4.4.7-3.el6.x86_64.rpm
yum命令
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE、CentOS中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
例子(需要上网,没有网络可以建本地源):
yum install gcc-c++
yum remove gcc-c++
yum update gcc-c++
yum -y install wget 安装wget(解决-bash: wget: command not found问题)
安装mysql
查看系统有没有安装mysql:
rpm -qa | grep mysql
安装mysql:
sudo -ivh MySQL-server.xxx.rpm
发现了冲突包,用这条指令去查询存在哪些冲突包:
sudo rpm -qa | grep mysql
然后删除:
sudo rpm -e mysql-libs-5.1.66-2.el6_3.i686
发现有依赖关系不能删,这样做:
sudo rpm -e mysql-libs-5.1.66-2.el6_3.i686 --nodeps
/usr/bin/mysql_secure_installation
查看myslq的相关配置:
1、ps ax | grep '[m]ysqld'
2、cat /proc/$(pidof mysqld)/cmdline | tr '\0' '\n'
安装Tomcat
注意:Tomcat启动需要JDK,在这里我没有安装,使用系统自带的OpenJDK Runtime Environment (rhel-2.6.14.10.el6-x86_64 u181-b00)
下载解压安装
wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.5/bin/apache-tomcat-10.1.5.tar.gz
tar -zxvf apache-tomcat-10.1.5.tar.gz
mv apache-tomcat-10.1.5 /usr/local/tomcat
查看防火墙状态是否处于启用中
firewall-cmd --state
开启防火墙
systemctl start firewalld.service
查看防火墙启用端口
netstat -ntlp 或:firewall-cmd --list-ports
打开单个端口:
firewall-cmd --zone=public --add-port=80/tcp --permanent
或者
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
/etc/rc.d/init.d/iptables save
打开多个端口:
firewall-cmd --zone=public --add-port=20000-29999/tcp --permanent
设置防火墙开机自启
systemctl enable firewalld.service
重启防火墙:
systemctl restart firewalld.service
查看防火墙设置开机自启是否成功:
systemctl is-enabled firewalld.service;echo $?
查看80端口是否被占用
sudo netstat -apn | grep 8080
被占用就干掉:
kill -9 -XXXXX
启动Tomcat服务
/usr/local/tomcat/bin/startup.sh
如果关闭Tomcat使用:
/usr/local/tomcat/bin/shutdown.sh
使用curl http://127.0.0.1:8080/ 初测若显示tomcat欢迎页源代码即OK
地址栏输入http://ip地址:8080访问,出现tomcat欢迎页面即OK
其他常用软件安装
软件 | CentOS命令 | Ubuntu命令 | |
Lrzsz | yum install lrzsz | ||
Unzip | yum install -y unzip zip | ||
Redhat中yum下载的软件包存放在哪儿?
可在/etc/yum.conf中查看和更改:
keepcache=1 # 1为保存,0为不保存,默认是0,安装完成后就会被清空掉。
cachedir=/var/cache/yum/$basearch/$releasever # 保存在这个位置根据系统版本和包的源可能有所不同
编辑保存后,设置立刻生效。
-
- 操作系统使用技巧
设置网卡随系统启动、使用静态IP
虚拟机:VMware workstation 16
操作系统:CentOS 7.4
vi /etc/sysconfig/network-scripts/要修改的网卡(名称非lo的)
修改:
BOOTPROTO=static
ONBOOT=yes
追加如:
IPADDR=192.168.44.1.1
NETMASK=255.255.255.0
GATEWAY=192.168.44.1
DNS1=8.8.8.8
注:如果VMware虚拟机网络设置为NAT模式,则GATEWAY的值为“Mware-》编辑-》虚拟网络编辑器-》NAT设置-》网关IP”中的值。
重启网络:
systemctl restart network
注:重启网络后客户端需修改对应连接属性(IP地址)后重新连接
Centos 6的yum命令无法使用了(Cannot find a valid baseurl for repo: base)解决之道
CentOS 6已经随着2020年11月的结束进入了EOL(Reaches End of Life),不过有一些老设备依然需要支持,CentOS官方也给这些还不想把CentOS 6扔进垃圾堆的用户保留了最后一个版本的镜像,只是这个镜像不会再有更新了。简单来说就是官方已经抛弃了这个镜像。
更换Vault源,海外可用官方的http://vault.centos.org,使用的北美AWS的服务器;国内的可用阿里的http://mirrors.aliyun.com/centos-vault/
1、首先把fastestmirrors关了
#编辑
vi /etc/yum/pluginconf.d/fastestmirror.conf
#修改
enable=0
2、先把之前的repo挪到备份,然后下面两个二选一
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
3、替换为官方Vault源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://static.lty.fun/%E5%85%B6%E4%BB%96%E8%B5%84%E6%BA%90/SourcesList/Centos-6-Vault-Official.repo
或者国内用户可以替换为阿里云Vault镜像
wget -O /etc/yum.repos.d/CentOS-Base.repo https://static.lty.fun/%E5%85%B6%E4%BB%96%E8%B5%84%E6%BA%90/SourcesList/Centos-6-Vault-Aliyun.repo
- 如果没有wget的话,请使用SFTP上传(已下载好):
5、推荐使用懒人专用一键修复:
sed -i "s|enabled=1|enabled=0|g" /etc/yum/pluginconf.d/fastestmirror.conf
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo https://www.xmpan.com/Centos-6-Vault-Aliyun.repo
yum clean all
yum makecache
VMware中给CentOS磁盘扩容
http://t.zoukankan.com/leiblog-p-13560070.html