Linux 是一个操作系统 . 和 Windows 是 " 并列 " 的关系 .
1) 1969-1970 年, 贝尔实验室的 Dennis Ritchie (左图) 和 Ken Tompson (右图) 开发了 Unix 操作系统.
这俩大佬本来是想开发一个操作系统, 但是开发着开发着, 发现现有的编程语言不太好使, 于是俩人一合计, 先整个编程语言出来吧. 于是 C 语言 就诞生了.Dennis Ritchie 大佬 2011 年就去天堂写代码了. Ken Tompson 大佬后来在 google, 又参与发明了 Go 语言.
3) 1991 年, 还在读大学的 芬兰人 Linus Benedict Torvalds (1969年12月28日出生, 当时 22 岁) 基于Minix 的启发, 开发出了 Linux 的第一个版本.
值的一提的是, Linus 在开发 Linux 的时候, 觉得现有的 版本管理工具 并不太方便. 于是开发了一个新的版本管理工具. 也就是现在最广泛使用的 git .Linus 大佬现在 50 多岁了, 但是仍然在互联网上非常活跃. 经常会拍一些视频. 在油管或者B站上就可以找到.
- 服务器领域
- 嵌入式设备
- 移动端
企业中最主要使用的发行版是 RedHat (红帽). 但是 RedHat 是一个收费的系统(报价参考购买红帽企业 Linux 订阅 (redhat.com)因此我们课堂上使用的是基于红帽系统的的社区免费版本 CentOS.
CentOS 和 RedHat 的关系RedHat一直都提供源代码的发行方式,CentOS就是将RedHat发行的源代码去掉 RedHat 的 logo商标, 重新编译一次.RedHat对这种发行版的态度是:“我们其实并不反对这种发行版,真正向我们付费的用户,他们重视的并不是系统本身,而是我们所提供的商业服务。”所以,CentOS可以得到RedHat的所有功能,甚至是更好的软件。但CentOS并不向用户提供商业支持,当然也不负上任何商业责任。
使用命令相比于使用图形界面主要有以下好处:
- 节省系统资源: 运行图形界面需要让系统付出一些额外的资源开销. 尤其是对于配置比较低的嵌入式设备, 这一点至关重要.
- 节省网络带宽: 如果通过网络访问服务器, 使用图形界面需要传输一帧一帧的图像, 而使用命令只需要传输简单的字符串.
- 便于批量执行任务: 可以通过一些 "脚本" 代码 (比如 Linux Shell) 来批量执行一些任务, 完成一些简单的编程工作. (比如定时备份文件, 删除文件等).Windows 也有命令(也就是 cmd), 只是对于普通用户来说很少使用.
- 直接安装在物理机上. 但是由于 Linux 桌面使用起来非常不友好. [不推荐].
- 使用虚拟机软件, 将 Linux 搭建在虚拟机上. 但是由于当前的虚拟机软件(如 VMWare 之类的)存在一些 bug , 会导致环境上出现各种莫名其妙的问题, 比较折腾. [非常不推荐]
- 使用 WSL (Windows Subsystem for Linux). 这个是 Windows 近几年开发的新功能, 在 Windows系统内集成了一个 Linux. 但是目前这个技术还不够成熟. [暂时不推荐].
- 使用云服务器, 可以直接在 腾讯云, 阿里云或华为云 等服务器厂商处直接购买一个云服务器. [墙裂推荐]
如腾讯云阿里云等为在校学生提供了优惠, 只要通过学生认证, 最低可以 10 块钱一个月. 还是非常划算的。甚至同学们可以 4 , 5 个人共用一台服务器, 平均下来一个人一个月 2 块钱。
注意: 由于腾讯云官网一直在改版, 同学们实际看到的页面可能和课件上略有差别. 如果遇到某个环节搞不定, 随时可以咨询腾讯云的客服小姐姐. (腾讯云的客服是非常热情的, 尤其是在你付钱之前~~).
3. 右侧的操作系统选择 CentOS 7.6 64位. 购买时长根据需要选择(建议1年), 点击立即购买即可. 这个步骤需要实名认证, 否则会提示
点击立即认证, 按照系统提示, 完成实名认证即可(认证速度很快).
蓝色方框为公网 ip 地址, 稍后我们就会使用这个 ip 登陆服务器.
小结:
- 服务器的外网 IP
- 服务器的管理员账户 (固定为 root)
- 管理员账户密码(在腾讯云网站上设置的)
- XShell
- Putty
- MobaXTerm
- Iterm2
- SecureCRT
- ......
XShell 提供了两种授权方式.
- 企业版: 收费.
- 家庭/教育版: 免费.
邮箱中收到的内容形如:
点击邮箱中的下载链接即可完成下载.
ssh 服务器外网ip地址
备注: 这里的用户名为 root, 密码是在最初购买服务器的时候设置的密码.
关于XShell 下的复制粘贴复制: ctrl + insert (有些同学的 insert 需要配合 fn 来按)粘贴: shift + insertctrl + c / ctrl + v 是不行的.
- -a 列出目录下的所有文件,包括以 . 开头的隐含文件。
- -d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录
- -k 以 k 字节的形式表示文件的大小。ls –alk 指定文件
- -l 列出文件的详细信息。
- -r 对目录反向排序。
- -t 以时间排序。
- -R 列出所有子目录下的文件。(递归)
ls -l
pwd
cd .. : 返回上级目录
cd ~:进入用户家目
cd -:返回最近访问目录
几个特殊的目录:
- / 称为根目录
- . 称为当前目录
- .. 称为当前目录的上级目录
touch test.txt
cat test.txt
mkdir –p test/test1 : 递归建立多个目录
- -f 即使文件属性为只读(即写保护),亦直接删除
- -i 删除前逐一询问确认
- -r 删除目录及其下所有文件
rm test.txt
先手动创建如下目录结构 :test├── a│ ├── a1│ │ ├── 1.txt│ │ └── 2.txt│ └── a2├── b│ ├── b1`│ │ ├── 1.txt│ │ └── 2.txt│ └── b2└── c使用 rm -ri 命令删除 test, 观察删除的顺序 .
3.8 cp
- -f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
- -i 或 --interactive 覆盖文件之前先询问用户
- -r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
- -R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理
cp test1.txt test2.txt
3.9 mv
- 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。
- 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
- 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
mv test1.txt test2.txt
- -k 根据关键字搜索联机帮助
- num 只在第num章节找
- man man 能够看到 man 手册中的若干个章节及其含义.
man ls
- j k / 方向键: 向上向下滚动屏幕.
- -N 显示每行的行号
- /字符串:向下搜索“字符串”的功能
- n:重复前一个搜索(与 / 或 ? 有关)
- q: 退出
- -n<行数> 显示的行数
- -f 循环读取
- -n<行数> 显示行数
# 方法1
head -n50 test > tmp # 将前50行装入临时文件 tmp
tail -n1 tmp # 得到中间行
# 方法2
head -n50 test | tail -n1
# 先构造一个文件, 里面添加一些内容.cat < test.txt
cat test.txt > test2.txt
# 尝试删除一个不存在的文件rm aaa > test.txt# 输出结果, 这个提示并没有被重定向到 test.txt 文件中.rm: cannot remove ‘aaa’: No such file or directory# 正确做法rm aaa 2> test.txt
- %H : 小时(00..23)
- %M : 分钟(00..59)
- %S : 秒(00..61)
- %X : 相当于 %H:%M:%S
- %d : 日 (01..31)
- %m : 月份 (01..12)
- %Y : 完整年份 (0000..9999)
- %F : 相当于 %Y-%m-%d
vim [ 文件名 ]
关于 Vim 的用法还有很多. 此处不做过多介绍了. 有兴趣的同学可以参考 vimtutor (直接在终端输入vimtutor 即可进入官方教程) 和 <<Vim 实用技巧>>
熟练使用 Vim 能够大大提高代码编辑效率. 主流的开发工具 (比如 IDEA, VSCode 等) 都支持 Vim风格的快捷键。遗憾的是熟练使用 Vim 并不是一件容易的事情, 可能需要长达几年的练习.
- -n<行数> 显示的行数
- -w 全字匹配. 要求整个单词都完全相同的结果才能匹配出来, 而不仅仅是一个单词的一部分.
- -r 递归查找. 可以搜索多级目录下的所有文件.
- --color 高亮查找到的结果
- --include 指定查找某些文件
- --exclude 指定排除某些文件
grep "hello" Hello.java
- a 显示一个终端的所有进程
- u 以用户为主的格式来显示程序状况
- x 显示所有程序,不以终端机来区分
ps aux # 显示系统上所有的进程ps aux | grep " 进程名 "ps aux | grep " 进程 id"
- -a 显示所有正在或不在侦听的套接字
- -n 显示数字形式地址而不是去解析主机、端口或用户名
- -p 显示套接字所属进程的PID和名称
netstat -anpnetstat -anp | grep " 进程名 "netstat -anp | grep " 端口号 "
- 超级用户:可以再linux系统下做任何事情,不受限制
- 普通用户:在linux下做有限的事情。
- 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
useradd test
passwd test
- 文件和文件目录的所有者:u---User
- 文件和文件目录的所有者所在的组的用户:g---Group
- 其它用户:o---Others
a) 文件类型
d :文件夹- :普通文件l :软链接(类似 Windows 的快捷方式)b :块设备文件(例如硬盘、光驱等)p :管道文件c :字符设备文件(例如屏幕等串口设备)s :套接口文件
- 读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
- 写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
- 执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
- “-” 表示不具有该项权限
- R -> 递归修改目录文件的权限
- 说明:只有文件的拥有者和root才可以改变文件的权限
- +:向权限范围增加权限代号所表示的权限
- -:向权限范围取消权限代号所表示的权限
- =:向权限范围赋予权限代号所表示的权限
- 用户符号:
- u:拥有者
- g:拥有者同组用
- o:其它用户
- a:所有用户
# chmod u+w /home/abc.txt# chmod o-x /home/abc.txt# chmod a=x /home/abc.txt
# chmod 664 /home/abc.txt# chmod 640 /home/abc.txt
yum list | grep [ 软件包关键字 ] # 注意 , 最好要加上 grep, 否则罗列的内容会非常多 , 导致机器很卡 .
yum install [ 软件包名字 ]
yum remove [ 软件包名字 ]
- yum 所有的命令必须保证网络是联通情况下, 才能使用(云服务器一般网络都是良好的).
- yum install / yum remove 必须具备管理员权限(root 用户).
- 可以使用 ping www.baidu.com 来检测网络的畅通情况.
# 由于带 git 关键字的软件包很多 , 可以在 grep 的时候加上 -w , 表示全字匹配 .yum list | grep git -w
yum install git.x86_64
git clonegit addgit commitgit push
yum install java-1.8.0-openjdk.x86_64
使用 java -version 验证是否安装成功.
yum list | grep maven -w
yum install maven.noarch
mvn -v# 输出结果Apache Maven 3.0.5 (Red Hat 3.0.5-17)Maven home: /usr/share/mavenJava version: 1.8.0_232, vendor: Oracle CorporationJava home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/jreDefault locale: en_US, platform encoding: UTF-8OS name: "linux", version: "3.10.0-957.5.1.el7.x86_64", arch: "amd64", family:"unix"
wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.47/bin/apache-tomcat-8.5.47.zip -O apache-tomcat-8.5.47.zip
2. 解压缩 Tomcat
# 使用 unzip 命令解压缩unzip apache-tomcat-8.5.47.zip
cd apache-tomcat-8.5.47/bin# 将所有 .sh 后缀的文件加上可执行权限 ( 后面会介绍 )chmod + x *.sh
sh bin/startup.sh
# 方法 1 查看 tomcat 进程是否存在ps aux | grep tomcat# 方法 2 查看端口 8080 是否被绑定netstat -anp | grep 8080# 方法 3 使用 curl 命令访问默认 democurl 127.0.0.1:8080
http : //[ 服务器外网 ip]:8080/
在外网访问这个页面之前需要先开启服务器的 "安全组" 功能。登陆自己的云服务账户, 在主页中找到 控制台 -> 自己的服务器 -> 安全组。需要配置安全组, 允许外部主机访问服务器的 8080 端口。备注: 安全组配置界面如果找不到, 可以随时咨询云服务器客服.
(2) 选择新建安全组
(3) 点击新建按钮
(4) 选择安全组的模板, 推荐使用第二个模板
(5) 在任意一行规则的地方, 点击插入, 新增一行安全组规则即可
5.6 MySQL
MySQL 同样也可以使用 yum 安装. 但是要修改一些配置, 稍微复杂一些。可以参考陈沛鑫老师写的一个知乎上的文章.
mysql> show variables like 'log_error';# 输出结果+---------------+------------------------------+| Variable_name | Value |+---------------+------------------------------+| log_error | /var/log/mariadb/mariadb.log |+---------------+------------------------------+
less /var/log/mariadb/mariadb.log
- 开发环境: 程序猿写代码用的机器.
- 测试环境: 测试人员测试程序使用的机器. 一般是退役的部署机器.
- 生产环境(线上环境): 最终项目发布时所使用的机器. 对稳定性要求很高.
# 进入用户家目录
cd ~
# 创建目录保存项目
mkdir project
cd project
# 使用 git 下载代码
git clone [项目链接]
mysql -u[数据库用户名] -p[数据库密码] < [数据库脚本].sql
mvn package
曾经我们主要是在 IDEA 中通过图形化工具来使用 mvn. 事实上 mvn 本质是一个基于命令行的工具。曾经在 IDEA 上进行的 mvn 操作在 Linux 中同样也可以通过命令行来完成。
cp [war包名字] [tomcat webapps目录]
- 要开启 Tomcat 对应端口的安全组(8080)
- 代码中的数据库的地址和账号密码可能需要调整
- 还可以把项目链接生成一个二维码(百度搜 "二维码生成"), 就可以用手机扫码访问.