Linux 基础
Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。 Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。 Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
Bash 常用命令
基础常用命令
某个命令 --h
,对这个命令进行解释某个命令 --help
,解释这个命令(更详细)man某个命令
,文档式解释这个命令(更更详细)(执行该命令后,还可以按/+关键字进行查询结果的搜索)Ctrl + c
,结束命令TAB键
,自动补全命令(按一次自动补全,连续按两次,提示所有以输入开头字母的所有命令)键盘上下键
,输入临近的历史命令history
,查看所有的历史命令Ctrl + r
,进入历史命令的搜索功能模式clear
,清除屏幕里面的所有命令pwd
,显示当前目录路径(常用)firefox&
,最后后面的 & 符号,表示使用后台方式打开 Firefox,然后显示该进程的 PID 值jobs
,查看后台运行的程序列表ifconfig
,查看内网 IP 等信息(常用)curl ifconfig.me
,查看外网 IP 信息curl ip.cn
,查看外网 IP 信息locate 搜索关键字
,快速搜索系统文件/文件夹(类似 Windows 上的 everything 索引式搜索)(常用)updatedb
,配合上面的 locate,给 locate 的索引更新(locate 默认是一天更新一次索引)(常用)
date
,查看系统时间(常用)date -s20080103
,设置日期(常用)date -s18:24
,设置时间,如果要同时更改 BIOS 时间,再执行hwclock --systohc
(常用)
cal
,在终端中查看日历,肯定没有农历显示的uptime
,查看系统已经运行了多久,当前有几个用户等信息(常用)cat 文件路名
,显示文件内容(属于打印语句)cat -n 文件名
,显示文件,并每一行内容都编号more 文件名
,用分页的方式查看文件内容(按 space 翻下一页,按 Ctrl + B 返回上页)less
文件名,用分页的方式查看文件内容(带上下翻页)- 按 j 向下移动,按 k 向上移动
- 按 / 后,输入要查找的字符串内容,可以对文件进行向下查询,如果存在多个结果可以按 n 调到下一个结果出
- 按 ? 后,输入要查找的字符串内容,可以对文件进行向上查询,如果存在多个结果可以按 n 调到下一个结果出
shutdown
shutdown -hnow
,立即关机shutdown -h+10
,10 分钟后关机shutdown -h23:30
,23:30 关机shutdown -rnew
,立即重启
poweroff
,立即关机(常用)reboot
,立即重启(常用)zip mytest.zip /opt/test/
,把 /opt 目录下的 test/ 目录进行压缩,压缩成一个名叫 mytest 的 zip 文件unzip mytest.zip
,对 mytest.zip 这个文件进行解压,解压到当前所在目录unzip mytest.zip -d /opt/setups/
,对 mytest.zip 这个文件进行解压,解压到 /opt/setups/ 目录下
tar -cvf mytest.tar mytest/
,对 mytest/ 目录进行归档处理(归档和压缩不一样)tar -xvf mytest.tar
,释放 mytest.tar 这个归档文件,释放到当前目录tar -xvf mytest.tar -C /opt/setups/
,释放 mytest.tar 这个归档文件,释放到 /opt/setups/ 目录下
last
,显示最近登录的帐户及时间lastlog
,显示系统所有用户各自在最近登录的记录,如果没有登录过的用户会显示 从未登陆过ls
,列出当前目录下的所有没有隐藏的文件 / 文件夹。ls -a
,列出包括以.号开头的隐藏文件 / 文件夹(也就是所有文件)ls -R
,显示出目录下以及其所有子目录的文件 / 文件夹(递归地方式,不显示隐藏的文件)ls -a -R
,显示出目录下以及其所有子目录的文件 / 文件夹(递归地方式,显示隐藏的文件)ls -al
,列出目录下所有文件(包含隐藏)的权限、所有者、文件大小、修改时间及名称(也就是显示详细信息)ls -ld 目录名
,显示该目录的基本信息ls -t
,依照文件最后修改时间的顺序列出文件名。ls -F
,列出当前目录下的文件名及其类型。以 / 结尾表示为目录名,以 * 结尾表示为可执行文件,以 @ 结尾表示为符号连接ls -lg
,同上,并显示出文件的所有者工作组名。ls -lh
,查看文件夹类文件详细信息,文件大小,文件修改时间ls /opt | head -5
,显示 opt 目录下前 5 条记录ls -l | grep '.jar'
,查找当前目录下所有 jar 文件ls -l /opt |grep "^-"|wc -l
,统计 opt 目录下文件的个数,不会递归统计ls -lR /opt |grep "^-"|wc -l
,统计 opt 目录下文件的个数,会递归统计ls -l /opt |grep "^d"|wc -l
,统计 opt 目录下目录的个数,不会递归统计ls -lR /opt |grep "^d"|wc -l
,统计 opt 目录下目录的个数,会递归统计ls -lR /opt |grep "js"|wc -l
,统计 opt 目录下 js 文件的个数,会递归统计ls -l
,列出目录下所有文件的权限、所有者、文件大小、修改时间及名称(也就是显示详细信息,不显示隐藏文件)。显示出来的效果如下:
-rwxr-xr-x. 1 root root 4096 3月 26 10:57,其中最前面的 - 表示这是一个普通文件
lrwxrwxrwx. 1 root root 4096 3月 26 10:57,其中最前面的 l 表示这是一个链接文件,类似 Windows 的快捷方式
drwxr-xr-x. 5 root root 4096 3月 26 10:57,其中最前面的 d 表示这是一个目录
cd
,目录切换cd ..
,改变目录位置至当前目录的父目录(上级目录)。cd ~
,改变目录位置至用户登录时的工作目录。cd 回车
,回到家目录cd -
,上一个工作目录cd dir1/
,改变目录位置至 dir1 目录下。cd ~user
,改变目录位置至用户的工作目录。cd ../user
,改变目录位置至相对路径user的目录下。cd /../..
,改变目录位置至绝对路径的目录位置下。
cp 源文件 目标文件
,复制文件cp -r 源文件夹 目标文件夹
,复制文件夹cp -r -v 源文件夹 目标文件夹
,复制文件夹(显示详细信息,一般用于文件夹很大,需要查看复制进度的时候)cp /usr/share/easy-rsa/2.0/keys/{ca.crt,server.{crt,key},dh2048.pem,ta.key} /etc/openvpn/keys/
,复制同目录下花括号中的文件
tar cpf - . | tar xpf - -C /opt
,复制当前所有文件到 /opt 目录下,一般如果文件夹文件多的情况下用这个更好,用 cp 比较容易出问题mv 文件 目标文件夹
,移动文件到目标文件夹mv 文件
,不指定目录重命名后的名字,用来重命名文件
touch 文件名
,创建一个空白文件/更新已有文件的时间(后者少用)mkdir 文件夹名
,创建文件夹mkdir -p /opt/setups/nginx/conf/
,创建一个名为 conf 文件夹,如果它的上级目录 nginx 没有也会跟着一起生成,如果有则跳过rmdir 文件夹名
,删除文件夹(只能删除文件夹里面是没有东西的文件夹)rm 文件
,删除文件rm -r 文件夹
,删除文件夹rm -r -i 文件夹
,在删除文件夹里的文件会提示(要的话,在提示后面输入yes)rm -r -f 文件夹
,强制删除rm -r -f 文件夹1/ 文件夹2/ 文件夹3/
删除多个
find
,高级查找find . -name *lin*
,其中 . 代表在当前目录找,-name 表示匹配文件名 / 文件夹名,*lin* 用通配符搜索含有lin的文件或是文件夹find . -iname *lin*
,其中 . 代表在当前目录找,-iname 表示匹配文件名 / 文件夹名(忽略大小写差异),*lin* 用通配符搜索含有lin的文件或是文件夹find / -name *.conf
,其中 / 代表根目录查找,*.conf代表搜索后缀会.conf的文件find /opt -name .oh-my-zsh
,其中 /opt 代表目录名,.oh-my-zsh 代表搜索的是隐藏文件 / 文件夹名字为 oh-my-zsh 的find /opt -type f -iname .oh-my-zsh
,其中 /opt 代表目录名,-type f 代表只找文件,.oh-my-zsh 代表搜索的是隐藏文件名字为 oh-my-zsh 的find /opt -type d -iname .oh-my-zsh
,其中 /opt 代表目录名,-type d 代表只找目录,.oh-my-zsh 代表搜索的是隐藏文件夹名字为 oh-my-zsh 的find . -name "lin*" -exec ls -l {} \;
,当前目录搜索lin开头的文件,然后用其搜索后的结果集,再执行ls -l的命令(这个命令可变,其他命令也可以),其中 -exec 和 {} ; 都是固定格式find /opt -type f -size +800M -print0 | xargs -0 du -h | sort -nr
,找出 /opt 目录下大于 800 M 的文件find / -name "*tower*" -exec rm {} \;
,找到文件并删除find / -name "*tower*" -exec mv {} /opt \;
,找到文件并移到 opt 目录find . -name "*" |xargs grep "youmeek"
,递归查找当前文件夹下所有文件内容中包含 youmeek 的文件find . -size 0 | xargs rm -f &
,删除当前目录下文件大小为0的文件du -hm --max-depth=2 | sort -nr | head -12
,找出系统中占用容量最大的前 12 个目录
cat /etc/resolv.conf
,查看 DNS 设置netstat -tlunp
,查看当前运行的服务,同时可以查看到:运行的程序已使用端口情况env
,查看所有系统变量export
,查看所有系统变量echo
echo $JAVA_HOME
,查看指定系统变量的值,这里查看的是自己配置的 JAVA_HOME。echo "字符串内容"
,输出 "字符串内容"echo > aa.txt
,清空 aa.txt 文件内容(类似的还有:: > aa.txt
,其中 : 是一个占位符, 不产生任何输出)
unset $JAVA_HOME
,删除指定的环境变量ln -s /opt/data /opt/logs/data
,表示给 /opt/logs 目录下创建一个名为 data 的软链接,该软链接指向到 /opt/datagrep
shell grep -H '安装' *.sh
,查找当前目录下所有 sh 类型文件中,文件内容包含安装
的当前行内容grep 'test' java*
,显示当前目录下所有以 java 开头的文件中包含 test 的行grep 'test' spring.ini docker.sh
,显示当前目录下 spring.ini docker.sh 两个文件中匹配 test 的行
ps
ps –ef|grep java
,查看当前系统中有关 java 的所有进程ps -ef|grep --color java
,高亮显示当前系统中有关 java 的所有进程
kill
kill 1234
,结束 pid 为 1234 的进程kill -9 1234
,强制结束 pid 为 1234 的进程(慎重)killall java
,结束同一进程组内的所有为 java 进程ps -ef|grep hadoop|grep -v grep|cut -c 9-15|xargs kill -9
,结束包含关键字 hadoop 的所有进程
head
head -n 10 spring.ini
,查看当前文件的前 10 行内容
tail
tail -n 10 spring.ini
,查看当前文件的后 10 行内容tail -200f 文件名
,查看文件被更新的新内容尾 200
CentOS 7 安装
概括
- 本教程中主要演示了 VMware Workstation 下安装
CentOS 7.3
的过程。 - 如果你是要安装到 PC 机中,你需要准备一个 U 盘,以及下载这个软件:USBWriter(提取码:5aa2)
- USBWriter 的使用很简单,如下图即可制作一个 CentOS 系统盘
VMware 下安装 CentOS 过程
-
VMware Workstation 的介绍和下载
-
百度云下载(64 位):http://pan.baidu.com/s/1eRuJAFK
-
官网下载:http://www.vmware.com/products/workstation/workstation-evaluation
-
安装细节开始:
- 如上图,默认是最小安装,点击进去,选择桌面安装。
- 如上图,默认是自动分区,如果懂得分区,点击进去,进行手动分区,CentOS 7 少了主分区,逻辑分区的选择了。
- 如上图,root 密码必须设置,我习惯测试的时候是:123456
- 我没有创建用户,喜欢用 root
- 如上图,许可证必须点击进去勾选同意相关协议。
- 如上图,网络可以稍后在设置,主机名可以现在先填写
- 如上图右上角,一般我们都选择跳过
- 到此完成,其他该做啥就做啥
Bash 其他常用命令
其他常用命令
- 编辑 hosts 文件:
vim /etc/hosts
,添加内容格式:127.0.0.1 www.youmeek.com
- RPM 文件操作命令:
- 安装
rpm -i example.rpm
,安装 example.rpm 包rpm -iv example.rpm
,安装 example.rpm 包并在安装过程中显示正在安装的文件信息rpm -ivh example.rpm
,安装 example.rpm 包并在安装过程中显示正在安装的文件信息及安装进度
- 查询
rpm -qa | grep jdk
,查看 jdk 是否被安装rpm -ql jdk
,查看 jdk 是否被安装
- 卸载
rpm -e jdk
,卸载 jdk(一般卸载的时候都要先用 rpm -qa 看下整个软件的全名)
- 安装
- YUM 软件管理:
yum install -y httpd
,安装 apacheyum remove -y httpd
,卸载 apacheyum info -y httpd
,查看 apache 版本信息yum list --showduplicates httpd
,查看可以安装的版本yum install httpd-查询到的版本号
,安装指定版本- 更多命令可以看:http://man.linuxde.net/yum
- 查看某个配置文件,排除掉里面以 # 开头的注释内容:
grep '^[^#]' /etc/openvpn/server.conf
- 查看某个配置文件,排除掉里面以 # 开头和 ; 开头的注释内容:
grep '^[^#;]' /etc/openvpn/server.conf
资料
Linux 介绍
Linux 这个名字
Linux 的 Wiki 介绍:http://zh.wikipedia.org/zh/Linux
Linux 也称:GNU/Linux
,而其中 GNU 的全称又是:Gnu’s Not Unix
。
其中 GNU 放前面是有原因的,GNU 介绍:http://zh.wikipedia.org/wiki/GNU
对于 Linux 和 GNU/Linux 的两种叫法是有争议,可以看下面文章:https://zh.wikipedia.org/wiki/GNU/Linux命名爭議
其实我们可以认为:Linux 本质是指 Linux 内核,而称 GNU/Linux 则代表这是一个系统,所以我认为 Debian 的这个叫法是合理的,但是确实有点不好念和记忆。所以普遍大家直接称作 Linux。
通过上面的全称和资料其实我们也就了解到,Linux 本质来源不是 Unix,但是它借鉴了 Unix 的设计思想,所以在系统业界上把这种和 Unix 是一致设计思想的系统归为:类 Unix 系统
。
类 Unix 系统的介绍:https://zh.wikipedia.org/wiki/类Unix系统
类 Unix 系统,除了我们今天要讲的 Linux,还有大家熟知的 Mac OS X、FreeBSD(这两个是直接从 Unix 系发展过来的,所以相对 Linux 是比较地道的类 Unix 系统)
- FreeBSD 介绍:http://zh.wikipedia.org/zh/FreeBSD
- Mac OS X 介绍:http://zh.wikipedia.org/wiki/OS_X
Linux 的发行版本
Linux 的 Wiki 中有这句话:
通常情况下,Linux 被打包成供个人计算机和服务器使用的 Linux 发行版,一些流行的主流 Linux 发布版,包括 Debian(及其派生版本 Ubuntu、Linux Mint)、Fedora(及其相关版本 Red Hat Enterprise Linux、CentOS)和 openSUSE、ArchLinux(这个是我补充的)等。
通过上面这句话我做了总结,我个人觉得应该这样分:
- Fedora、RHEL、Centos 是一个系,他们的区别:http://blog.csdn.net/tianlesoftware/article/details/5420569
- Debian、Ubuntu 是一个系的,他们的区别直接看 Ubuntu 的 Wiki 就可以得知:http://zh.wikipedia.org/zh/Ubuntu
- ArchLinux 自己一个系:http://zh.wikipedia.org/wiki/Arch_Linux
- openSUSE 自己一个系:http://zh.wikipedia.org/wiki/OpenSUSE
根据用途可以再总结:
- Fedora 系业界一般用于做服务器
- Debian 系业界一般用于桌面,移动端,TV这一类
- ArchLinux 系,很轻量的Linux,适合有一定Linux基础,并且爱折腾的人使用,用它做桌面或是服务器都行。
- OpenSuse 系,嘛,嗯…人气相对比较差,一般是服务器。
其实 Linux 的发行版本有太多了,我也只是简单说下常见的而已,具体可以看:http://zh.wikipedia.org/wiki/Linux发行版列表
Linux 作用
为什么要用 Linux 系统?大家常看到的说法是这样的:
Linux 是一个开源的,有潜力,安全,免费的操作系统
我觉得这几个点都比较虚, 特别是免费这东西,在景德镇应该算是最不值钱的东西。作为系统的上层使用者来讲,我们之所以喜欢某个操作系统就是因为它可以加快的你生产效率,提高产能。我推荐 Linux 也只是因为它适合常见的编程语言做开发环境,仅此一点。
所有,对此我的总结就是:
如果你是某种语言的开发者,你从事这个行业,不管你怎么学习下去,Linux 永远绕不开。从简单的各种语言开发,到后期的服务器部署,分布式,集群环境,数据库相关等,Linux 都在等着你。如果你是新手程序员可能还不太懂我这句话,但是我这里可以这样提示:你可以认真去看下各个语言的官网、对应的开发组件官网,看下他们的下载和新手上路相关页面,都会有 Linux 系统对应的介绍,但是不一定有会 Windows。(P.S:微软系、美工等设计系是唯一这个总结之外的人)
在认识 Linux 作用上我以下面这边文章为结尾。Linux 和 Mac OS X 都是类 Unix 系统,所以这篇文章中基本上的理由都可以用到 Linux 上的。 为什么国外程序员爱用 Mac?http://www.vpsee.com/2009/06/why-programmers-love-mac/
推荐的发行版本
Ubuntu:适用于开发机
推荐版本:Ubuntu kylin 15.10
- Ubuntu kylin 官网:http://cn.Ubuntu.com/desktop
- Ubuntu 英文官网:http://www.ubuntu.com
- Ubuntu 中文官网:http://www.ubuntu.org.cn
- 网易镜像:http://mirrors.163.com/ubuntu-releases/
- 阿里云镜像:http://mirrors.aliyun.com/ubuntu-releases/
- Ubuntu kylin 15.10 64 位镜像地址:http://cdimage.ubuntu.com/ubuntukylin/releases/15.10/release/ubuntukylin-15.10-desktop-amd64.iso
推荐理由:
我们是要在上面做开发的,不是要把他变成生活用机的,所以你认为自己尝试安装各种中文输入法很爽吗?自己尝试让国际 Ubuntu 版变成又一个符合国情的 kylin 很爽吗?真心别折腾这些没用的东西。就像我以前说的,大学老师让 Java 新手使用记事本写代码就是一种非常 shit 行为,不断地在 Windows 上用 cmd > javac
是毫无意义的。
CentOS:适用于服务器机
推荐版本:6.7
- CentOS 官网:http://www.centos.org/download/
- 网易镜像:http://mirrors.163.com/centos/
- 阿里云镜像:http://mirrors.aliyun.com/centos/
- CentOS 6.7 64 位镜像地址:http://mirrors.163.com/centos/6.7/isos/x86_64/CentOS-6.7-x86_64-bin-DVD1.iso
推荐理由:
Fedora(CentOS、RHEL) 系,是在国内外,作为企业服务器的系统最多,没有之一。我在 Quora 和知乎上也搜索了下,基本上大家都是赞同这个观点的。