My name is Linus, and I am your God.
——————Linus Torvalds
linux一般来说有2个就业方向,分别是运维岗与开发岗。
其中运维岗分为:系统运维,数据库运维,python运维开发,网络安全,云计算
开发:一般是服务器后台开发。
由于目前接触的是属于服务器后台部署开发,所以也将此做简单的汇总整理,当然了,linux还是推荐鸟叔的私房菜吧.
本次基础主要是为了接下来的部署项目所服务的。
免费使用的类Unix操作系统,基于POSIX和UNIX的多用户、多任务,支持多线程和多CPU的操作系统
发行家族:Debian(Ubuntu-Linux Mint) Fedora(RHEL-CentOS ,Oracle Linux) SUSE(SLES-openSUSE)
一般来说,服务器使用LAMP (Linux Apache Mysql Php) 或者 LNMP(linux+Nginx+Mysql+PHP)
本次环境采用的Centos
启动过程分为5个阶段:内核的引导 运行init 系统初始化 建立终端 用户登录系统
首先读入/boot目录下的内核文件,然后运行init (读取/etc/inittab)
许多程序需要开机自启,在windows是服务(service), 在linux是守护进程(daemon),其中有7个运行级别
以上基本的5个阶段。
输入su可以进入root用户
登录系统,在当前命令输入:
ls /
会得到以下目录
bin boot dev etc home jar lib lib64 lost+found media mnt mysql opt patch proc root run sbin srv sys tmp usr var www
下面对一些重要目录做讲解
/bin: 最常用命令的地方
/etc: 存放所有的系统管理所需要的配置文件和子目录
/home:用户的主目录
/lib:动态连接共享库
/usr: unix shared resources共享资源
/usr/bin: 用户使用的应用程序
/var: variable 修改的目录,日志文件
注意/表示根目录 : .或者./ 表示当前目录 …或者…/代表上一层目录
多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,linux对不同的用户访问同一文件的权限做了规定。
chown (change owner): 修改所属用户与组
chmod (change mode):修改用户的权限
输入命令
ll 或 者ls -l,可以显示文件的属性
d在文件是一个目录文件。接下来的字符中,以三个为一组,且均为rwx的三个参数组合。r表示read,w表示write,x表示execute,注意位置不会变,如果没有权限就会出现减号。同时这九个权限标注从1-9表示,其中1-3是属主权限,4-6是属组权限,7-9其他用户权限。
1.chgrp 更改文件属组
chgrp [-R] 属组名 文件名
2.chown 更改文件属组
chown [-R] 属主名 文件名
r代表4 ,w代表2,x代表1.例如:-rwxrwx—:分数owner 7,group 7 others 0,所以权限数字就是770
u(uesr), g(group),o(others) + 加入 - 除去 = 设定
touch test1
ls -al test1 //查看test1权限
chmod u=rwx,g=rx,o=r test1 //修改test1权限
绝对路径:由根目录 /,例如 /usr/share/doc
相对路径: cd …/man
常见的命令:
ls (list files)
-a 全部的文件(连同隐藏) -d 仅列出目录本身 -l 长数据串列出
cd (change directory)
cd ~ (/root)
pwd (print work directory)
mkdir (make directory)
mkdir test mkdir -p test1/test2/test3
rmdir (remove directory) 仅删除空的目录
rmdir test rmdir -p test1/test2/test2
cp (copy file)
cp source destination
rm (remove) 删除非空目录
rm -i bashrc (互动模式,删之前询问动作)
mv (move file)
cat (concatenate) 显示文件内容
tac (cat倒着写,从最后一行往上显示)
nl (number lines,显示行号和文件内容)
more (一页一页的显示文件内容)
space :向下翻一页,enter :翻一行 q:离开more
less (可以往前翻页)
head (只看头几行,默认是10)
head -n 20 /etc/man.config
tail (只看尾几行)
多用户多任务的分时操作系统
添加账户:
useradd 选项 用户名
useradd -d /home/sam -m sam 创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录名。/home为默认的用户主目录所在的父目录
useradd -s /bin/sh -g group -G adm,root gem
新建了一个用户sam,登录shell是/bin/sh,属于group,也属于其他用户组。
删除账户
userdel 选项 用户名
userdel -r sam 删除sam在系统文件中 (/etc/password,/etc/shadow等)
修改账户
usermod 选项 用户名
usermod -s /bin/ksh -d /home/z -g developer sam
用户口令的管理
刚创建时没有口令,但是被系统锁定无法使用,必须要指定口令。
passwd 选项 用户名。超级用户可以指定所有口令,普通用户只能修改自己的口令
增加一个新的用户
groupadd 选项 用户组
groupadd group1 增加了一个新组group1
groupadd -g 101 group2 增加一个新组group2,同时指定新组的组标识是101
groupdel group1 删除group1
1 /etc/passwd 最重要的一个文件
对所有用户是可读的
cat /etc/passwd
每行记录又被冒号分隔为7个字段,格式如下:
用户名:口令:用户标识号:组标识号:注释描述:主目录:登录shell
用户登录后,要启动一个进程,负责将操作传给内核,这个进程是用户登录到系统后的特定程序,即shell
shell是用户和linux之间的接口。常见的的有sh( bourne shell), csh(c shell),bash(bourne agagin shell)
默认使用sh。即字段是/bin/sh
有许多标准的伪用户,例如mail. usenet audit cron等,也都各自为相关的进程和文件所需要。
由于/etc/passwd文件所有用户都可读,如果用户密码太简单了很容易破解,一般是分离单独放在一个文件中,这个文件是/etc/shadow,只有root才能读取。
字段
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
用户组的所有信息存放在/etc/group文件中。
将用户分组是linux系统的访问权限的一种手段。
由冒号隔开若干个字段,这些字段
cat /etc/group
组名:口令:组标识号:组内用户列表
1.先编辑一个文本用户文件
touch user.txt
vim user.txt
user001::600:100:user:/home/user001:/bin/bash
user002::601:100:user:/home/user002:/bin/bash
2.创建一个密码文本
user001:123456
user002:123456
3.创建 设置密码与同步账户
newuser < user.txt
chpasswd < passwd.txt
pwconv
磁盘常用命令为 df du fdisk
df:
df (disk free):列出整体磁盘的使用量
$ df -h 显示容量
$ df -aT 将系统内所有特殊文件格式及名称列出来
$ df -h /etc
以易读的容量格式显示出来
du:对文件和目录的查看空间
du -a 显示所有文件和目录容量
du -h 容量格式显示
fdisk:分区表操作工具
fdisk -l :列出所有分区信息
磁盘格式化
mkfs [-t 文件系统格式] 装置文件名
vim分为三种模式,分别是命令模式 输入模式 底线命令模式
命令模式 vi/vim
i:输入字符
x:删除所在的字符
:底线命令模式,在最后一行输入命令
输入模式
esc:退出输入模式,切换到命令模式
insert: 切换光标为输入/替换模式,光标变成竖线
home/end:移动光标到行首/行尾
del:删除键
底线命令模式
输入:进入
q:退出程序
w:保存文件
按esc可以退出
yum (yellow dog updater ,modified)是shell前端软件包管理器
在Fedora RedHat SUSE
基于rpm包管理,能够从指定的服务器自动下载rpm包并且安装。
yum [options] [command][package ...]
常用命令
yum check-update 列出可更新的软件清单
yum install <package> 安装软件
yum list 列出所有可安装的软件清单
yum list pam* (以pam开头的软件包)
yum remove <package> 删除软件包
yum search <package> 查找软件包
yum clean packages:清除缓存目录下的软件包
yum clean headers:清除缓存目录下的heads
yum clean
国内的yum源:
使用163(网易)
首先备份/ect/yum.repos.d/CentOS-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载对应版本的repo
CentOS5 :http://mirrors.163.com/.help/CentOS5-Base-163.repo
CentOS6 :http://mirrors.163.com/.help/CentOS6-Base-163.repo
CentOS7 :http://mirrors.163.com/.help/CentOS7-Base-163.repo
wget http://mirrors.163.com/.help/CentOS5-Base-163.repo
mv CentOS6-Base-163.repo CentOS-Base.repo
运行命令生成缓存
yum clean all
yum makecache
apt (advanced packaging tools) 是一个debian. ubuntu的软件管理器,需要root权限
常用命令
sudo apt update 列出所有可更新的软件清单
sudo apt install <package_name> 安装
sudo apt remove <package_name>
sudo apt search <keyword>
apt list --installed
shell是一个用编写的程序,既是一种命令语言,也是程序设计语言。
这里主要以shell脚本编程为例。
#! 告诉系统路径所指定的程序即解释脚本文件的shell程序。
touch test.sh
vim test.sh
#! /bin/bash
echo "hello world"
chmod +x ./test.sh (使脚本有执行权限)
./test.sh (执行脚本)一定要这样写,在当前目录寻找
定义变量时,不需要加美元符号(区别php)
your_name="run"
注意变量名和等号不能有空格
处理可以显式赋值还可以用语句赋值
for file in $(ls /etc)
for file in `ls/etc`
将/etc目录下的文件名循环出来
使用变量,只要在变量前面加美元符号即可,赋值的时候不需要
your_run="qin"
echo $your_run
echo ${your_run}
花括号可加可不加,只是为了识别
my=1
readonly my 只读变量
unset my 删除变量
单引号字符串:任何字符原样输出,里面的变量无效
双引号:可以有变量
str="hello\"$your_name"\!\n"
echo $str
字符串操作
string="abcd"
获取长度
echo ${#string} # 输出4
提取子字符串,注意第一个索引为0
echo ${string:1:3} #输出bcd
查找字符串
echo `expr index "string" ab` #哪个字母先出现就先计算哪个,先输出0
shell数组
支持一维数组,不限定数组的大小,从0开始。
定义数组
array=(value0 value1 value3)
array[0]=0
array[1]=1
可以不用连续的下标
读取数组
val=${array[n]}
获取数组的长度
len=${#array[*]} or. len=${#array[@]}
注释
#
可以把一段要注释的代码用花括号括起来,定义一个函数。
:<<EOF
...注释内容
EOF
向脚本传递参数,脚本内获取参数的格式是 $n. n代表一个数字,1为执行的第一个参数
echo "shell"
echo "name : $0"
echo "firsr: $1"
chmod +x test.sh
./test.sh 1 2 (后面的是参数)
特殊字符用来处理参数:
$# :传递到脚本的参数个数
$* :以一个单字符串显示所有向脚本传递的参数
$$ 当前进程的id号
bash shell只支持一维数组,初始化不需要定义数组的大小,从0开始,使用空格分隔
array_name=(value1 value2 value3)
读取数组
${array_name[index]
echo "${array_name[0]}"
关联数组
可以使用任意字符串或者整数下标来访问数组元素
declare -A array_name
-A 用于声明一个关联数组,键是唯一的,
declare -A site=(["google"]="www.baidu.com",["run"]="www.run.com")
访问数组
echo "${array_name[*]}"
echo "${array_name[@]}" 访问全部元素
获取长度
echo "${array[*]}"
原生bash不支持数学运算,可以使用命令实现。例如awk,expr。expr是表达式工具,使用它能完成求值工作。
val=`expr 2 + 2` 表达式和运算符之间要有空格,需要被其包含
v=`expr 3 \* 4` 乘号必须要有反斜杠
echo "$val"
关系运算符
只支持数字不支持字符串,除非字符串的值是数字
a=10
b=20
if [ $a -eq $b ] 相等
if [ $a -ne $b ] 不相等
if [ $a -gt $b ] a>b?
if [ $a -lt $b ] a<b?
if [ $a -ge $b ] a>=b?
if [ $a -le $b ] a<=b?
布尔运算符
! 非
-o 或
-a 与
逻辑运算符
&& and
|| or
if condition
then
command1
command2
(fi)就一个if
else (elif)
command
for循环
for var in item1 item2 ... itemN
do
com1
com2
done
while语句
while condition
do
com
done
[function] funname[()]
{
action
[return int;]
}
domefun() {
echo "first"
}
一般来说,文件描述符0 是stdin,1是stdout ,2是stderr
command1 > file1 (将命令存入file1)