Linux 介绍

发行版

市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS

应用领域

LAMP(Linux + Apache + MySQL + PHP)
LNMP(Linux + Nginx+ MySQL + PHP)

安装

Centos 7 安装

系统启动过程

  1. 内核的引导。
  2. 运行 init。
  3. 系统初始化。
  4. 建立终端 。
  5. 用户登录系统。
  • init程序的类型:
    SysV: init, CentOS 5之前, 配置文件: /etc/inittab。
    Upstart: init,CentOS 6, 配置文件: /etc/inittab, /etc/init/*.conf。
    Systemd: systemd, CentOS 7,配置文件: /usr/lib/systemd/system、 /etc/systemd/system。

  • 运行级别
    运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
    运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
    运行级别2:多用户状态(没有NFS)
    运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
    运行级别4:系统未使用,保留
    运行级别5:X11控制台,登陆后进入图形GUI模式
    运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

  • 图形模式与文字模式的切换方式
    Linux预设提供了六个命令窗口终端机让我们来登录。
    默认登录第一个,tty1,Ctrl + Alt + F1 ~ F6 切换命令窗口
    如果安装了图形界面,进入命令窗口界面后再返回图形界面只要按下Ctrl + Alt + F7

关机流程

sync > shutdown > reboot > halt

1
2
3
4
5
6
7
8
9
10
11
12
sync 将数据由内存同步到硬盘中。
shutdown 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机:

这个命令告诉大家,计算机将在10分钟后关机,并且会显示在登陆用户的当前屏幕中。
shutdown –h 10 ‘This server will shutdown after 10 mins’
shutdown –h now 立马关机
shutdown –h 20:25 系统会在今天20:25关机
shutdown –h +10 十分钟后关机
shutdown –r now 系统立马重启
shutdown –r +10 系统十分钟后重启
reboot 就是重启,等同于 shutdown –r now
halt 关闭系统,等同于shutdown –h now 和 poweroff

系统目录结构

/bin:
bin是Binary的缩写, 这个目录存放着最经常使用的命令。

/boot:
这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。

/dev :
dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。

/etc:
这个目录用来存放所有的系统管理所需要的配置文件和子目录。

/home:
用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。

/lib:
这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。

/lost+found:
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

/media:
linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。

/mnt:
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。

/opt:
这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。

/proc:
这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

/root:
该目录为系统管理员,也称作超级权限者的用户主目录。

/sbin:
s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。

/selinux:
这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。

/srv:
该目录存放一些服务启动之后需要提取的数据。

/sys:

这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。

sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。
该文件系统是内核设备树的一个直观反映。

当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。

/tmp:
这个目录是用来存放一些临时文件的。

/usr:
这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。

/usr/bin:
系统用户使用的应用程序。

/usr/sbin:
超级用户使用的比较高级的管理程序和系统守护程序。

/usr/src:
内核源代码默认的放置目录。

/var:
这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

/run:
是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。

+系统启动必须:

/boot /etc /lib /sys

+指令集合:

/bin /sbin

+外部文件管理:

/dev /media /mnt

+临时文件:

/run /lost+found /tmp

+账户:
/root /home /usr /usr/bin /usr/sbin /usr/src

忘记密码解决方法

进入单用户模式

远程登录

putty 下载

Linux 查看 ip 信息:ip a s

文件基本属性

命令行:ls -l

drwxr-xr-x 3 mysql mysql 4096 Apr 21  2014 mysql

Linux中第一个字符代表这个文件是目录、文件或链接文件等

当为[ d ]则是目录;
当为[ - ]则是文件;
若是[ l ]则表示为链接文档(link file);
若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

接下来的位置:[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已

文件     属主      属组    其他用户
类型     权限      权限      权限
 0     1,2,3   4,5,6   7,8,9
 d       rwx       r-x       r-x

更改文件属组

chgrp [-R] 属组名 文件名  //-R:递归更改文件属组

更改文件属主,也可以同时更改文件属组

chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名

更改文件9个属性

/* 方法一 */
各权限的分数对照表:r:4 w:2 x:1
chmod [-R] 权限数字 文件或目录

/* 方法二 */
身份:u g o a
赋值:+ - =
权限:r w x

chmod u=rwx,g=rx,o=r  文件或目录
chmod a-x 文件或目录

文件与目录管理

处理目录的常用命令:

ls: 列出目录            // -a -d -l --full-time 
cd:切换目录
pwd:显示目前的目录      // -P 显示正确的完整路径
mkdir:创建一个新的目录  // -m 设置权限 -p 创建多层目录
rmdir:删除一个空的目录
cp: 复制文件或目录
rm: 移除文件或目录
mv: 移动文件与目录,或修改文件与目录的名称

文件内容常用命令:

cat  由第一行开始显示文件内容
tac  从最后一行开始显示,可以看出 tac 是 cat 的倒著写!
nl   显示的时候,顺道输出行号!
more 一页一页的显示文件内容
less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
head 只看头几行
tail 只看尾巴几行

用户账号的管理

useradd 选项 用户名

-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组 指定用户所属的附加组。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。

userdel,usermod

passwd 选项 用户名

-l 锁定口令,即禁用账号。
-u 口令解锁。
-d 使账号无口令。
-f 强迫用户下次登录时修改口令。

用户组的管理

groupadd ,groupdel ,groupmod ,newgrp 

与用户和用户组相关的信息都存放在一些系统文件中,这些文件包括/etc/passwd, /etc/shadow, /etc/group等。

sam:x:200:50:Sam san:/home/sam:/bin/sh
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

磁盘管理

df:列出文件系统的整体磁盘使用量
du:检查磁盘空间使用量
fdisk:用于磁盘分区

vi/vim

史上最全Vim快捷键键位图 — 入门到进阶

命令模式(Command mode)

i 切换到输入模式,以输入字符。
x 删除当前光标所在处的字符。
: 切换到底线命令模式,以在最底一行输入命令。

输入模式(Insert mode)

字符按键以及Shift组合,输入字符
ENTER,回车键,换行
BACK SPACE,退格键,删除光标前一个字符
DEL,删除键,删除光标后一个字符
方向键,在文本中移动光标
HOME/END,移动光标到行首/行尾
Page Up/Page Down,上/下翻页
Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
ESC,退出输入模式,切换到命令模式

底线命令模式(Last line mode)

q 退出程序
w 保存文件

vim 命令的安装

yum -y install vim*

常见问题: is not in the sudoers file
$ su

shell

Linux 的 Shell 种类众多,常见的有:

Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)

运行 Shell 脚本

1、作为可执行程序

chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

2、作为解释器参数

/bin/sh test.sh
/bin/php test.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#变量赋值,使用
your_name="qinjx"
echo $your_name
echo ${your_name}

#删除变量
myUrl="http://www.runoob.com"
unset myUrl
echo $myUrl

#字符串
your_name='runoob'
str="Hello, I know you are \"$your_name\"! \n"
echo -e $str

#拼接字符串
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1

#获取字符串长度
string="abcd"
echo ${#string} #输出 4

#截取字符串
string="runoob is a great site"
echo ${string:1:4} # 从左边第几个字符开始,及字符的个数
echo ${var:7} # 从左边第几个字符开始,一直到结束
echo ${string#*//} # 删除左边字符,保留右边字符
echo ${var%/*} # 删除右边字符,保留左边字符


"#""##" 表示从左边开始删除。一个 "#" 表示从左边删除到第一个指定的字符;两个 "#" 表示从左边删除到最后一个指定的字符。
%、%% 表示从右边开始删除。一个 % 表示从右边删除到第一个指定的字符;两个 % 表示从左边删除到最后一个指定的字符。


#查找字符串
string="runoob is a great site"
echo `expr index "$string" io` # 输出 4

#支持一维数组(不支持多维数组)
array_name=(value0 value1 value2 value3)

#读取数组元素
valuen=${array_name[n]}

#遍历数组所有元素
echo ${array_name[@]}

#获取数组的长度
length=${#array_name[@]}
length=${#array_name[*]}
lengthn=${#array_name[n]}

:<<EOF
多行注释
EOF

:<<!
多行注释
!

#参数传递
echo "Shell 传递参数实例!";
echo "执行的文件名:$0"; # $0 为执行的文件名
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";

if condition1
then
command1
elif condition2
then
command2
else
commandN
fi

for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done

while\until condition
do
command
done

case $aNum in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;;
esac

fun(){
echo '这是一个函数!'
}
funWithParam(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第十个参数为 $10 !"
echo "第十个参数为 ${10} !"
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

Linux 命令大全