服务器搭建-Linux基础知识

服务器搭建还是需要一些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

这里分别赋予文件所有者|文件所属用户组|其他用户的权限是可读可写可执行|可读可写|可执行


另外,除了更改文件权限之外,还可以更改文件所有者和所在用户组,分别用到的命令是chownchgrp,具体使用方式可以使用man命令查看。

磁盘

一般在我们购买服务器的时候我们都会选择安装好一个Linux系统,分区啥的都已经配置好了,这方面对入门同学来讲并不需要掌握太多,主要注重查看。
查看磁盘使用df命令,加上参数-h使用以人类易读的方式展示。

压缩与打包

Linux中有很多软件是下载一个压缩包让用户自己解压安装的,这就需要我们掌握必要的压缩技能。使用比较广泛的有gzipbzip2tar

gzip、zcat

gzip应该说是目前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、bzcat

bzip2是比gzip更优秀的压缩工具,用法跟gzip非常近似:

-c 将压缩的数据输出
-d 解压缩
-k 保留原文件
-z 压缩参数
-t 校验压缩文件
-1~-9 设置压缩级别,-1最快,压缩效果也最差,-9最慢,压缩效果最好。

其压缩文件以*.bz2格式存在,bzcat的作用与zcat相似,不再赘述。

tar

上面我们讲到了压缩命令,但是这里的压缩都是单文件的,要是我想把多个文件压缩在同一个压缩包中光用上面的命令是做不到的,有的同学会说我们可以压缩一个文件夹啊,想法很好,但是不好意思,你这么做的话会类似这样的提示:* is a directory -- ignored。所以这里我们要用到另一个工具tar,把那些文件打包成一个文件合集再使用压缩工具进行压缩。
值得一提的是,tar还可以同时在参数中直接使用gzip/bzip2tar的命令非常多,介绍几个常用的:

-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  testroot@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
./.bashrcroot@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 commitif [ "$commit" == "" ]; then    //if判断语法commit="default commit"    //条件符合执行的操作fi    //if判断语句结束git add .git commit -m "$commit"    //引用变量git push origin devexit 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_noif [ "$branch_no" == "1" ] || [ "$branch_no" == "2" ] || [ "$branch_no" == "3" ]; then    //if条件判断,|| 表示或关系git checkout mastergit merge "${branch[$branch_no]}"    //${branch[1]}为数组的引值方法git push origin mastergit checkout -else    //另外还有 elif ,跟js中的 else if 类似,可以继续添加判断条件echo "sorry, this is an undefined branch!"fiexit 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命令,将编译好的内容依据Makefileinstall选项安装到指定位置完成安装。
这里讲讲为什么要根据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-zsh

zsh也是一个非常强大的shell环境,可以用它来代替Linux系统原有的bash,这是一组zsh的配置,它可以让zsh更加好用,感兴趣的可以看我的另一篇文章oh-my-zsh小记

htop

这是一个运行在终端的用于查看系统资源使用情况和管理进程的图形化工具,使用yum或者apt-get等安装即可,完成后直接输入htop就可以使用了,比原生的top更强大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

seo从入门到精通_从入门到精通,新人必看的3本书SEO书籍

SEO入门书本引荐:从入门到通晓,新人必看的3本书在这个网上学习泛滥的年代,很多人都习气在网络上找教程学习,无论上视频教程,学习论坛,或是网上课堂等等。但也有些人仍是更习气看书学习的,很多人…

linux firefox 脚本,linux下调整firefox的有用设置(高分辨率下需要)

注:自己一般比较喜欢opensuse,所以以下所说皆是在opensuse下的做法,在其他发行版下应该也差不多firefox69 默认禁用了userchrome.css,需要把about:config 中的选项toolkit.legacyUserProfileCustomizations.stylesheets设置为true界面字体大小…

读懂python代码_Python面试|一文让你读懂if __name__==’__main__’的含义

程序入口对于很多编程语言来说,程序都必须要有一个入口,比如 C,C,以及完全面向对象的编程语言 Java,C# 等。如果你接触过这些语言,对于程序入口这个概念应该很好理解,C 和 C 都需要有一个 main …

C语言程序设计第三节课作业

1 指针是一个存储计算机内存地址的变量。从指针指向的内存读取数据称作指针的取值。指针可以指向某些具体类型的变量地址,例如int、long和double。指针也可以是void类型、NULL指针和未初始化指针。根据出现的位置不同,操作符 * 既可以用来声明一个指针变…

linux netcat测试udp端口,使用nc(netcat)测试udp协议与端口连通性

[v1.10]connect to somewhere: netcat [-options] hostname port[s] [ports] …listen for inbound: netcat -l -p port [-options] [hostname] [port]options:-g gateway source-routing hop point[s], up to 8-G num source-routing pointer: 4, 8, 12, …-h this cruft-i se…

Hession矩阵与牛顿迭代法

1、求解方程。 并不是所有的方程都有求根公式,或者求根公式很复杂,导致求解困难。利用牛顿法,可以迭代求解。 原理是利用泰勒公式,在x0处展开,且展开到一阶,即f(x) f(x0)(x-x0)f(x0) 求解方程f…

抽象工厂模式_设计模式——抽象工厂模式

阅读目录使用频率:★★★★★一、什么是抽象工厂模式二、补充说明三、角色四、例子使用频率:★★★★★一、什么是抽象工厂模式就是对一组具有相同主题的工厂进行封装(维基百科解释的很到位);例如:生产一台PC机,使用工…

Linux启动和退出系统的方法,实验二 Linux的启动与关闭

实验二 Linux的启动与关闭一、实验目的(1)掌握linux操作系统正确的启动与关闭方法;(2)理解系统运行级的概念,掌握查看和设置的方法;(3)理解系统运行级服务的概念,掌握查看、开启和关闭的方法;(4)理解LILO和GRUB的原理&…

linux需要什么基础,学linux需要什么基础?

近几年来,随着计算机网络的发展,越来越多的人学习 linux。对于想要从事运维工作或者从事智能开发方面的同学来说,学习 linux 是必要的。linux 的学习并不简单,那么这篇文章 w3cschool 小编来告诉你,学 linux 需要什么基…

python arima模型_Python时间序列处理之ARIMA模型的使用讲解

ARIMA模型ARIMA模型的全称是自回归移动平均模型,是用来预测时间序列的一种常用的统计模型,一般记作ARIMA(p,d,q)。ARIMA的适应情况ARIMA模型相对来说比较简单易用。在应用ARIMA模型时,要保证以下几点:时间序列数据是相对稳定的&am…

windows(win7,win8,xp)hosts文件找不到原因分析及解决方法

2019独角兽企业重金招聘Python工程师标准>>> 一般情况hosts文件是保存在C:\windows\System32\Drivers\Etc 文件夹上,由于安装是win7系统,在这个路径上就能找到这个hosts文件。如果你在该路径下没有找到这个文件的话,一般是以下几种…

linux虚拟化cpu的绑定,为虚拟机vCPU绑定物理CPU

使用taskset命令将vCPU线程绑定到指定的物理CPU。例如,某虚拟机的qemu进程及两个vCPU线程如下: ​[rootkelvin ~]# ps -eLo ruser,pid,ppid,lwp,psr,args | grep qemu | grep -v greproot 4706 3629 4706 1 qemu-system-x86_64 -m 2G -smp 2 /var/lib/li…

sql 显示百分比_轻松搞定数据分析之SQL——简单查询

每天早起或者睡前听一首温柔而美好的音乐,是一件很幸福的事情,无论你是否懂音乐,它都能带你发现生活中的隐藏的那些美好,今天我们先来一起欣赏Mindy Gledhill的单曲《California》California (网易云音乐),每次我听到这首歌&#…

SpringMVC 中设置日期字符串转换格式

2019独角兽企业重金招聘Python工程师标准>>> 在使用SpringMVC的项目中经常遇到 controller 参数中接收Date类型的数据,但是页面传过来的参数又是日期字符串,会出现转换异常。 由于项目需要支持两种日期格式所以从写了一个日期转换器。网友可以…

操作系统 非连续分配_操作系统中的连续和非连续内存分配

操作系统 非连续分配In this article, we will learn about the different types of memory management techniques and also the pros and cons of different memory management techniques. 在本文中,我们将学习不同类型的内存管理技术 ,以及不同内存管…

文件名重定向到txt中Linux,Linux上glob用于实现文件名的通配、IO重定向及管道

Linux中所谓的通配是指,显示以指定条件为条件的文件;即通配的含义是指搜寻以已知条件为前提的目标文件。常用文件通配符有:文件通配符含义例子*任意长度的任意字符如a*,搜寻所有以a为首的文件名的文件?任意的单一字符如a&#xff…

分形与数据结构第二篇

一、分形之 迭代实现分形 本次的图形都是在之前的画图工具中实现的。 首先,还是和原来一样建立一个JButton元素组件,然后加上监听方法;再在public void mouseClicked(MouseEvent e) {}方法中实现图形; else if (s.equals("图…

python socket 大文件_python之socket运用之传输大文件

socket建议最大的传输单元是8192个字符,但是如果超过8192就会出现问题,我们可以用下面的方法处理客户端代码import subprocessimport socketip_bind ("127.0.0.1",9000)client socket.socket()client.connect(ip_bind)l1 []while True:opti…

华为linux版笔记本安装win7,华为MateBook X Pro笔记本怎样安装win7系统

华为MateBook X Pro的制造工艺达到了业界顶级的水准,高达91%的屏占比真正达到了近似全面屏的观感,触感顺滑质感强烈的机身让人爱不释手。对于有意选购一台高端轻薄本产品的消费者来说,MateBook X Pro应该是你首选的对象之一。那么这款笔记本怎…

横竖屏切换

单一控制器的横竖屏切换 if ([[UIDevice currentDevice] respondsToSelector:selector(setOrientation:)]) { SEL selector NSSelectorFromString("setOrientation:"); NSInvocation *invocation [NSInvocation invocationWithMethodSignature:[UIDevice instanceM…