摘要:服务器搭建还是需要一些知识的,这节就聊点基础的。编译安装中安装软件的方法主要分为使用包管理器安装,和下载源代码自行编译安装,前者相对简单,但是有可能有些最新的软件包未必会有,比如,这时候就需要我们下载软件源码编译成二进制文件才能使用。
服务器搭建还是需要一些Linux知识的,这节就聊点基础的。
文件权限操作 查看权限Linux中每个文件对每个用户来说都有对应的权限,在任一路径中输入ll就可以查看这些信息:
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
关于权限方面我们主要关注第1、3、4列
我们先来看第一列,第一列表示各用户对该文件/目录的操作权限,我把它断成四个部分,d|rwx|r-x|r-x分别表示类型|文件所有者权限|文件所属用户组权限|其他人的权限。类型我们经常用到的有d-目录,--文件,l-连接文件,r(4)|w(2)|x(1)分别对应读|写|可执行(进入目录)。
第三列和第四列分别代表文件所有者和文件所属用户组。
改变文件权限需要用到chmod命令,上面我在rwx中标注了4、2、1,代表的就是它们的对应值,需要哪些权限把它们相加就是了,来个示例:
root@ip-*** ~ # ll total 4.0K -rw-r--r-- 1 root root 25 Jun 8 02:33 dev.js
计算一下得到文件dev.js对各用户的权限值是644,下面使用chmod命令改变一下:
root@ip-*** ~ # chmod 761 dev.js root@ip-*** ~ # ll total 4.0K -rwxrw---x 1 root root 25 Jun 8 02:33 dev.js
这里分别赋予文件所有者|文件所属用户组|其他用户的权限是可读可写可执行|可读可写|可执行
另外,除了更改文件权限之外,还可以更改文件所有者和所在用户组,分别用到的命令是chown、chgrp,具体使用方式可以使用man命令查看。
磁盘一般在我们购买服务器的时候我们都会选择安装好一个Linux系统,分区啥的都已经配置好了,这方面对入门同学来讲并不需要掌握太多,主要注重查看。
查看磁盘使用df命令,加上参数-h使用以人类易读的方式展示。
Linux中有很多软件是下载一个压缩包让用户自己解压安装的,这就需要我们掌握必要的压缩技能。使用比较广泛的有gzip、bzip2、tar。
gzip、zcatgzip应该说是目前Linux系统中使用最广的压缩命令了。它可以解开*.z、*.zip、*.gz等格式的压缩文件,下面来看它的使用方式:
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相似,不再赘述。
tar上面我们讲到了压缩命令,但是这里的压缩都是单文件的,要是我想把多个文件压缩在同一个压缩包中光用上面的命令是做不到的,有的同学会说我们可以压缩一个文件夹啊,想法很好,但是不好意思,你这么做的话会类似这样的提示:* 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环境中执行的程序,它遵从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之类的,这里有一篇很好的文章供参考点我查看
oh-my-zshzsh也是一个非常强大的shell环境,可以用它来代替Linux系统原有的bash,这是一组zsh的配置,它可以让zsh更加好用,感兴趣的可以看我的另一篇文章oh-my-zsh小记
htop这是一个运行在终端的用于查看系统资源使用情况和管理进程的图形化工具,使用yum或者apt-get等安装即可,完成后直接输入htop就可以使用了,比原生的top更强大。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/9358.html
摘要:自行建站服务器购买网站搭建网站维护全程自主,弹性灵活。网站部署常见网站类型有以下几种个人博客常用于搭建个人博客网站,尤其适用于首次使用阿里云进行建站的新用户。若您需要在阿里云服务器上部署站点环境安装应用程序,可点此查看网站基础环境搭建服务。相信很多新用户会有这样的疑惑,我要做个网站,到底要使用什么产品,如何能快速完成网站建站呢?搭建网站有两种选择,一种是直接购买建站模板,另一种则是自行建站。...
摘要:自行建站服务器购买网站搭建网站维护全程自主,弹性灵活。网站部署常见网站类型有以下几种个人博客常用于搭建个人博客网站,尤其适用于首次使用阿里云进行建站的新用户。若您需要在阿里云服务器上部署站点环境安装应用程序,可点此查看网站基础环境搭建服务。前言相信很多新用户会有这样的疑惑,我要做个网站,到底要使用什么产品,如何能快速完成网站建站呢?搭建网站有两种选择,一种是直接购买建站模板,另一种则是自行建...
摘要:序言做为的爱好者表示对没有完整易用的命令行工具的平台无爱但是在长期使用中深感它的图形界面实在太糟糕了通常有三种方式来获得的体验一是平台它实现了将软件的底层调用转换为的二是安装双系统但图形界面的容错性很差经常会显示软件崩溃三是使用虚拟机在或上 showImg(https://segmentfault.com/img/bVxPyo); live with scope 序言 做为Linux的...
摘要:在容器力所不能及的地方,虚拟机可以大显身手。可以避免产生一直是固定基础设置的狂热爱好者。 Docker 这个工具已经出现很长一段时间了,但是可能还有很多人对 Docker 的概念不太清楚,因此这次翻译 8 个你可能不知道的 Docker 知识 这篇文章,和大家介绍一下生产环境中的 Docker 用例。 自从上世纪 90 年代硬件虚拟化被主流的技术广泛普及之后,对数据中心而言,...
摘要:在容器力所不能及的地方,虚拟机可以大显身手。可以避免产生一直是固定基础设置的狂热爱好者。 Docker 这个工具已经出现很长一段时间了,但是可能还有很多人对 Docker 的概念不太清楚,因此这次翻译 8 个你可能不知道的 Docker 知识 这篇文章,和大家介绍一下生产环境中的 Docker 用例。 自从上世纪 90 年代硬件虚拟化被主流的技术广泛普及之后,对数据中心而言,...
摘要:在容器力所不能及的地方,虚拟机可以大显身手。可以避免产生一直是固定基础设置的狂热爱好者。 Docker 这个工具已经出现很长一段时间了,但是可能还有很多人对 Docker 的概念不太清楚,因此这次翻译 8 个你可能不知道的 Docker 知识 这篇文章,和大家介绍一下生产环境中的 Docker 用例。 自从上世纪 90 年代硬件虚拟化被主流的技术广泛普及之后,对数据中心而言,...
阅读 2261·2021-11-15 18:14
阅读 1534·2021-10-14 09:42
阅读 3498·2021-10-11 10:58
阅读 3701·2021-10-09 09:44
阅读 2621·2021-10-09 09:41
阅读 2247·2021-09-26 09:55
阅读 2196·2021-09-24 10:38
阅读 1780·2021-09-04 16:48