一、初步认知
- Linux 是一套开源的,免费使用的多用户、多任务、支持多线程和多 CPU 的操作系统,是一个性能稳定的网络操作系统。
- Linux 操作系统广泛应用于服务器端,通常服务器使用 LAMP(Linux + Apache + MySQL + PHP)或 LNMP(Linux + Nginx+ MySQL + PHP)组合。
- 将 Linux 内核与应用软件做个打包,就得到了 Linux 发行版。目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。
- Linux 文件系统采用树状目录结构,只有一个根目录,其下有很多规定好的子目录。在菜鸟教程中对具体的目录结构有一个大概的认知:https://www.runoob.com/linux/linux-system-contents.html
- 即使是硬件也会被映射成文件来管理,所以说,在 Linux 世界中,一切皆文件。
二、环境搭建
我选择了直接购买阿里云的轻量应用服务器,这更加符合实际开发场景,系统选择 CentOS 7.6,这个服务器可以看作一台远程的 Linux 电脑。
(一)用 Xshell 远程连接 Linux 服务器
- 在管理控制台上可以看到,自动开启了 80、443、22 三个端口
- 点击 远程连接 > 设置密码 来设置 root 账户的密码。
- 下载Xshell:https://www.netsarang.com/zh/free-for-home-school/
- 填写姓名和有效邮箱,勾选两者,点击下载,在邮箱中接收下载链接。
- Xshell 连接服务器,需要填写的关键信息有主机:服务器的公网 IP,账户:root 和密码。连接成功后:
(二)用 Xftp 实现远程文件传输
与 Xshell 同理,连接服务器,需要填写的关键信息有主机:服务器的公网 IP,账户:root 和密码。
连接成功后:
三、vi 和 vim 编辑器
Linux 系统内置 vi 文本编辑器,vim 具有编程能力,可以看作 vi 的增强版本,被广泛使用。
常用的三种模式:
- 正常模式
默认模式,可以使用【上下左右】按键来移动光标、复制、粘贴、删除字符和行。 - 插入模式
按下 i、I、o、O、a、A、r、R 中任意一个字符会进入该模式。 - 命令行模式
可完成读取、存盘、替换、离开 vim、显示行号等操作。
(一)模式切换
打开 Xshell 登录服务器,输入vim hello.java,意为用 vim 编写 hello.java 程序,
(二)vim 快捷键
快捷键操作包括拷贝、删除、查找、行号、定位、撤销。
命令 | 解释 |
---|---|
yy | 拷贝当前行 |
5yy | 拷贝当前向下5行 |
p | 粘贴 |
dd | 删除当前行 |
5dd | 删除当前向下5行 |
:/关键字 | 按关键字进行查找(冒号是为了进入命令模式) |
:set nu | 设置行号 |
:set nonu | 取消行号 |
G | 定位最末行 |
gg | 定位最首行 |
43G | 定位43行 |
u | 撤销改动 |
实践
- yy 拷贝当前行,5yy 拷贝当前行向下5行,p 粘贴 【正常模式】
- dd 删除当前行,5dd 删除当前行向下的5行 【正常模式】
- :/关键字查找某个单词,输入n查找下一个,重复 /关键字 可换关键字查找 【命令模式】
- :set nu 设置行号,:set nonu 取消行号 【命令模式】
命令行输入vim /etc/profile回车:
- G 定位最末行,gg 定位最首行,43G 定位43行 【一般模式】
- u 撤销 【一般模式】
四、用户管理
(一)关机、重启、登录、注销
命令 | 解释 |
---|---|
shutdown -h now | 立刻关机,-h 意为 halt,即关机 |
shutdown -h 1 | 1分钟后关机,默认参数 |
shutdown -r now | 立刻重启,-r意为 reboot,即重启 |
reboot | 立刻重启 |
sync | 把内存的数据同步到磁盘 |
logout | 注销用户,该指令在图形运行级别无效 |
- shutdown / reboot / halt 等命令在关机前均已进行了 sync,但本着小心驶得万年船,应在关机重启前执行一遍 sync。
- root 是系统管理员,权限最大,为避免误操作应尽量少用 root 账户。
- Linux 系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账户,然后以这个账户的身份进入系统。所以常规的登录操作是,利用普通账户登录,然后再切换成系统管理员。
(二)用户添加、删除、切换、查询
命令 | 解释 |
---|---|
hostnamectl set-hostname 主机名 | 修改主机名,重启生效 |
useradd 用户名 | 添加用户,用户目录默认在 /home/用户名 |
useradd -d 指定目录 用户名 | 添加用户且指定用户目录 |
passwd 用户名 | 修改指定账户的密码 |
su - 用户名 | 切换用户,可与 logout/exit 配合切换账号 |
userdel 用户名 | 删除用户,保留家目录(建议保留) |
userdel -r 用户名 | 删除用户和用户家目录 |
id 用户名 | 查询用户信息 |
who am i / whoami | 查看当前登录用户 |
指令实践(用户的新增、切换、查询)。
- 新增普通用户
- 切换用户,从高权限用户切换到低权限用户,不需要输入密码,反之需要。
- 查询用户信息
(三)用户组
用户组类似于角色,将有共性(权限)的多个用户归为一个用户组,便于系统进行统一管理。
命令 | 解释 |
---|---|
groupadd 组名 | 新增组 |
groupdel 组名 | 删除组 |
useradd - g 用户组 用户名 | 新增用户时指定组,默认的组是与用户同名的组 |
usermod - g 用户组 用户名 | 修改用户的组 |
指令实践
(四)用户相关文件
- /etc/passwd 文件:用户配置文件
- /etc/shadow 文件:口令配置文件
- /etc/group 文件:组的配置文件
五、文件管理
(一)运行级别
runlevel / 运行级别 | 说明 |
---|---|
0 | 关机 |
1 | 单用户(可用于找回密码) |
2 | 多用户状态、没有网络服务 |
3 | 多用户状态、有网络服务 【常用】 |
4 | 系统未使用、保留给用户 |
5 | 图形界面 【常用】 |
6 | 系统重启 |
CentOS 7 后,multi-user.target 等价于 runlevel 3,graphical.target 等价于 runlevel 5。
运行级别相关指令 | 解释 |
---|---|
init [runlevel] | 指定运行级别 |
systemctl get-default | 查看当前运行级别 |
systemctl set-default [runlevel] | 设置默认运行级别 |
(二)帮助指令
帮助指令 | 解释 |
---|---|
man [命令或配置文件] | 获得帮助信息,按空格显示下一页,按 q 退出 |
help [shell 内置命令] | 获得 shell 内置命令的帮助信息 |
指令实践
(三)文件目录
文件目录相关指令 | 解释 |
---|---|
ls [-al] | 显示当前目录的内容信息,a 是 all 的缩写,显示所有文件,包括隐藏文件,l 显示详细信息 |
pwd | 显示当前工作目录的绝对路径 |
cd [路径] | 切换到指定目录 |
mkdir [-p] 目录 | 创建目录,p 用来创建多级目录 |
rmdir 空目录 | 删除空目录 |
rm [-rf] 目录 | 删除非空目录,-r 意为 recursive,递归,-f 强制删除不提示 |
touch 文件 | 创建空文件 |
cp [-r] source target | 拷贝文件到指定目录,-r 递归复制整个目录,\cp 强制覆盖不提示 |
mv old new | 移动文件与目录或重命名 |
cat [-n] file | 查看文件内容,-n 显示行号,带上管道命令 more 浏览更加方便 |
指令实践
mv hello.java /home //把hello.java移动到/home目录下
mv hello.java h.java //文件重命名
mv h.java /home/hello.java //移动h.java到/home目录下且重命名为hello.java
文件目录相关指令 | 解释 |
---|---|
more file | 基于VI编辑器的文本过滤器,全屏按页显示文本文件内容,more 指令中内置了若干快捷键 |
less file | 分屏查看文件内容,比 more 更强大,支持各种显示终端,根据显示需要加载内容,对于显示大型文件有较高的效率 |
echo content | 输出内容到控制台,如环境变量 $HOSTNAME, $PATH,输出字符串要加双引号 |
head [-n 5] file | 显示文件的开头部分,默认前10行,[-n 5] 显示前5行 |
tail [-n 5] file | 显示文件的尾部内容,默认后10行,[-n 5] 显示后5行 |
tail -f file | 实时追踪该文档的所有更新,ctrl+c 退出实时追踪 |
ln -s [file/dir] name | 创建软链接/符号链接,类似 windows 里的快捷方式,主要存放了链接其他文件的路径 |
rm link | 删除软链接时后面不要加斜杠 |
history [10] | 查看已经执行过的所有 [最近10条] 历史命令 |
!5 | 执行历史编号为5的指令( history 列出的历史命令均有编号) |
more 指令内置快捷键 | 解释 |
---|---|
space 空格键 | 向下翻一页 |
enter | 向下翻一行 |
q | 立刻离开 more |
ctrl+F | 向下滚动一屏 |
ctrl+B | 向上滚动一屏 |
= | 输出当前行的行号 |
:f | 输出文件名和当前行的行号 |
less 指令内置快捷键 | 解释 |
---|---|
space 空格键 | 向下翻一页 |
pagedown | 向下翻动一页 |
pageup | 向上翻动一页 |
/字串 | 向下搜寻“字串”,n 向下查找,N 向上查找 |
?字串 | 向上搜寻“字串”,n 向上查找,N 向下查找;两者掌握一个即可 |
q | 离开 less 这个程序 |
> 输出重定向覆盖、 >> 追加 | 解释 |
---|---|
ls -l [/home] > file | 将当前[指定]目录列表内容覆盖写入 file,file 没有会自动创建 |
ls -al [/home] >> file | 将当前[指定]目录列表内容追加到 file 的末尾 |
cat file1 > file2 | 将 file1 的内容覆盖写到 file2 |
echo content >> file | 将 content 追加到 file 末尾 |
cal >> file | 将当前日历信息追加到 file 中 |
(四)日期时间指令
日期时间指令 | 解释 |
---|---|
date [“+%Y-%m-%d %H:%M:%S”] | 显示当前日期[年月日时分秒],注意要有+号 |
date -s 字符串时间 | 设置系统当前时间 |
cal [2020] | 显示本月[指定年份]日历 |
(五)搜索查找指令
其它
乱码问题
一篇中文文章从本地(Windows 系统)传到 Linux 云服务器中打开,发现是乱码,检查后发现是因为 Windows 中默认文件格式编码为 GB2312,Linux 编码一般是 UTF-8。
输出Linux字符集:
echo $LANG // 结果为 en_US.UTF-8
使用 iconv 命令对文件进行转码,-f 指原始文本编码,-t 指输出编码:
iconv -f GB2312 -t UTF-8 oldfile > newfile //提示 iconv: illegal input sequence at position 193247
GB2312 是国标里最小也是最早的中文编码标准,源文件格式并不一定是 GB2312,所以报错。GB18030 是最新国家标准,向下兼容 GB2312 和 GBK,可以作为源文件格式进行转换
iconv -f GB18030 -t UTF-8 oldfile > newfile //无提示