* LAMP 简明手册*
Debian 系统安装
完成目标 ==> 安装
Debian 9.1
概念1:什么是
Linux发行版?- 描述 ==> 英语:Linux distribution,也被叫做GNU/Linux 发行版
- 特点 ==> 預先整合好的Linux操作系统
- 代表 ==> Debian centos ubuntu
概念2:什么是 Debian ?
- 描述 ==> 最早的Linux发行版之一
- 特点 ==> 非常稳定的操作系统
- 评价 ==> 是一个
自由的操作系统
友情提醒 >> 服务器商都会提供系统
Debian常用的shell指令
完成目标 ==> 熟练掌握这些指令
查看Debian系统版本
# lsb_release -a # cat /etc/issue查看Linux内核版本
# cat /proc/version # uname -a查看apt源中是否存在该包
# apt list [packageName]查看包安装目录
# whereis [packageName]查找当前目录下的所有文件中是否含有某个字符串,并且只打印出文件名
# find .|xargs grep -ri '[FileName]' -l查找当前目录下指定文件
# find . -name "[FileName]"同步源
# apt-get update # aptitude update系统升级
# apt-get upgrade # aptitude upgrade # apt-get dist-upgrade # aptitude dist-upgrade友情提醒 >> apt-get比较安全、aptitude比较干净
磁盘分区
列出磁盘与分区情况
# fdisk -l指定磁盘sdb
# fdisk /dev/sdb列出磁盘分区情况
pCommand (m for help): p通过fdisk的d指令来删除一个分区
dCommand (m for help): d Partition number (1-4): 2将表写入磁盘并退出(保存并退出)
wCommand (m for help): w退出而不保存更改(退出但不保存)
qCommand (m for help): q通过fdisk的n指令增加一个分区
nCommand (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4): 1 First cylinder (1-391, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-391, default 391): 100友情提醒 >>
First cylinder是分区开始位置,Last cylinder是分区结束位置将表写入磁盘并退出(保存并退出)
wCommand (m for help): w退出而不保存更改(退出但不保存)
qCommand (m for help): q
磁盘格式化与挂载
磁盘分区格式化成ext4格式
# mkfs.ext4 [/dev/sdb2]友情提醒 >> mkfs.ext4 可以将磁盘分区格式化诚ext4格式
挂载分区到指定目录
# mount [/dev/sdb2] [/home] # mount -t ext4 [/dev/sdb2] [/home]卸载分区
# umount [/dev/sdb2]
配置网络
完成目标 ==> 让
Debian正常上网
配置网络ip地址
# vim /etc/network/interfaces auto lo iface lo inet loopback # 有线网卡动态IP配置 # auto eth0 # iface eth0 inet dhcp # 无线网卡静态IP配置 auto wlan0 # wlan0 为无线网卡, iface wlan0 inet static # static为静态, dhcp为动态 address 192.168.1.102 # 静态ip地址 netmask 255.255.255.0 # 子网掩码 gateway 192.168.1.1 # 网关 wpa-ssid ssidName # wifi账号 必须 wpa-psk ssidPassword # wifi密码配置DNS
# vim /etc/resolv.conf nameserver 114.114.114.114 # 首选DNS服务器地址 nameserver 192.168.1.1 # 备用DNS服务器地址友情提醒 >> DNS全称 “域名系统 Domain Name System”
启动网络服务
启动网络接口
# ifup eth0 # ifup wlan0关闭网络接口
# ifdown eth0 # ifdown wlan0启动网络
# systemctl restart networking.service
友情提醒 >> 服务器都自带网络
配置镜像源
完成目标 ==> 让
debian支持apt-get下载封装好的软件包
- 配置163源的开源镜像
# vim /etc/apt/sources.list
deb http://mirrors.163.com/debian/ stretch main contrib non-free
deb-src http://mirrors.163.com/debian/ stretch main contrib non-free
deb http://mirrors.163.com/debian/ stretch-updates main contrib non-free
deb-src http://mirrors.163.com/debian/ stretch-updates main contrib non-free
deb http://mirrors.163.com/debian-security/ stretch/updates main contrib non-free
deb-src http://mirrors.163.com/debian-security/ stretch/updates main contrib non-free
# apt-get update
# apt-get upgrade
友情提示 >> 服务器无需配置,一般都有配套的内网镜像
远程服务
完成目标 ==> 通过ssh客服端,远程管理
Debian服务器
安装openssh-server
# apt-get install ssh友情提示 >> 服务器一般都自动安装
配置openssh-server必备
# vim /etc/ssh/sshd_config PermitRootLogin no ## 禁止root通过ssh登录, 默认yes(yes是允许) PermitEmptyPasswords no ## 禁止空密码登陆, 默认no(yes是允许) PasswordAuthentication yes ## 设置是否允许口令验证,默认yes(no是拒绝) # DenyGroups nossh ## 禁止nossh用户群组登陆ssh, 增加 # DenyUsers testssh ## 禁止testssh用户登陆ssh, 增加限制ip登陆ssh
# vim /etc/hosts.allow sshd: 192.168.1.3 168.68.68.68 ## 只允许2个主机ip登陆 # /etc/hosts.deny sshd : ALL ## 禁止所有IP登陆
配置系统字符集编码
完成目标 ==> 让
Debian服务器编码符合自己的要求
# dpkg-reconfigure locales start
zh_CN.UTF-8 ## 这是中国的UTF-8字符集
如果你的LANG环境变量是en_US.UTF-8,那么系统的菜单、程序的工具栏语言、输入法默认语言就都是英文的;
如果你的LANG环境变量是zh_CN.UTF-8,那么系统的菜单、程序的工具栏语言、输入法默认语言就都是中文的。
常用软件
Linux 打包操作
zip 压缩与解压缩
压缩 ==> zip -q -r [目标文件名].zip [原文件名/目录名] 解压缩 ==> unzip [目标文件名].zipgzip 压缩与解压缩
- 特点
- gzip 只能压缩文件,不能压缩目录
- gzip 压缩后,不保留源文件(tar.gz打包并压缩时就不会有tar打包文件遗留)
压缩 ==> gzip test.php 压缩 ==> gunzip test.php.gz
- 特点
bzip2 压缩与解压缩
- 特点
- bzip2 只能压缩文件,不能压缩目录
- bzip2 压缩后,默认不保留源文件(-k 加上就会保留源文件)
压缩 ==> bzip2 test.php (压缩文件并删除源文件) 压缩 ==> bzip2 -k test.php (压缩文件并保留源文件) 解压缩 ==> bunzip2 test.php.gz
- 特点
tar 打包(1次只能 创建 1个包)
-c ==> 打包 -v ==> 显示详细信息 -f ==> 指定文件名(打包文件名) -z ==> 打包同时gzip压缩包 -j ==> 打包同时bzip2压缩包 写法 ==> tar -cvf 指定包目录/指定包名 要打包的文件(或目录)所在路径1 被打包文件(或目录)所在路径2 被打包文件(或目录)所在路径3 示例 ==> tar -cvf home.tar home/ -- info >> 将 当前目录下的home目录 打包成 home.tar 并存放到当前目录下 示例 ==> tar -cvf /user1.tar /home/user1/ -- info >> 将 user1 这1个用户的家目录打包成 user1.tar 并存放在根目录下面 示例 ==> tar -cvf /user.tar /home/user1/ /home/user2/ /home/user3/ -- info >> 将 user1、user2、user3 这3个用户的家目录打包成 user.tar 并存放在根目录下面 示例 ==> tar -zcvf /user.tar.gz /home/user1/ /home/user2/ /home/user3/ -- info >> 将 user1、user2、user3 这3个用户的家目录 打包并压缩成 /user.tar.gz 并存放在根目录下面(以gzip压缩) 示例 ==> tar -jcvf /user.tar.bz2 /home/user1/ /home/user2/ /home/user3/ -- info >> 将 user1、user2、user3 这3个用户的家目录 打包并压缩成 user.tar.bz2 并存放在根目录下面(以bzip2压缩)tar 解包 (1次只能 释放 1个包)
-v ==> 显示详细信息 -f ==> 指定文件名(打包文件名) -z ==> gzip解压 -j ==> bzip2解压 -C ==> 指定包解压后文件的存放目录 写法 ==> tar -xvf 包所在目录/包名 [-C 指定包解压后文件的存放目录] 示例 ==> tar -xvf home.tar -- info >> 将当前目录下的 home.tar 解压到当前目录下面 示例 ==> tar -xvf /user1.tar -C /home/ -- info >> 将根目录下的 user1.tar 解包到 /home/ 目录下面 示例 ==> tar -zxvf /user1.tar.gz -C /home/ -- info >> 将根目录下的 user1.tar 解压到 /home/ 目录下面 (用gunzip解压) 示例 ==> tar -jxvf /user1.tar.bz2 -C /home/ -- info >> 将根目录下的 user1.tar 解压到 /home/ 目录下面 (用bunzip2解压)tar 测试包
-t ==> 列出包内的内容 -v ==> 显示详细信息 -f ==> 指定文件名(打包文件名) -z ==> 查看tar.gz压缩包内容 -j ==> 查看tar.bz2压缩包内容 写法 ==> tar -tvf 包所在目录/包名 示例 ==> tar -tvf test1.tar -- info >> 列出 test1.tar 包的内容(目录列表+文件列表) 示例 ==> tar -ztvf test1.tar.gz -- info >> 列出 test1.tar.gz 压缩包的内容(目录列表+文件列表) 示例 ==> tar -jtvf test1.tar.bz2 -- info >> 列出 test1.tar.bz2 压缩包的内容(目录列表+文件列表)tar 分卷打包
-c ==> 打包 -v ==> 显示详细信息 -f ==> 指定文件名(打包文件名) -z ==> 打包同时gzip压缩包 -j ==> 打包同时bzip2压缩包 split ==> 分割 -- -b >> 按字节分割 -- -d >> 指定文件名 写法 ==> tar -cvf - 要打包的路径/文件名(或目录名) | split -b 500M -d - 包存放目录/包文件名 示例 ==> tar -cvf - user1/ | split -b 500M -d - user1.tar. -- info >> 将 user1 的家目录 分卷打包到 当前目录下面 后缀用数字命名 user1.tar.0x 示例 ==> tar -cvf - /home/user1/ | split -b 500M -d - /user1.tar. -- info >> 将 user1 的家目录 分卷打包到 根目录下面 后缀用数字命名 user1.tar.0x 示例 ==> tar -cvf - /home/user1/ /home/user2/ /home/user3/ | split -b 500M -d - /home.tar. -- info >> 将 user1、user2、user3 这3个用户的家目录 分卷打包到 根目录下面 后缀用数字命名 home.tar.0x 示例 ==> tar -zcvf - /home/user1/ | split -b 500M -d - /user1.tar.gz. -- info >> 将 user1 的家目录 分卷压缩到 根目录下面 后缀用数字命名 user1.tar.gz.0x (以gzip压缩) 示例 ==> tar -jcvf - /home/user1/ | split -b 500M -d - /user1.tar.bz2. -- info >> 将 user1 的家目录 分卷压缩到 根目录下面 后缀用数字命名 user1.tar.bz2.0x (以bzip2压缩)tar 分卷解包
-x ==> 解包 -v ==> 显示详细信息 -z ==> 打包同时gzip压缩包 -j ==> 打包同时bzip2压缩包 -C ==> 指定包解压后文件的存放目录 cat ==> 合并 写法 ==> cat 包所在路径/包名* | tar xv -C 指定解压后存放目录 示例 ==> cat user1.tar.0* | tar xv -- info >> 将 user1.tar.0* 分卷压缩包 解压到当前目录下面 示例 ==> cat /user1.tar.0* | tar xv -- info >> 将 根目录下的user1.tar.0*分卷压缩包 解压到当前目录下面 示例 ==> cat /user1.tar.0* | tar xv -C /home/ -- info >> 将 根目录下的user1.tar.0*分卷压缩包 解压到/home/目录下面 示例 ==> cat user1.tar.gz.0* | tar zxv -- info >> 将 user1.tar.gz.0* 分卷压缩包 解压到当前目录下面 示例 ==> cat user1.tar.bz2.0* | tar jxv -- info >> 将 user1.tar.bz2.0* 分卷压缩包 解压到当前目录下面
vim 中文帮助
# wget --no-check-certificate https://github.com/yianwillis/vimcdoc/releases/download/v2.1.0/vimcdoc-2.1.0.tar.gz # tar -xzvf vimcdoc-2.1.0.tar.gz # cd vimcdoc-2.1.0 # ./vimcdoc.sh -i ## 安装 与英文版本共存 # ./vimcdoc.sh -I ## 安装 替换英文版本 # cd /usr/share/doc/vimcdoc # ./vimcdoc.sh -u ## 卸载vim配置文件(vimrc)
syntax enable " 开启高亮 set cursorline " 当前行高亮 set cursorcolumn " 当前列高亮 set autoindent " 自动缩进,即为新行自动添加与当前行同等的缩进 set smartindent " 开启新行时使用智能自动缩进。适用于 C 这样的程序,类似cindent,多数情况下比cindent更好 filetype plugin indent on " 自动检测文件格式、插件支持、缩进 set nowrap " 开启不自动换行(默认 wrap) set encoding=utf8 " 默认编码格式 utf-8 set fileencodings=ucs-bom,utf8,prc,default,latin1 " 支持的编码格式 language messages zh_CN.utf-8 " 指定consle消息用中文uft-8显示(服务器默认是英文界面) set fileformat=unix " 换行符默认unix模式 set fileformats=unix,dos,mac " 换行符支持Unix dos mac 3种模式 set laststatus=2 " 开启状态栏信息,默认为1,可以设为2 set cmdheight=1 " 命令行的高度,默认为1,可以设为2 set tabstop=4 " 编辑时一个TAB字符占多少个空格的位置(默认为8空格) set softtabstop=4 " <Tab>键、<BS>退格键(backspace)每次前进或删除的空格数、插入模式下<C-T>、<C-D>每次相对行首前进或后退的空格数(默认为8空格) set shiftwidth=4 " (自动)缩进使用的空格数(默认为8空格) set expandtab " 是否(noexpandtab/expandtab)将输入<Tab>时自动展开成空格。开启后要输入<Tab>,需要<C-V><TAB> (默认为 noexpandtab ) set smarttab " (需要开启expandtab才有意义)开启时,<Tab><BS>将加入或删除 shiftwidth 个空格,插入模式下<C-T>、<C-D>每次相对行首前进或后退的空格数(默认为 nosmarttab ) set scrolloff=999 " 光标上下两侧最少保留的屏幕行数(999光标始终位于编辑器屏幕中间,默认为 0) " set showcmd " 在屏幕最后一行显示(部分的)命令。(ms-win32下已经开启) " set ruler " 标尺。显示光标位置的行号和列号,都好分割(ms-win32下已经开启) set foldmethod=indent " 折叠方式 set foldcolumn=1 " 在窗口左侧显示,1列指示折叠的打开和关闭的界面(默认为0,不显示) set foldlevelstart=99 " 打开文件时的折叠状态(0 关闭所有折叠,1 关闭部分折叠,99 开始不折叠, 默认 -1) let $za='za' " 定义变量$za为 <z> <a> 组合键 nnoremap <Space> $za " <Space> 映射成 折叠与展开 " set showtabline=1 " 开启标签栏(0永远不会,1至少两个标签,2永远会,默认 1) inoremap <C-c> <ESC> " <C-c> 映射成 <Esc> " 普通模式下使用相对行号 set relativenumber number autocmd InsertEnter * :set norelativenumber number autocmd InsertLeave * :set relativenumber number " 普通模式使用相对行号(只支持GUI) " set relativenumber number " autocmd FocusGained * :set norelativenumber number " autocmd FocusLost * :set relativenumber number " 启用每行超过80列的字符提示(字体变蓝并加下划线),不启用就注释掉 autocmd BufWinEnter * let w:m2=matchadd('Underlined', '\%>' . 80 . 'v.\+', -1) " 括号自动补全(我不用,推荐使用auto-pairs插件替代) " inoremap ( ()<Left> " inoremap [ []<Left> " inoremap { {}<Left> " inoremap ' ''<Left> " inoremap " ""<Left> " inoremap ` ``<Left> " 删除左括号同时删除右括号及括号里的内容(我不用,推荐使用auto-pairs插件替代) " function! RemovePairs() " let l:line = getline(".") " let l:previous_char = l:line[col(".")-1] " if index(["(", "[", "{"], l:previous_char) != -1 " let l:original_pos = getpos(".") " execute "normal %" " let l:new_pos = getpos(".") " if l:original_pos == l:new_pos " execute "normal! a\<BS>" " return " end " let l:line2 = getline(".") " " if len(l:line2) == col(".") " execute "normal! v%xa" " else " execute "normal! v%xi" " end " else " execute "normal! a\<BS>" " end " endfunction " inoremap <BS> <ESC>:call RemovePairs()<CR>a " inoremap <C-h> <ESC>:call RemovePairs()<CR>a " 在括号补全后,输入右括号,不会增加括号,并移动到右括号右侧 (我不用,推荐使用auto-pairs插件替代) " function! RemoveNextDoubleChar(char) " let l:line = getline(".") " let l:next_char = l:line[col(".")] " " if a:char == l:next_char " execute "normal! l" " else " execute "normal! i" . a:char . "" " end " endfunction " inoremap ) <ESC>:call RemoveNextDoubleChar(')')<CR>a " inoremap ] <ESC>:call RemoveNextDoubleChar(']')<CR>a " inoremap } <ESC>:call RemoveNextDoubleChar('}')<CR>a if has("gui_running") " 不启用鼠标(gvim默认为a,vim默认为空) set mouse= " 不执行系统菜单脚本 "$VIMRUNTIME/menu.vim" set guioptions=M " 启用鼠标并执行系统菜单脚本时解决中文菜单乱码问题(gui) " source $VIMRUNTIME/delmenu.vim " set langmenu=zh_CN.utf-8 " source $VIMRUNTIME/menu.vim " 设置窗口大小 高度35行 宽度120个字符 set lines=35 columns=120 " 设置英文、中文为不同字体(ms-gui) set guifont=DejaVu_Sans_Mono:h12 set guifontwide=Microsoft_YaHei_Mono:h12 " 设置英文、中文为不同字体(unix_gui) " set guifont=DejaVu\ Sans\ Mono\ h12 " set guifontwide=Microsoft\ YaHei\ Mono\ h12 else " 解决终端中文乱码(常用于linux服务器) set termencoding=prc endif " 需要目录管理插件[nerdtree]支持,使用快捷键<C-\>即可打开目录管理插件 nnoremap <C-\> :NERDTreeToggle<CR> " {{{ 需要全屏插件[gvimfullscreen.dll]支持,将其复制到gvim.exe相同目录下即可(针对ms-GUI) " 普通模式按 <F11> 全屏切换 " 普通模式 Shift + t 降低窗口透明度 " 普通模式 Shift + y 加大窗口透明度 " 普通模式 Shift + r 切换Vim是否总在最前面显示 if has('gui_running') && has('gui_win32') && has('libcall') let g:MyVimLib = 'gvimfullscreen.dll' function! ToggleFullScreen() "let s:IsFullScreen = libcallnr("gvimfullscreen.dll", 'ToggleFullScreen', 0) "let s:IsFullScreen = libcallnr("gvimfullscreen.dll", 'ToggleFullScreen', 27 + 29*256 + 30*256*256) call libcall(g:MyVimLib, 'ToggleFullScreen', 27 + 29*256 + 30*256*256) endfunction let g:VimAlpha = 245 function! SetAlpha(alpha) let g:VimAlpha = g:VimAlpha + a:alpha if g:VimAlpha < 180 let g:VimAlpha = 180 endif if g:VimAlpha > 255 let g:VimAlpha = 255 endif call libcall(g:MyVimLib, 'SetAlpha', g:VimAlpha) endfunction let g:VimTopMost = 0 function! SwitchVimTopMostMode() if g:VimTopMost == 0 let g:VimTopMost = 1 else let g:VimTopMost = 0 endif call libcall(g:MyVimLib, 'EnableTopMost', g:VimTopMost) endfunction "映射 F11 切换全屏vim map <F11> <Esc>:call libcallnr("gvimfullscreen.dll", "ToggleFullScreen", 0)<CR> "切换Vim是否在最前面显示 map <s-r> <esc>:call SwitchVimTopMostMode()<cr> "增加Vim窗体的不透明度 map <s-t> <esc>:call SetAlpha(10)<cr> "增加Vim窗体的透明度 map <s-y> <esc>:call SetAlpha(-10)<cr> "Vim启动的时候自动调用 InitVim 以去除Vim的白色边框 autocmd GUIEnter * call libcallnr(g:MyVimLib, 'InitVim', 0) " 默认设置透明 autocmd GUIEnter * call libcallnr(g:MyVimLib, 'SetAlpha', g:VimAlpha) endif " }}}
vim 操作指南
" ======================================================== " vim 操作指南 " ======================================================== " PS: 插入模式下的实用快捷键 " <C-j> 回车,相当于<CR> " <C-h> 删除前一个字符,相当于<BS> " <C-w> 删除前一个单词 " <C-u> 删除至行首 " <C-t> 增加缩进 " <C-d> 减少缩进 " <C-y> 复制上一行的相同列的字符 " <C-e> 复制下一行的相同列的字符 " <C-x> <C-o> 补全类型为全能(Omni)补全 " <C-p> 在补全列表中反向选择 " <C-n> 在补全列表中正向选择 " PS: 普通模式下的指令 " ga 显示光标下字符的ascii值 " g8 显示光标下字符(假定其为 utf-8 编码) 的个字节十六进制值 " 屏幕滚动 " <C-e> 屏幕-向下滚屏(默认1行) " <C-d> 屏幕-向下滚屏(默认半屏) " <C-f> 屏幕-向下滚屏(默认1屏) " <C-y> 屏幕-向上滚屏(默认1行) " <C-u> 屏幕-向上滚屏(默认半屏) " <C-b> 屏幕-向上滚屏(默认1屏) " <z> <l> 屏幕-向右滚屏(默认1个字符) " <z> <L> 屏幕-向右滚屏(默认半屏) " <z> <h> 屏幕-向左滚屏(默认1个字符) " <z> <H> 屏幕-向左滚屏(默认半屏) " [count]w 正向 [count] 个单词-单词头部 (count 默认为1) " [count]e 正向 [count] 个单词-单词尾部 " [count]b 反向 [count] 个单词-单词头部 " [count]ge 反向 [count] 个单词-单词尾部 " d[count]w 正向删除 [count] 个单词 " d[count]b 反向删除 [count] 个单词 " [count]x 正向删除 [count] 个字符 " [count]X 反向删除 [count] 个字符 " [count]D 删除光标所在的字符到行尾及其后的 [count]-1 行 " 复制与黏贴 " v 进入可是模式,以字符为单位选择 " V 进入可是模式,以行为单位位择 " y[count]w 复制 [count] 个单词 " [count]Y, [count]yy 正向复制 [count] 行 " [count]P 正向粘贴、循环 [count] 次 " "+Y, "*Y, "~Y 将编辑器的文本保存 至 剪切板 " "+[count]Y, "*[count]Y, "~[count]Y 将编辑器的文本保存 至 剪切板 " "+p, "*p, "~p 从剪切板的文件粘贴 到 编辑器 " "+[count]p, "*[count]p, "~[count]p 从剪切板的文件粘贴 到 编辑器 " 分割窗口 " <C-w> <s> 水平分割当前窗口 " <C-w> <v> 垂直分割当前窗口 " <C-w> <q> 关闭当前窗口 " <C-w> <n> 打开一个新窗口(空文件) " <C-w> <o> 关闭除了当前窗口外的所有窗口 " <C-w> <T> 当前窗口移动到新标签页(T要大写) " 切换窗口 " <C-w> <h> 切换窗口 - 向左(小写) " <C-w> <j> 切换窗口 - 向下(小写) " <C-w> <k> 切换窗口 - 向上(小写) " <C-w> <l> 切换窗口 - 向右(小写) " <C-w> <w> 切换窗口 - 正向遍历 " <C-w> <W> 切换窗口 - 反向遍历(W大写) " 移动窗口 " <C-w> <H> 移动窗口 - 向左(大写) " <C-w> <J> 移动窗口 - 向下(大写) " <C-w> <K> 移动窗口 - 向上(大写) " <C-w> <L> 移动窗口 - 向右(大写) " <C-w> <r> 移动窗口 - 正向移动 " <C-w> <R> 移动窗口 - 反向移动(R大写) " 调整窗口大小 " <C-w> <n> <+> 调整窗口 - 增加n行高度 " <C-w> <n> <-> 调整窗口 - 减少n行高度 " <C-w> <n> <>> 调整窗口 - 增加n列宽度 " <C-w> <n> <<> 调整窗口 - 减少n列宽度 " <C-w> <=> 统一窗口 高度与宽度 " PS: 命令行模式的指令 " 消除搜索高亮 :noh[lsearch] " 设置文件类型 :set typefile=php " 文件编码查询 :set fileencoding " 文件编码转换 :set fileencoding=utf8 " 文件类型查询 :set fileformat " 文件类型转换 :set fileformat=unix " 保存并关闭 :wq " 强制退出 不保存 :q! " 新建文件名冲突, 强制替换文件文本 :w! filename " 新建文件名冲突, 强制替换文件文本并退出 :wq! filename " 标签页 " 新建文件到新标签页 :tabedit newfilename " 开打文件到新标签页 :tabedit filepath/filename " 复制当前编辑文件到新标签页 :tab split " 打开帮助手册到新标签页 :tab help gt " gt 转到后一个标签页,末标签页则回到第一个 " gT 转到前一个标签页,首个标签页则回到最后一个 " 分割 " 打开新窗口 " 平行分割 :split, :new " 垂直分割 :vsplit " 分割窗口打开指定文件 :[split, vsplit, new] filepath/filename " 关闭单个分割窗口 :close, :exit " 关闭当前分割窗口外的所有窗口 :only[!] (当其它窗口文件有修改时加!) " 控制台(consle)下打开多个文件 " gvim -o file1 file2 file3 小写o是水平分割窗口 " gvim -O file1 file2 file3 大写O是垂直分割窗口 " vim -o file1 file2 file3 小写o是水平分割窗口 " vim -O file1 file2 file3 大写O是垂直分割窗口 " 缓冲区 buffer " :.,$-bdelete " 删除从当前开始到倒数第二个的缓冲区 " :%bdelete " 删除所有缓冲区 " :.+,$bwipeout " 真正删除当前缓冲区之后的所有缓冲区 " :%bwipeout " 真正删除所有缓冲区 " 目录与文件名 " 查看当前目录 :pwd " 查看当前文件 :file " 主题样式 " 设置主题 " :colorscheme twilight " :colorscheme candy " :colorscheme github " :colorscheme solarized " :set background=dark " :set background=light " 插件surround 操作说明 " 替换符号 ==> cs + 所选符号 + ex命令行输入要替换的符号或标签 " 实例 >> cs"' cs"<div> " 替换标签 ==> cst + ex命令行输入要替换的符号或标签,t代指tab " 实例 >> cst' cst<div> " 删除符号 ==> ds + ex命令行输入要删除的符号 " 实例 >> ds" " 删除标签 ==> ds + ex命令行输入t " 实例 >> dst " 添加操作 ==> ys + iw + ex命令行输入要添加的符号或标签 " 实例 >> ysiw" ysiw<div> " 添加整行操作 ==> ys + s + ex命令行输入要添加的符号或标签 " 实例 >> yss" yss<div> " 选中区域添加操作 ==> 可视模式下选中的内容 + S(大写) + ex命令行输入要添加的符号或标签 " 实例 >> veeS" veeS<div> " 插件repeat 操作说明 " 普通模式下 按 “.” (点号),执行上一步操作,支持插件surround " 插件nerdtree 操作说明 " <go> 在另一个窗口展开当前目录(unix是全目录,ms史一个盘做更目录) " <i> 和 <s> 水平/纵向分割窗口并打开文件 " <t> 在标签页中打开该文件/目录(正向) " <T> 在标签页中打开该文件/目录(反向) " <p> 回到上层目录(小写) " <P> 回到根目录(大写) " <R> 重新载入目录列表(大写) " <K> 跳到同级第一个节点(大写) " <J> 跳到同级最后一个节点(大写) " <m> 显示文件系统菜单(ma添加 md删除 mm移动) " <?> 帮助 " <q> 关闭压缩与解压缩
zip
# zip -q -r [目标文件名].zip [原文件名/目录名] ## zip压缩 # unzip [目标文件名].zip ## zip解压缩tar.gz
# zip tar -zcvf [目标文件名].tar.gz [原文件名/目录名] ## tar.gz打包并压缩 # tar -zxvf [目标文件名].tar.gz ## tar.gz解压并解包tar.bz2
# tar -jcvf [目标文件名].tar.bz2 [原文件名/目录名] ## tar.bz2打包并压缩 # tar -jxvf [目标文件名].tar.bz2 ## tar.bz2解压并解包
配置终端界面
完成目标 ==> 让终端简洁直观
# vim /root/.bashrc
# 默认情况下/root/.bashrc文件 所有内容处于备注状态,直接往下添加内容即可
export LS_OPTIONS='--color=auto' # 文件与文件夹显示不同颜色
alias ls='ls $LS_OPTIONS -F' # ls 替代 ls -F
alias ll='ls $LS_OPTIONS -lAF' # ll 替代 ls -lAF
PS1='[${debian_chroot:+($debian_chroot)}\u:\w]\$ ' # 让命令行提示符更直观
SP1配置说明
- \u@\h:\w$ ==> 用户名@主机名:路径$
- \033[01;33;1m] ==> \033[显示状态;前景色;背景色m] (文章里没配置)
PS1组成元素的编码
状态值 状态 \a ASCII响铃字符(也可以键入\007) \d “WedSep06”格式的日期 \e ASCII转义字符(也可以键入\033) \h 主机名的第一部分(如“mybox”) \H 主机的全称(如“mybox.mydomain.com”) \j 在此shell中通过按^Z挂起的进程数 \l 此shell的终端设备名(如“ttyp4”) \n 换行符 \r 回车符 \s shell的名称(如“bash”) \t 24小时制时间(如“23:01:01”) \T 12小时制时间(如“11:01:01”) \@ 带有am/pm的12小时制时间 \u 用户名 \v bash的版本(如2.04) \V Bash版本(包括补丁级别)?/td>; \w 当前工作目录(如“/home/drobbins”) \W 当前工作目录的“基名(basename)”(如“drobbins”) \! 当前命令在历史缓冲区中的位置 \# 命令编号(只要您键入内容,它就会在每次提示时累加) \$ 如果您不是超级用户(root),则插入一个“$”;如果您是超级用户,则显示一个“#” \xxx 插入一个用三位数xxx(用零代替未使用的数字,如“/007”)表示的ASCII字符 \ 反斜杠 [ 这个序列应该出现在不移动光标的字符序列(如颜色转义序列)之前。它使bash能够正确计算自动换行。 ] 这个序列应该出现在非打印字符序列之后。 PS1颜色表
颜色 黑色 红色 绿色 黄色 蓝色 紫红色 青蓝色 白色 前景色 30 31 32 33 34 35 36 37 背景色 40 41 42 43 44 45 46 47 PS1状态表
意义 OFF 高亮显示 underline 闪烁 反白显示 不可见 代码 0 1 4 5 7 8
LAMP 服务器环境
完成目标 ==> 搭建 PHP 服务器环境
# apt-get install php apache2 mariadb-server php-mysql
配置apache2
完成目标 ==> 了解apache如何配置
/etc/apache2目录下说明
[x-enabled] 里面的文件都是 [x-available] 的一个软链接
- apache2扩展模块 >> mods-available + mods-enabled
- apache2站点配置文件 >> sites-available + sites-enabled
- apache子配置文件 >> conf-available >> conf-enabled
友情提示 >>
a2ensitea2dissite其实就是创建、删除快捷键扩展模块
- 启动 >> a2enmod [模块名 or 简写]
- 禁用 >> a2dismod [模块名 or 简写]
# a2enmod rewrite # a2dismod rewrite.load # ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load ## 创建 模块快捷键 # rm -f /etc/apache2/mods-enabled/rewrite.load ## 删除 模块快捷键 # systemctl restart apache2站点配置文件
- 启动 >> a2ensite [配置文件名 or 简写]
- 禁用 >> a2dissite [配置文件名 or 简写]
# a2dissite 000-default # a2dissite 000-default.conf # ln -s /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-enabled/000-default.conf ## 创建 配置文件快捷键 # rm -f /etc/apache2/sites-enabled/000-default.conf ## 删除 配置文件快捷键 # systemctl restart apache2
apache2.conf 配置文件
apache2.conf 是apache2的主配置文件
# vim /etc/apache2/apache2.conf ... <Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> ... # 可以自己增加站点可访问目录 <Directory /alidata/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> ... # 可以增加网站配置文件所在目录,自带的sites-enabled目录不好批量操作 IncludeOptional /alidata/vhosts1/*.conf IncludeOptional /alidata/vhosts2/*.conf IncludeOptional /alidata/vhosts3/*.conf # apache2.2下 AllowOverride 属性 # AllowOverride All ## 支持所有指令,如:支持.htaccess文件的伪静态, 需要开启apache2的rewrite模块 # AllowOverride None ## 不支持任何指令 # AllowOverride AutoConfig ## 允许使用所有的权限指令, phpmyadmin目录一般是这个权限 # AllowOverride FileInfo ## 允许使用文件控制类型的指令 # AllowOverride Indexes ## 允许使用目录控制类型的指令 # AllowOverride Limit ## 允许使用权限控制指令 # AllowOverride Indexes ## 允许使用控制目录特征的指令 # apache2.2下 option 属性 # All 准许以下除MultiViews以外所有功能 # MultiViews 允许多重内容被浏览,如果你的目录下有一个叫做foo.txt的文件,那么你可以通过/foo来访问到它,这对于一个多语言内容的站点比较有用 # Indexes 若该目录下无index文件,则准许显示该目录下的文件以供选择 # IncludesNOEXEC 准许SSI,但不可使用#exec和#include功能 # Includes 准许SSI # FollowSymLinks 在该目录中,服务器将跟踪符号链接。注意,即使服务器跟踪符号链接,它也不会改变用来匹配不同区域的路径名,如果在<Local>;标记内设置,该选项会被忽略 # SymLinksIfOwnerMatch 在该目录中仅仅跟踪本站点内的链接 # ExecCGI 在该目录下准许使用CGI ... # systemctl restart apache2vhosts配置文件 模版
写vhosts配置文件 其实就是一个模版套用
# cd /etc/apache2/sites-available # touch test.conf # vim test.conf <VirtualHost *:80> ServerAdmin linjialiang@163.com ServerName test.com ServerAlias test.com www.test.com DocumentRoot /alidata/www/www_test_com/ ErrorLog ${APACHE_LOG_DIR}/www_test_com-error.log CustomLog ${APACHE_LOG_DIR}/www_test_com-access.log combined RewriteEngine on RewriteCond %{HTTP:Host} ^test\.com$ [NC] RewriteRule (.*) http://www\.test\.com$1 [NC,R=301] </VirtualHost> # apache2 配置别名 Alias /phpmyadmin "C:/xampp/phpMyAdmin/" <Directory "C:/xampp/phpMyAdmin/"> AllowOverride AuthConfig Require local ErrorDocument 403 /error/XAMPP_XAMPP_FORBIDDEN.html.var </Directory>apache2 的分支配置文件 envvars
对于apache2ctl默认的环境变量 都配置在envvars文件里面
apache2的用户、用户组
# vim /etc/apache2/envvars ## apache2 默认的用户及用户组 export APACHE_RUN_USER=www-data export APACHE_RUN_GROUP=www-data ## 修改 apache2 默认的用户及用户组为 www export APACHE_RUN_USER=www export APACHE_RUN_GROUP=wwwapache2的日志目录
# vim /etc/apache2/envvars ## apache2 默认的日志目录 export APACHE_LOG_DIR=/var/log/apache2$SUFFIX ## 修改 apache2 默认的日志目录为 /alidata/log/apache2 export APACHE_LOG_DIR=/alidata/log/apache2$SUFFIX
用户及用户组的应用 (apache2额外知识)
/etc/passwd
/etc/passwd文件是用户管理工作涉及的最重要的一个文件
# vim /etc/passwd ... root:x:0:0:root:/root:/bin/bash ... www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin ... sshd:x:107:65534::/var/run/sshd:/usr/sbin/nologin ...用户名 口令 用户标识号 组标识号 注释性描述 主目录 登录Shell root x 0 0 root /root /bin/bash www-data x 33 33 www-data /var/www /usr/sbin/nologin sshd x 107 65534 /var/run/sshd /usr/sbin/nologin
友情提示 ==> /etc/passwd文件对所有用户都是可读的
/etc/shadow
Linux系统把用户加密后的口令分离出来,单独存放在这个文件中
# vim /etc/shadow ... root:xxx:17410:0:99999:7::: ... www-data:*:17358:0:99999:7::: ... sshd:*:17358:0:99999:7::: ...登录名 加密口令 最后一次修改时间 最小时间间隔 最大时间间隔 警告时间 不活动时间 失效时间 标志 root xxx 17410 0 99999 7 www-data * 17358 0 99999 7 sshd * 17358 0 99999 7 友情提示 ==> /etc/shadow 只有超级用户root可读
/etc/group
用户组的所有信息都存放在
/etc/group文件中- 用户组的所有信息都存放在
/etc/group文件中 - 每个用户都属于某个用户组;一个组中可以有多个用户,一个用户也可以属于不同的组。
- 当一个用户同时是多个组中的成员时,在
/etc/passwd文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。 - 用户要访问属于附加组的文件时,必须首先使用
newgrp命令使自己成为所要访问的组中的成员。
# /etc/group ... www-data:x:33: ... ssh:x:112: ... mysql:x:119: ...组名 口令 组标识号 组内用户列表 www-data x 33 ssh x 112 mysql x 119 - 用户组的所有信息都存放在
用户、用户组的建立与删除
# useradd www # userdel www # groupadd www # groupdel www ## 新建[www]用户并添加家目录[/home/www] # useradd -d /home/www www ## 新建用户www, 目录为/home/www, 终端登陆方式为/usr/sbin/nologin, 用户组为www, 并添加到附加组www-data useradd -d /home/www -s /usr/sbin/nologin -g www -G www-data -m www ## 将用户www的登陆shell方式 修改为/usr/sbin/nologin # usermod -s /usr/sbin/nologin www ## 将用户www的目录修改为/home/www,如果目录不存在,则强制建立目录 # usermod -d /home/www -m www ## 将用户添加到其它附加组,不加-a,之前的附加组就会消失 # usermod -a -G group1,group2... username ## 修改用户(user)的名称 # usermod -l news_username old_username ## 修改用户组(group)的名称 # groupmod -n new_groupname old_groupname新建FTP用户
# useradd -d [用户目录] -s [用户shell登陆方式] -g [用户组名] -m [用户名] # passwd [用户名] # [输入用户密码] ## debian # useradd -d [/alidata/www] -s /usr/sbin/nologin -g www -m www # passwd www # 123456 ## centos useradd -d [/alidata/www] -s /sbin/nologin -g www -m www # passwd www # 123456
配置mariadb
开启远程链接数据库
- 问题1 ==> mariadb绑定了本地地址,远程无法访问
# vim /etc/mysql/mariadb.conf.d/50-server.cnf ... ## 找到下面这段并注释掉 # bind-address = 127.0.0.1 ...- 问题2 ==> 数据库用户,需要开启指定主机(或任意主机)访问权限
# mysql -uroot -p # [输入密码] ## 开启任意主机访问权限 mysql> grant all privileges on *.* to 'username'@'%' identified by 'passwd' with grant option; mysql> flush privileges; ## 仅让指定IP开启远程连接功能 mysql> grant all privileges on *.* to 'username'@'114.0.0.1' identified by 'passwd' with grant option; mysql> flush privileges; ## 只能本地用户访问(phpmyadmin就是本地访问) mysql> grant all privileges on *.* to 'username'@'localhost' identified by 'passwd' with grant option; mysql> flush privileges; # systemctl restart mysql.service [or] # systemctl restart mysqld.service [or] # systemctl restart mariadb.servicemariadb 数据库操作
debian 9 下的mariadb在安全状态下,root用户不能
超级管理员以外的用户使用创建用户
## 登陆 mariadb # mysql -uroot -p # [输入密码] mysql> create user '[username]'@'[host]' identified by '[password]'; mysql> flush privileges;案例
create user 'dog'@'localhost' identified by '123456'; create user 'pig'@'192.168.1.101' idendified by '123456'; create user 'pig'@'%' identified by '123456'; create user 'pig'@'%' identified by ''; create user 'pig'@'%';
授权用户
# mysql -uroot -p # [输入密码] # [privileges] 是用户的操作权限 select, insert, update, all mysql> grant [privileges] on [databasename.tablename] to '[username]'@'[host]'; mysql> flush privileges;案例
mysql> grant select, insert on test.user to 'pig'@'%'; mysql> grant all on *.* to 'pig'@'%'; ## 用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令: mysql> grant [privileges] on [databasename.tablename] to '[username]'@'[host]' with grant option;
设置与更改用户密码
mysql> set password for 'username'@'host' = password('newpassword'); ## 如果是当前登陆用户用: mysql> set password = password("newpassword"); ## 案例 mysql> set password for 'pig'@'%' = password("123456");- 撤销用户权限
mysql> revoke [privilege] on [databasename.tablename] from '[username]'@'[host]'; ## privilege, databasename, tablename:同授权部分 ## 案例 mysql> revoke select on *.* from 'pig'@'%';- 删除用户
mysql> drop user 'username'@'host';
安装与配置vsftpd
安装vsftpd
# apt-get install vsftpd配置vsftpd
拒绝的连接
# vim /etc/hosts.deny # 拒绝所有连接 vsftpd: ALL # 拒绝IP地址范围 vsftpd: 10.0.0.0/16允许的连接
# vim /etc/hosts.allow # 允许所有连接 vsftpd: ALL # 允许IP地址范围 vsftpd: 10.0.0.0/16
附录
apache2.4 访问日志
【
apache2.4访问日志】按天分割日志文件,并不记录图片、css、js<VirtualHost *:80> DocumentRoot /www/www_test_com/ ServerName www.test.com ServerAlias test.com www.test.com ErrorLog "/logs/apache2/www_test_com-error.log" common # CustomLog "/logs/apache2/www_test_com-access.log" common <FilesMatch ".(ico|gif|jpg|png|swf|css|js)"> SetEnv IMAG 1 </FilesMatch> CustomLog "|/usr/bin/rotatelogs /logs/apache2/www_test_com/www_test_com-%Y-%m-%d-access.log 86400" combined env=!IMAG </VirtualHost>rotatelogs是apache2.4中自带的管道日志程序
- 如果你不知道
rotatelogs所在位置,可以在终端通过以下方式查找所在位置
- locate rotatelogs
- 如果你不知道
FilesMatch里面是要过滤的文件格式86400这个是1天是秒数,代表1天后自动生成新的日志文件- 组合日志
combined,通用日志common
- 许多时候,根据与请求特征相关的环境变量来有选择地记录某些客户端请求会带来便利;
- 首先,需要使用SetEnvIf指令来设置特定的环境变量以标识符合某种特定条件的请求;
- 然后用CustomLog指令的 env= 子句,根据这些环境变量来决定记录或排除特定的请求。
- 分割日志文件
CustomLog(访问日志)支持rotatelogs来分割日志文件;ErrorLog(错误)无法使用rotatelogs来分割日志文件;
【
apache2.4访问日志】按天分割日志文件<VirtualHost *:80> DocumentRoot /www/www_test_com/ ServerName www.test.com ServerAlias test.com www.test.com ErrorLog "/logs/apache2/www_test_com-error.log" common # CustomLog "/logs/apache2/www_test_com-access.log" common CustomLog "|/usr/bin/rotatelogs /logs/apache2/www_test_com/www_test_com-%Y-%m-%d-access.log 86400" common </VirtualHost>【
apache2.4访问日志】不记录图片、css、js<VirtualHost *:80> DocumentRoot /www/www_test_com/ ServerName www.test.com ServerAlias test.com www.test.com ErrorLog "/logs/apache2/www_test_com-error.log" common # CustomLog "/logs/apache2/www_test_com-access.log" common <FilesMatch ".(ico|gif|jpg|png|swf|css|js)"> SetEnv IMAG 1 </FilesMatch> CustomLog "/logs/apache2/www_test_com/www_test_com-access.log" combined env=!IMAG </VirtualHost>
apache2.4 跨域访问资源(如字体)
首先
apache2.4要开启mod_headers模块# a2enmod headers # /etc/init.d/apache2 restart在vhosts下为指定网站开启跨域头读取权限
<VirtualHost *:80> ... <IfModule mod_headers.c> <FilesMatch "\.(svg|eot|otf|ttf|woff|woff2)$"> Header set Access-Control-Allow-Origin "*" </FilesMatch> </IfModule> ... </VirtualHost>注意事项:
*代表所有ip都允许访问- 安全起见,最好指定ip地址
phpmyadmin 配置文件
配置文件所在目录 ==>
/etc/phpmyadmin/config.inc.php # 这是debian本地默认配置文件,会覆盖phpmyadmin的配置文件 /usr/share/phpmyadmin/config.inc.php # 这是会生效的配置 /usr/share/phpmyadmin/config.sample.inc.php # 这是参考的配置 /usr/share/phpmyadmin/libraries/config.inc.php # 这是默认的配置简单的修改配置文件
# cookie模式最好 /* Authentication type and info */ # $cfg['Servers'][$i]['auth_type'] = 'config'; # $cfg['Servers'][$i]['user'] = 'root'; # $cfg['Servers'][$i]['password'] = ''; # $cfg['Servers'][$i]['extension'] = 'mysqli'; # $cfg['Servers'][$i]['AllowNoPassword'] = true; # $cfg['Lang'] = ''; $cfg['Servers'][$i]['auth_type'] = 'cookie'; # 高级功能用户、密码可设置为空 /* User for advanced features */ # $cfg['Servers'][$i]['controluser'] = 'pma'; # $cfg['Servers'][$i]['controlpass'] = ''; $cfg['Servers'][$i]['controluser'] = ''; $cfg['Servers'][$i]['controlpass'] = ''; # 主题风格更改为original $cfg['ThemeDefault'] = 'original';一些注意事项
phpmyadmin数据库提供phpmyadmin的高级功能,如果删除,高级功能将无法使用
– 如果未安装或已经删除,可以在找到原因那里,点击Create自动创建
Apache2.4 和 Apache2.2 访问控制配置语法对比
拒绝所有请求
Apache2.2配置Order deny,allow # 排序,先拒绝后允许 Deny from all # 拒绝所有Apache2.4配置<RequireAll> Require all denied # 拒绝所有 </RequireAll>
允许所有请求
Apache2.2配置Order allow,deny # 排序,先允许后拒绝 Allow from all # 允许所有Apache2.4配置<RequireAll> Require all granted # 允许所有 </RequireAll>
拒绝所有,仅允许特定ip、特定域名的请求
Apache2.2配置Order Deny,Allow # 排序,先拒绝后允许 Deny from all # 拒绝所有 Allow from 1.1.0.0/16 baidu.com # 允许特定ip、特定域名的请求Apache2.4配置<RequireAll> Require host baidu.com google.com # 允许特定域名的请求 Require ip 1.1.0.0/16 1.2.1.1 # 允许特定ip的请求 </RequireAll>
这篇简明手册详细介绍了如何在Debian系统上搭建和管理LAMP环境,包括系统安装、shell指令、网络配置、软件包管理、Apache与MariaDB配置,以及远程服务和访问控制等关键步骤。
1060

被折叠的 条评论
为什么被折叠?



