服务器搭建仍是须要一些Linux知识的,这节就聊点基础的。php
Linux中每一个文件对每一个用户来讲都有对应的权限,在任一路径中输入ll
就能够查看这些信息:git
root@ip-*** /usr/local # ll total 32K drwxr-xr-x 2 root root 4.0K Jan 14 17:00 bin drwxr-xr-x 2 root root 4.0K Jan 14 17:00 etc drwxr-xr-x 2 root root 4.0K Jan 14 17:00 games drwxr-xr-x 2 root root 4.0K Jan 14 17:00 include drwxr-xr-x 4 root root 4.0K Jan 14 17:08 lib lrwxrwxrwx 1 root root 9 Jan 14 17:00 man -> share/man drwxr-xr-x 2 root root 4.0K Jan 14 17:00 sbin drwxr-xr-x 7 root root 4.0K May 27 14:02 share drwxr-xr-x 2 root root 4.0K Jan 14 17:00 src
关于权限方面咱们主要关注第一、三、4列
咱们先来看第一列,第一列表示各用户对该文件/目录的操做权限,我把它断成四个部分,d|rwx|r-x|r-x
分别表示类型|文件全部者权限|文件所属用户组权限|其余人的权限
。类型咱们常常用到的有d-目录
,--文件
,l-链接文件
,r(4)|w(2)|x(1)
分别对应读|写|可执行(进入目录)
。
第三列和第四列分别表明文件全部者和文件所属用户组。sql
改变文件权限须要用到chmod
命令,上面我在rwx
中标注了四、二、1,表明的就是它们的对应值,须要哪些权限把它们相加就是了,来个示例:shell
root@ip-*** ~ # ll total 4.0K -rw-r--r-- 1 root root 25 Jun 8 02:33 dev.js
计算一下获得文件dev.js
对各用户的权限值是644,下面使用chmod
命令改变一下:vim
root@ip-*** ~ # chmod 761 dev.js root@ip-*** ~ # ll total 4.0K -rwxrw---x 1 root root 25 Jun 8 02:33 dev.js
这里分别赋予文件全部者|文件所属用户组|其余用户
的权限是可读可写可执行|可读可写|可执行
segmentfault
另外,除了更改文件权限以外,还能够更改文件全部者和所在用户组,分别用到的命令是chown
、chgrp
,具体使用方式可使用man
命令查看。数组
通常在咱们购买服务器的时候咱们都会选择安装好一个Linux系统,分区啥的都已经配置好了,这方面对入门同窗来说并不须要掌握太多,主要注重查看。
查看磁盘使用df
命令,加上参数-h
使用以人类易读的方式展现。bash
Linux中有不少软件是下载一个压缩包让用户本身解压安装的,这就须要咱们掌握必要的压缩技能。使用比较普遍的有gzip
、bzip2
、tar
。服务器
gzip
应该说是目前Linux系统中使用最广的压缩命令了。它能够解开*.z
、*.zip
、*.gz
等格式的压缩文件,下面来看它的使用方式:ssh
root@ip-*** ~ # gzip -v dev.js dev.js: -8.0% -- replaced with dev.js.gz root@ip-*** ~ # ls dev.js.gz
这里的-v
是为了在压缩结束后查看压缩比,固然还有其余参数:
-c 将压缩的数据输出 -d 解压缩 -t 校验压缩文件 -1~-9 设置压缩级别,-1最快,压缩效果也最差,-9最慢,压缩效果最好,默认-6,通常状况下使用默认的就能够了。
so,当咱们须要解压缩文件的时候只要加上-d
参数就能够了。
咱们知道cat
命令能够用来查看纯文本文件,那zcat
就是用来查看纯文本被压缩后的压缩文件。
另外,须要注意的一点是使用gzip
压缩后源文件就会被自动删除。
bzip2
是比gzip
更优秀的压缩工具,用法跟gzip
很是近似:
-c 将压缩的数据输出 -d 解压缩 -k 保留原文件 -z 压缩参数 -t 校验压缩文件 -1~-9 设置压缩级别,-1最快,压缩效果也最差,-9最慢,压缩效果最好。
其压缩文件以*.bz2
格式存在,bzcat
的做用与zcat
类似,再也不赘述。
上面咱们讲到了压缩命令,可是这里的压缩都是单文件的,要是我想把多个文件压缩在同一个压缩包中光用上面的命令是作不到的,有的同窗会说咱们能够压缩一个文件夹啊,想法很好,可是很差意思,你这么作的话会相似这样的提示:* is a directory -- ignored
。因此这里咱们要用到另外一个工具tar
,把那些文件打包成一个文件合集再使用压缩工具进行压缩。
值得一提的是,tar
还能够同时在参数中直接使用gzip/bzip2
。tar
的命令很是多,介绍几个经常使用的:
-c 新建打包文件 -j/-z 使用bzip2/gzip压缩,打包文件名一般应该是*.tar.bz2/*.tar.gz -t 查看打包文件内容,主要用来查看文件名 -x 解压缩,一般搭配 -C 用于解压到目标目录 -v 查看压缩/解压过程当中,正在被处理的文件 -C 解压到指定目录,与 -x 一块儿使用 -f 后面接被处理的文件名
下面是几个经常使用的组合,通常状况下足以应付大部分使用场景了。
压缩(bzip2):tar -jcv -f target.tar.bz2 待压缩的目录 压缩(gzip):tar -zcv -f target.tar.gz 待压缩的目录 查看包含文件(bzip2):tar -jt -f target.tar.gz/target.tar.bz2 查看包含文件(gzip):tar -zt -f target.tar.gz/target.tar.gz 解压(bzip2):tar -jxv -f target.tar.bz2 -C 解压到某处 解压(gzip):tar -zxv -f target.tar.gz -C 解压到某处
来个实例:
root@ip-*** ~ # ls -a . .config .zcompdump-ip-172-31-17-254-5.0.2 .. .oh-my-zsh .zsh-update .aptitude .profile .zsh_history .bash_history .ssh .zshrc .bashrc .viminfo dev.js .cloud-locale-test.skip .zcompdump test root@ip-*** ~ # tar -jcv -f test.tar.bz2 . ... ./.oh-my-zsh/lib/completion.zsh ./.oh-my-zsh/lib/diagnostics.zsh ./.profile ./.zsh_history ./.cloud-locale-test.skip ./.bashrc root@ip-*** ~ # ls -a . .oh-my-zsh .zsh_history .. .profile .zshrc .aptitude .ssh dev.js .bash_history .viminfo test .bashrc .zcompdump test.tar.bz2 .cloud-locale-test.skip .zcompdump-ip-172-31-17-254-5.0.2 .config .zsh-update
打包压缩成功后,能够看到最后多了一个test.tar.bz2
文件。另外,另外两组组合能够本身尝试一下,另外,解压强烈建议加上-C
命令,以避免覆盖原来的文件。
shell脚本是可以在shell环境中执行的程序,它听从shell语法,有了它,咱们能够为一些须要重复操做的系列连续性命令作一个合集,解放劳动力。
下面我先给个经常使用的git案例:
#!/bin/bash //声明使用的shell环境 action="none" //变量赋值 echo "1: commit to dev and update test" //打印字符串 echo "2: merge branch to master" read -p "please input number to select next step: " -t 30 action //读取用户键盘输入并赋给 action 变量,30秒内无输入则跳过 case $action in //case语句,判断条件为 action 变量 1) read -p "please input commit content: " -t 30 commit if [ "$commit" == "" ]; then //if判断语法 commit="default commit" //条件符合执行的操做 fi //if判断语句结束 git add . git commit -m "$commit" //引用变量 git push origin dev exit 0 //退出shell ;; //知足 action 为1的条件的语句结束 2) echo "1: cyc" echo "2: bingqichen" echo "3: dev" branch[1]="cyc" //数组赋值 branch[2]="bingqichen" branch[3]="dev" read -p "please input number to select the branch: " -t 30 branch_no if [ "$branch_no" == "1" ] || [ "$branch_no" == "2" ] || [ "$branch_no" == "3" ]; then //if条件判断,|| 表示或关系 git checkout master git merge "${branch[$branch_no]}" //${branch[1]}为数组的引值方法 git push origin master git checkout - else //另外还有 elif ,跟js中的 else if 相似,能够继续添加判断条件 echo "sorry, this is an undefined branch!" fi exit 0 ;; *) //action为其余值的操做 echo "sorry, this is an undefined action!" exit 0 ;; esac //case语句结束
这段脚本就是我用来解决git提交和代码合并的问题,你们能够根据本身的使用场景改造。大部分语句仍是很简单的,主要有几个须要注意的点,好比条件判断语句:
[ "$branch_no" == "1" ]
这里面的每一个空格都不能够省略!还有赋值语句不能加空格,慎用单引号等等。
Linux中安装软件的方法主要分为使用包管理器安装,和下载源代码自行编译安装,前者相对简单,可是有可能有些最新的软件包未必会有,好比PHP7,这时候就须要咱们下载软件源码编译成二进制文件才能使用。
先来看看编译过程:
大体过程是这样的,当咱们下载到软件源码后,通常会是一个压缩包,解压以后里面会有一个用于创建Makefile
文件的config/configure
文件,使用config/configure
创建Makefile
后,执行make
命令将源代码根据Makefile
文件的配置进行编译,最后执行make install
命令,将编译好的内容依据Makefile
中install
选项安装到指定位置完成安装。
这里讲讲为何要根据Makefile
进行编译,其实GCC能够直接编译程序文件,可是一个软件不可能只拥有一个程序文件,要是人工一个个去编译每一个文件,会很是劳民伤财!因此借助一个Makefile
咱们就能够搞定了。
下面来演示一个PHP7的编译安装:
root@ip-*** ~ # wget http://cn2.php.net/get/php-7.0.0.tar.gz/from/this/mirror //下载源码 root@ip-*** ~ # ls mirror root@ip-*** ~ # mv mirror php.tar.gz //重命名 root@ip-*** ~ # tar -zxv -f php.tar.gz //解压缩源码包 root@ip-*** ~ # ls php-7.0.0 php.tar.gz root@ip-*** ~ # cd php-7.0.0 //进入源文件目录 root@ip-*** ~/php-7.0.0 # ls //里面会有一些手册,能够用来作安装参考 INSTALL README.md configure ... root@ip-*** ~/php-7.0.0 # ./configure //执行configure创建Makefile checking for grep that handles long lines and -e... /bin/grep checking for egrep... /bin/grep -E ... checking for xml2-config path... configure: error: xml2-config not found. Please check your libxml2 installation.
我在编译到这一步报了一个错误,看起来是因为libxml2
未安装,在我尝试安装后发现已经存在这个软件,在网上搜寻一片后发现还要安装libxml2-dev
,这个我不是很懂。。。再次执行./configure
成功并自动创建了Makefile
文件,继续:
root@ip-*** ~/php-7.0.0 # make //这个步骤视软件大小和硬件性能执行时间会有差别 /bin/bash /root/php-7.0.0/libtool --silent --preserve-dup-deps --mode=compile cc -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -Iext/opcache/ -I/root/php-7.0.0/ext/opcache/ -DPHP_ATOM_INC -I/root/php-7.0.0/include -I/root/php-7.0.0/main -I/root/php-7.0.0 -I/root/php-7.0.0/ext/date/lib -I/usr/include/libxml2 -I/root/php-7.0.0/ext/sqlite3/libsqlite -I/root/php-7.0.0/TSRM -I/root/php-7.0.0/Zend -I/usr/include -g -O2 -fvisibility=hidden -c /root/php-7.0.0/ext/opcache/ZendAccelerator.c -o ext/opcache/ZendAccelerator.lo ... Build complete. Don't forget to run 'make test'.
编译结束时,应该能看到上面的提示,make test
是非必要的,自行选择,另外要注意的一点,若是你是二次编译的话须要先清理以前的编译出来的文件,即在make
以前执行一下make clean
到这里咱们只要再执行一下make install
就能够安装结束了。
这只是最基础的安装,我在这过程当中省略了不少配置项,这样安装出来的软件是很“简陋”的,事实上在执行./configure
操做时,有不少可选项供咱们配置,可是不一样软件能够添加的参数是不同的,怎么看当前的软件能够添加哪些参数呢?在软件源码目录执行./configure --help
就能够了:
root@ip-*** ~/php-7.0.0 # ./configure --help ... Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [/usr/local] ... SAPI modules: --enable-fpm Enable building of the fpm SAPI executable ...
这里只列举了两个,一个是目标安装目录,一个是启用fpm,这些选项能够根据须要自行添加。
其实,不少软件经过添加软件源的方式仍是能够用包管理器安装的,上面说的PHP7就是这样,不要打我???
Linux的包管理器有不少种,Cent OS有yum
,Ubuntu有apt
,还有别的像aptitude
之类的,这里有一篇很好的文章供参考点我查看
zsh
也是一个很是强大的shell
环境,能够用它来代替Linux系统原有的bash
,这是一组zsh
的配置,它可让zsh
更加好用,感兴趣的能够看个人另外一篇文章oh-my-zsh小记
这是一个运行在终端的用于查看系统资源使用状况和管理进程的图形化工具,使用yum
或者apt-get
等安装便可,完成后直接输入htop
就可使用了,比原生的top
更强大。