操作系统技术,云计算应用

程序windows上可以上传附件,部署到 linux服务器后出现 “上传目录 不可写” 怎么解决?

myos阅读(36)

这样的问题一般都是linux  下文件读写权限引起的,用 shell  命名到上传附件的目录(如 cd /data/www/project/upload/),然后执行 shell 文件权限设置:

例如:chmod 777 -R  /files/ (777 就是读写权限都有)
如:chmod 777 -R goods/(cd 进入到goods文件夹所在的目录)


让后再上传就可以上传了

烂泥:gpg加解密软件学习

myos阅读(35)

本文由ilanniweb提供友情赞助,首发于烂泥行天下

想要获得更多的文章,可以关注我的微信ilanniweb。

为什么要学习gpg呢?因为要在Linux下把一个邮箱的密码加密,不让其他人看到该邮箱真正的密码。

为了不让其他人看到真正的邮箱密码,我们需要对其进行加密。

加密的方式是先把密码先写到一个文件A中,然后使用相关的加密软件对该文件A进行加密生成新的文件B。此时再删除文件A。

其他程序调用邮箱密码时,只调用加密后的文件B,同时对文件B进行解密。

加密我们使用的是gpg这个工具,下面我们来介绍下gpgp。

一、gpg是什么

GPG是GNU Privacy Guard或GnuPG的简称,它是一种用于加密、数字签章及产生非对称匙对的加密软件。

GPG使用非对称加密算法,安全程度比较高。所谓非对称加密算法,就是每一个用户都拥有一对密钥:公钥和私钥。其中,私钥由用户保存,公钥则由用户尽可能地分发给其他人,以便其他人与用户进行通信。

二、安装gpg

gpg的安装非常简单,在此我们以ubuntu 14.04 server为例。如下:

sudo apt-get -y install gnupg gnupg-agent rng-tools

clip_image001

centos6默认已经安装gpg,还需要我们在安装rng-tools就可以正常使用。如下:

yum -y install rng-tools

gpg安装完毕后,我们可以使用gpg –help命令查看gpg的使用方法。如下:

gpg –help

clip_image002

通过上图,我们可以看到gpg有很多选项。在此我们就不一一介绍了,下面文章中会介绍几个比较常用的命令。

三、创建gpg密钥对

在第一章,我们已经介绍了gpg使用非对称加密算法。非对称加密算法需要一对密钥对:一个公钥、一个私钥。

现在我们就来创建这对密钥,使用gpg –gen-key命令。如下:

gpg –gen-key

clip_image003

上面这张图中,我们一定要选择第一项,因为只有第一项用于加密,其他几项都是用于签名。

clip_image004

上面这张图中,我们根据实际情况进行选择密钥的有效期限。在此默认使用永久生效,永不过期。

clip_image005

上面这张图中,是配置密钥的加密长度。默认是2048bit,密钥的长度越长,加密的速度越慢。在此我们使用的是,默认配置。

clip_image006

这个填写该密钥的相关用户信息。

clip_image007

上图中,有两个地方需要记住。第一就是设置的私钥密码,第二就是生成密钥的密钥ID。

私钥密码是解密时需要的。密钥ID是对文件进行加密需要的。

四、加密文件

密钥对创建完毕后,我们现在来使用该密钥对一个文件A进行加密。

4.1 创建文件filea

首先创建文件filea,内容为ilannipassword。如下:

vi filea

ilannipassword

clip_image008

4.2 加密文件filea

文件filea创建完毕后,现在我们来使用gpg加密文件filea。使用gpg –e命令。如下:

gpg -e -r ilanni filea

这条命令的意思是,使用ilanni这个用户的密钥对文件filea进行加密。

clip_image009

通过上图,我们可以很明显的看出gpg已经把文件filea加密成新的文件filea.gpg。

现在我们来查看下加密后的文件filea.gpg,如下:

cat filea.gpg

clip_image010

通过上图,我们可以很明显的看出filea.gpg文件就是一堆乱码。这样就达到了加密的效果。

五、解密文件

文件filea被加密后形成新的文件filea.gpg,如果我们要知道加密前文件filea的内容的话,那么就需要我们来解密filea.gpg文件。

要解密gpg加密后的文件,我们需要使用ilanni这个用户的公钥和私钥。

在此我们是在ilanni这个用户密钥生成的机器A上进行解密的。如果在其他的机器B上来解密filea.gpg文件,那么就需要在B机器上把ilanni这个用户的私钥和公钥都导入进来。否则无法完成filea.gpg文件的解密。

解密filea.gpg,只需要使用gpg –d命令就行了。但是考虑到我们程序不需要人工进行交互,所以我们使用了如下的命令。

gpg –no-use-agent –passphrase=ilanni -q –no-tty -d filea.gpg

clip_image011

通过上图,我们可以很明显的看到filea.gpg文件已经被成功解密。

六、gpg参数介绍

gpg的参数比较多,下面就稍微介绍下,经常使用到的几个参数。

–gen-key:生成一副新的密钥对

–fingerprint:显示指纹

–send-keys:把密钥导出到某个公钥服务器上

–recv-keys:从公钥服务器上导入密钥

-a, –armor:输出经ASCII封装

-r, –recipient USER-ID:为收件者“某某”加密

-e, –encrypt:加密数据

-d, –decrypt:解密数据

-o, –output FILE:指定输出文件

–list-keys:显示所有公钥

–list-secret-key:显示所有私钥

–delete-keys:删除公钥

–delete-secret-keys:删除私钥

–delete-secret-and-public-keys:删除公钥和私钥

–import:导入公钥和私钥

–no-use-agent:不使用用户代理

–passphrase:私钥密码

–no-tty:在执行gpg时终端不显示信息

–quiet:使用安静模式

七、gpg的其他使用方法

下面列举下gpg常用参数的使用案例,如下。

7.1 gpg 查看所有公钥

gpg –list-key

clip_image012

7.2 gpg 查看所有私钥

gpg –list-secret-key

clip_image013

7.3 gpg删除密钥

gpg –delete-secret-keys 01BA7978 先删除私钥

gpg –delete-keys 73391FB6      再删除公钥

clip_image014

也可以使用一条命令全部删除,如下:

gpg –delete-secret-and-public-keys BFA7FF09

clip_image015

7.4 gpg导出公钥

gpg -a -o duanzhanling.asc –export BFA7FF09

clip_image016

7.5 gpg导出私钥

gpg -a -o duanzhanling-sec.asc –export-secret-key 0B7F4055

clip_image017

7.6 gpg导入密钥

导入私钥和公钥都用下面的命令gpg –import

gpg –import duanzhanling.asc   导入公钥

clip_image018

gpg –import duanzhanling-sec.asc   导入私钥

clip_image019

用gcc进行程序的编译

myos阅读(32)

  在Linux系统上,一个档案能不能被执行看的是有没有可执行的那个权限(x),不过,Linux系统上真正认识的可执行文件其实是二进制文件(binary program),例如/usr/bin/passwd 这些档案就是二进制程序代码。

  怎么产生一个可执行的二进制程序呢?首先写程序,用字处理器写完的程序即源代码,这个源代码就是一般的纯文本文档。在完成源代码的编写后,再来就是将程序代码编译成操作系统看得懂的binary program。编译需要编译程序来动作,经过编译程序的编译与连结之后,就可以产生一个可执行的二进制程序。举例来说,Linux上最标准的程序语言是c,我们用c来写源代码,用Linux上标准的c语言编译程序gcc来编译,然后生成可执行的binary program。

  有时候我们会在程序中引用其他外部子程序,或者利用其他软件提供的函数功能,我们就必须在编译的过程中,将函式库加进去,这样,编译程序可以将所有的程序代码与函式库作一个连结(Link)以产生正确的执行档(可执行binary program档案)。

  • make和configure

      

  • Tarball

  Tarball档案,其实就是将软件所有的原始代码档案先以tar打包,然后再以压缩技术来压缩,最常见的是gzip,所以tarball档案的扩展名是*.tar.gz或者*tgz。由于bzip2的压缩效率更佳,因此裆名也会变成*.tar.bz2。

  • 打印hello world

(1)直接以gcc编译原始码

[root@localhost]# vi hello.c
[root@localhost Documents]# cat hello.c
#include <stdio.h>
int main(void){
printf("Hello World\n");
}
[root@localhost]# gcc hello.c
[root@localhost]# ll
total 12
-rwxr-xr-x. 1 root root 4643 Jun 14 00:55 a.out   #编译成功的可执行binary program
-rw-r--r--. 1 root root   67 Jun 14 00:55 hello.c
[root@localhost]# ./a.out #执行文档
Hello World

(2)产生目标文件来进行其他动作,而且执行的档名也不用预设的a.out

[root@localhost]# gcc -c hello.c 
[root@localhost]# ll hello*
-rw-r--r--. 1 root root  67 Jun 14 00:55 hello.c
-rw-r--r--. 1 root root 852 Jun 14 01:00 hello.o  #产生的目标文件
[root@localhost]# gcc -o hello hello.o
[root@localhost]# ll
total 16
-rwxr-xr-x. 1 root root 4643 Jun 14 01:00 hello   #可执行文件
-rw-r--r--. 1 root root   67 Jun 14 00:55 hello.c
-rw-r--r--. 1 root root  852 Jun 14 01:00 hello.o
[root@localhost Documents]# ./hello
Hello World

(3)子程序的编译

[root@localhost]# vi thanks.c
[root@localhost]# cat thanks.c 
#include <stdio.h>
int main(void)
{
    printf("Hello World\n");
    thanks_2();   #子程序
}
[root@localhost]# vi thanks_2.c
[root@localhost]# cat thanks_2.c
#include <stdio.h>
void thanks_2(void)
{
    printf("Thank you!\n");
}
[root@localhost]# ll thanks*
-rw-r--r--. 1 root root   71 Jun 14 01:05 thanks_2.c
-rw-r--r--. 1 root root   83 Jun 14 01:03 thanks.c
[root@localhost]# gcc -c thanks.c thanks_2.c 
[root@localhost]# ll thanks*
-rw-r--r--. 1 root root  71 Jun 14 01:05 thanks_2.c
-rw-r--r--. 1 root root 856 Jun 14 01:05 thanks_2.o
-rw-r--r--. 1 root root  83 Jun 14 01:03 thanks.c
-rw-r--r--. 1 root root 892 Jun 14 01:05 thanks.o
[root@localhost]# gcc -o thanks thanks.o thanks_2.o
[root@localhost]# ll thanks*
-rwxr-xr-x. 1 root root 4740 Jun 14 01:06 thanks
-rw-r--r--. 1 root root   71 Jun 14 01:05 thanks_2.c
-rw-r--r--. 1 root root  856 Jun 14 01:05 thanks_2.o
-rw-r--r--. 1 root root   83 Jun 14 01:03 thanks.c
-rw-r--r--. 1 root root  892 Jun 14 01:05 thanks.o
[root@localhost]# ./thanks 
Hello World
Thank you!

(4)此外

[root@localhost]#gcc -O hello.c -c  #会自动产生hello.o,并且进行优化
[root@localhost]#gcc -o hello hello.c -Wall  #加入-Wall,程序的编译会变的较为严谨,警告信息会显示出来

 

[ubuntu]deb软件源

myos阅读(31)

虽然ubuntu的中国服务器的速度已经非常不错,但是难免,会有网络不畅的情形,所以修改软件源地址是一个基础的知识点。

修改ubuntu的软件源的方式有多种,一直是通过ubuntu软件中心提供的UI,还有一种就是通过编辑/etc/apt/sources.list配置文件。

UI操作

通过软件中心配置软件源比较简单,直接打开ubuntu软件中心,顶部菜单里 编辑(E)->软件源(S)…即可配置软件源地址,安装时选择中文的话,默认应该是ubuntu的中国服务器。这个速度还可以。

编辑配置文件

做好备份

sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup

开始编辑

sudo gedit /etc/apt/sources.list

更新软件列表

sudo apt-get update

根据配置文件内的注释进行修改软件源,如果对配置不理解不建议用此方式修改,此方式适合在没有桌面环境的情况下进行。

源列表

http://wiki.ubuntu.org.cn/%E6%BA%90%E5%88%97%E8%A1%A8

Linux硬盘速度测试的命令

myos阅读(30)

测试下硬盘的读写速度如何,在linux下可以使用hdparm 对硬盘进行测试或查看硬盘的相关信息。

hdparm 命令进行硬盘速度测试
参数:
-a 表示是否关闭磁盘预读取功能。对于大文件读取,这个显然能提高性能。
-A设置硬盘驱动器缓存读取特性。可能就是硬盘缓存开关
-g 显示硬盘的磁轨,磁头,磁区等参数。
-i 显示硬盘的硬件规格信息,这些信息是在开机时由硬盘本身所提供。
-I 直接读取硬盘所提供的硬件规格信息。
-p 设定硬盘的PIO模式。 www.jbxue.com
-Tt 评估硬盘的读取效率和硬盘快取的读取效率。
-u <0或1>; 在硬盘存取时,允许其他中断要求同时执行。
-v 显示硬盘的相关设定。

hdparm -tT /dev/sda3
/dev/sda3:
Timing cached reads: 2408 MB in 2.00 seconds = 1203.96 MB/sec
Timing buffered disk reads: 352 MB in 3.01 seconds = 116.83 MB/sec

Linux常用命令大全

myos阅读(43)

系统信息 
arch
显示机器的处理器架构(1) 
uname
-m 显示机器的处理器架构(2) 
uname
-r 显示正在使用的内核版本 
dmidecode
-q 显示硬件系统部件 – (SMBIOS / DMI) 
hdparm
-i /dev/hda 罗列一个磁盘的架构特性 
hdparm
-tT /dev/sda 在磁盘上执行测试性读取操作 
cat
/proc/cpuinfo 显示CPU info的信息 
cat
/proc/interrupts 显示中断 
cat
/proc/meminfo 校验内存使用 
cat
/proc/swaps 显示哪些swap被使用 
cat
/proc/version 显示内核的版本 
cat
/proc/net/dev 显示网络适配器及统计 
cat
/proc/mounts 显示已加载的文件系统 
lspci
-tv 罗列 PCI 设备 
lsusb
-tv 显示 USB 设备 
date
显示系统日期 
cal
2007 显示2007年的日历表 
date
041217002007.00 设置日期和时间 – 月日时分年.秒 
clock
-w 将时间修改保存到 BIOS 

关机
(系统的关机、重启以及登出 ) 
shutdown
-h now 关闭系统(1) 
init
0 关闭系统(2) 
telinit
0 关闭系统(3) 
shutdown
-h hours:minutes & 按预定时间关闭系统 
shutdown
-c 取消按预定时间关闭系统 
shutdown
-r now 重启(1) 
reboot
重启(2) 
logout
注销 

文件和目录 
cd
/home 进入 ‘/ home’ 目录’ 
cd
.. 返回上一级目录 
cd
../.. 返回上两级目录 
cd
进入个人的主目录 
cd
~user1 进入个人的主目录 
cd
– 返回上次所在的目录 
pwd
显示工作路径 
ls
查看目录中的文件 
ls
-F 查看目录中的文件 
ls
-l 显示文件和目录的详细资料 
ls
-a 显示隐藏文件 
ls
*[0-9]* 显示包含数字的文件名和目录名 
tree
显示文件和目录由根目录开始的树形结构(1) 
lstree
显示文件和目录由根目录开始的树形结构(2) 
mkdir
dir1 创建一个叫做 ‘dir1′ 的目录’ 
mkdir
dir1 dir2 同时创建两个目录 
mkdir
-p /tmp/dir1/dir2 创建一个目录树 
rm
-f file1 删除一个叫做 ‘file1′ 的文件’ 
rmdir
dir1 删除一个叫做 ‘dir1′ 的目录’ 
rm
-rf dir1 删除一个叫做 ‘dir1’ 的目录并同时删除其内容 
rm
-rf dir1 dir2 同时删除两个目录及它们的内容 
mv
dir1 new_dir 重命名/移动 一个目录 
cp
file1 file2 复制一个文件 
cp
dir0/g’ example.txt 用单个零替换多个零 
cat
-n file1 标示文件的行数 
cat
example.txt | awk ‘NR%2==1’ 删除example.txt文件中的所有偶数行 
echo
a b c | awk ‘{print $1}’ 查看一行第一栏 
echo
a b c | awk ‘{print $1,$3}’ 查看一行的第一和第三栏 
paste
file1 file2 合并两个文件或两栏的内容 
paste
-d ‘+’ file1 file2 合并两个文件或两栏的内容,中间用”+”区分 
sort
file1 file2 排序两个文件的内容 
sort
file1 file2 | uniq 取出两个文件的并集(重复的行只保留一份) 
sort
file1 file2 | uniq -u 删除交集,留下其他的行 
sort
file1 file2 | uniq -d 取出两个文件的交集(只留下同时存在于两个文件中的文件) 
comm
-1 file1 file2 比较两个文件的内容只删除 ‘file1’ 所包含的内容 
comm
-2 file1 file2 比较两个文件的内容只删除 ‘file2’ 所包含的内容 
comm
-3 file1 file2 比较两个文件的内容只删除两个文件共有的部分 

返回顶部索引
^

字符设置和文件格式转换 
dos2unix
filedos.txt fileunix.txt 将一个文本文件的格式从MSDOS转换成UNIX 
unix2dos
fileunix.txt filedos.txt 将一个文本文件的格式从UNIX转换成MSDOS 
recode
..HTML < page.txt > page.html 将一个文本文件转换成html 
recode
-l | more 显示所有允许的转换格式 

返回顶部索引
^

文件系统分析 
badblocks
-v /dev/hda1 检查磁盘hda1上的坏磁块 
fsck
/dev/hda1 修复/检查hda1磁盘上linux文件系统的完整性 
fsck.ext2
/dev/hda1 修复/检查hda1磁盘上ext2文件系统的完整性 
e2fsck
/dev/hda1 修复/检查hda1磁盘上ext2文件系统的完整性 
e2fsck
-j /dev/hda1 修复/检查hda1磁盘上ext3文件系统的完整性 
fsck.ext3
/dev/hda1 修复/检查hda1磁盘上ext3文件系统的完整性 
fsck.vfat
/dev/hda1 修复/检查hda1磁盘上fat文件系统的完整性 
fsck.msdos
/dev/hda1 修复/检查hda1磁盘上dos文件系统的完整性 
dosfsck
/dev/hda1 修复/检查hda1磁盘上dos文件系统的完整性 

返回顶部索引
^

初始化一个文件系统 
mkfs
/dev/hda1 在hda1分区创建一个文件系统 
mke2fs
/dev/hda1 在hda1分区创建一个linux ext2的文件系统 
mke2fs
-j /dev/hda1 在hda1分区创建一个linux ext3(日志型)的文件系统 
mkfs
-t vfat 32 -F /dev/hda1 创建一个 FAT32 文件系统 
fdformat
-n /dev/fd0 格式化一个软盘 
mkswap
/dev/hda3 创建一个swap文件系统 

返回顶部索引
^

SWAP文件系统 
mkswap
/dev/hda3 创建一个swap文件系统 
swapon
/dev/hda3 启用一个新的swap文件系统 
swapon
/dev/hda2 /dev/hdb3 启用两个swap分区 

返回顶部索引
^

备份 
dump
-0aj -f /tmp/home0.bak /home 制作一个 ‘/home’ 目录的完整备份 
dump
-1aj -f /tmp/home0.bak /home 制作一个 ‘/home’ 目录的交互式备份 
restore
-if /tmp/home0.bak 还原一个交互式备份 
rsync
-rogpav –delete /home /tmp 同步两边的目录 
rsync
-rogpav -e ssh –delete /home ip_address:/tmp 通过SSH通道rsync 
rsync
-az -e ssh –delete ip_addr:/home/public /home/local
通过ssh和压缩将一个远程目录同步到本地目录 
rsync
-az -e ssh –delete /home/local ip_addr:/home/public
通过ssh和压缩将本地目录同步到远程目录 
dd
bs=1M if=/dev/hda | gzip | ssh user@ip_addr ‘dd of=hda.gz’
通过ssh在远程主机上执行一次备份本地磁盘的操作 
dd
if=/dev/sda of=/tmp/file1 备份磁盘内容到一个文件 
tar
-Puf backup.tar /home/user 执行一次对 ‘/home/user’ 目录的交互式备份操作 
(
cd /tmp/local/ && tar c . ) | ssh -C user@ip_addr ‘cd /home/share/
&& tar x -p’ 通过ssh在远程目录中复制一个目录内容 
(
tar c /home ) | ssh -C user@ip_addr ‘cd /home/backup-home && tar x -p’
通过ssh在远程目录中复制一个本地目录 
tar
cf – . | (cd /tmp/backup ; tar xf – ) 本地将一个目录复制到另一个地方,保留原有权限及链接 
find
/home/user1 -name ‘*.txt’ | xargs cp -av –target-directory=/home/backup/
–parents 从一个目录查找并复制所有以 ‘.txt’ 结尾的文件到另一个目录 
find
/var/log -name ‘*.log’ | tar cv –files-from=- | bzip2 > log.tar.bz2 查找所有以
‘.log’ 结尾的文件并做成一个bzip包 
dd
if=/dev/hda of=/dev/fd0 bs=512 count=1 做一个将 MBR (Master Boot
Record)内容复制到软盘的动作 
dd
if=/dev/fd0 of=/dev/hda bs=512 count=1 从已经保存到软盘的备份中恢复MBR内容 

返回顶部索引
^

光盘 
cdrecord
-v gracetime=2 dev=/dev/cdrom -eject blank=fast -force 清空一个可复写的光盘内容 
mkisofs
/dev/cdrom > cd.iso 在磁盘上创建一个光盘的iso镜像文件 
mkisofs
/dev/cdrom | gzip > cd_iso.gz 在磁盘上创建一个压缩了的光盘iso镜像文件 
mkisofs
-J -allow-leading-dots -R -V “Label CD” -iso-level 4 -o ./cd.iso data_cd
创建一个目录的iso镜像文件 
cdrecord
-v dev=/dev/cdrom cd.iso 刻录一个ISO镜像文件 
gzip
-dc cd_iso.gz | cdrecord dev=/dev/cdrom – 刻录一个压缩了的ISO镜像文件 
mount
-o loop cd.iso /mnt/iso 挂载一个ISO镜像文件 
cd-paranoia
-B 从一个CD光盘转录音轨到 wav 文件中 
cd-paranoia
— “-3” 从一个CD光盘转录音轨到 wav 文件中(参数-3) 
cdrecord
–scanbus 扫描总线以识别scsi通道 
dd
if=/dev/hdc | md5sum 校验一个设备的md5sum编码,例如一张 CD 

返回顶部索引
^

网络
– (以太网和WIFI无线) 
ifconfig
eth0 显示一个以太网卡的配置 
ifup
eth0 启用一个 ‘eth0’ 网络设备 
ifdown
eth0 禁用一个 ‘eth0’ 网络设备 
ifconfig
eth0 192.168.1.1 netmask 255.255.255.0 控制IP地址 
ifconfig
eth0 promisc 设置 ‘eth0’ 成混杂模式以嗅探数据包 (sniffing) 
dhclient
eth0 以dhcp模式启用 ‘eth0’ 
route
-n show routing table 
route
add -net 0/0 gw IP_Gateway configura default gateway 
route
add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1 configure static route
to reach network ‘192.168.0.0/16’ 
route
del 0/0 gw IP_gateway remove static route 
echo
“1” > /proc/sys/net/ipv4/ip_forward activate ip routing 
hostname
show hostname of system 
host
www.example.com lookup hostname to resolve name to ip address and
viceversa(1) 
nslookup
www.example.com lookup hostname to resolve name to ip address and
viceversa(2) 
ip
link show show link status of all interfaces 
mii-tool
eth0 show link status of ‘eth0’ 
ethtool
eth0 show statistics of network card ‘eth0’ 
netstat
-tup show all active network connections and their PID 
netstat
-tupl show all network services listening on the system and their PID 
tcpdump
tcp port 80 show all HTTP traffic 
iwlist
scan show wireless networks 
iwconfig
eth1 show configuration of a wireless network card 
hostname
show hostname 
host
www.example.com lookup hostname to resolve name to ip address and
viceversa 
nslookup
www.example.com lookup hostname to resolve name to ip address and
viceversa 
whois
www.example.com lookup on Whois database 

GO
TOP INDEX ^ 
Microsoft
Windows networks (SAMBA) 
nbtscan
ip_addr netbios name resolution 
nmblookup
-A ip_addr netbios name resolution 
smbclient
-L ip_addr/hostname show remote shares of a windows host 
smbget
-Rr smb://ip_addr/share like wget can download files from a host windows via
smb 
mount
-t smbfs -o username=user,password=pass //WinClient/share /mnt/share mount a
windows network share

Linux基本命令之逻辑测试一

myos阅读(38)

1.判断一个命令的结果使用test,其返回0,或一个整数。返回0表示true,返回整数表示错误码

2.获取上一个命令的返回结果使用$ 

3.例如

我的服务器上面存在/home/www这样一个文件夹,所以ls /home/www这个命令的返回结果为0;

即echo $ 的返回值为0

我的服务器上面不存在/home/kkk这样一个文件夹,所以ls /home/kkk这个命令的返回结果为这个命令执行后的错误码;

即echo $ 的返回结果为2。这个2表示文件或文件夹不存在。

4.常用的文件测试符

-e表示此文件名是否存在

-f表示此文件名是否是文件

-d表示此文件名是否是文件夹

-r表示此文件名是否可读

-w表示此文件是否可写

-x表示此文件是否可执行

-S表示此文件是否问socket

4.1在我的服务器上/home/www为一个文件夹

所以test -e /home/www的结果为0,即true,此文件名存在

所以test -f /home/www 的结果不为0,即false,此文件名不为文件

所以test -d /home/www的结果为0,即为true,此文件名为文件夹

4.2在我的服务器上/home/kkk这个文件名不存在

所以test -e /home/kkk的结果不为0,即false,此文件名不存在

所以test -d /home/kkk的结果不为0,即false,此文件名不问文件夹。

shell两数之间的算术运算

myos阅读(47)

#!/bin/bash
read -p "请输入第一个数:" a
read -p "请输入第二个数:" b
echo "$a+$b=$[$a+$b]"
echo "$a-$b=$[$a-$b]"
echo "$a×$b=$[$a*$b]"
echo "$a/$b=$[$a/$b]"
echo "$a%$b=$[$a%$b]"

 

Linux 小知识翻译 – 「代理服务器」

myos阅读(41)

这回聊聊「代理服务器」。

 

在公司里,不通过代理服务器无法连接互联网的,由于代理服务器的原因,有些服务的使用是受到限制的。

有人可能会觉得为什么会存在这种东西?(这里指代理服务器)

 

Proxy本来的意思是「代理服务器」。代理服务器就是客户端和服务器中间的一层,对服务器来说,它就是客户端,对客户端来说,它就是服务器。

最好理解的就是HTTP代理,「当客户端有请求的时候,HTTP代理获得这个请求,然后代替客户端将这个请求发给服务器,然后将服务器返回的结果返回给客户端」。

 

那么为什么需要中间这层代理呢?

原因之一,代理服务器可以将Web服务器返回的结果保存起来,下次如果有同样的请求的话,代理服务器可以直接将结果返回给客户端,提高访问速度。代理服务器相当于可以高速访问数据的「缓存」。

但是,随着互联网的高速化,代理服务器作为「缓存」的意义也越来越小了。

 

现在代理服务器最大的意义在于提高安全性。和外部的通信如果都是通过代理的话,那么只要逐一检查代理服务器上是否有异常的通信,就可以确保内部网络的安全了。

当然,也可以实现访问日志的记录了。

 

除此之外,公司还可以使用代理来实现过滤功能,也就是在上班时间中,限制公司内网络访问与工作无关的网页。

 

为了合理的使用网络,代理是不可缺少的东西吧。

配置pxe 自动化安装centos6.7

myos阅读(35)

dhcp服务器是pxe自动化安装的必要条件,因此先搞定dhcp服务器,yum -y install dhcp,  rpm -ql dhcp查看安装了哪些包,less /etc/dhcp/dhcpd.conf  打开dhcp的主配置文件,如下图:

 

没有任何配置,但提示了去哪找主配置文件,cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf  覆盖

主配置文件,vim /etc/dhcp/dhcpd.conf 再次打开,default-lease-time 600; (默认租约时长)这个参数为600秒感觉短了一点,

改为3600。为了避免其他参数的干扰,把鼠标移动到29行,然后执行:.,$s@^[^#]@#&@命令(把当前行到最后一行以非#开头的

非空白行在行首加上#),接下来在subnet中定义要分配的网段,定义如下图所示:

 

保存退出! service dhcpd start 启动服务  ss -unl  查看67号服务器端口是否监听。

把网卡配置为172.16.0.199/16 的地址,作为客户端的默认网关。

启动另外一台客户端,使用dhclient -d命令 查看如何获取地址如图:

这样一台dhcp服务器就启动起来了,给客户端分配了172.16.100.29地址。

但有时我们需要固定分配一地址给某台客户端,vim /etc/dhcp/dhcpd.conf  如图:

添加一段配置,只需把该客户端的物理网卡地址写上就可以。

看下面这图:

多添加了filename,和next-server两个参数,filename表示告诉客户端获取了地址之后,去加载pxelinux.0文件,去哪加载,next-

server中指定的地址,此处为172.16.100.13。pxelinux.0是基于网卡引导时要加载的initial boot file 的文件名。而filename处指

定的文件必须放在tftp-server上。

 

第二个必要条件,另外启动一台虚拟机,搞定tftp-server,yum -y install tftp-server,  yum -y install syslinux。

syslinux 是一堆引导加载器,pxe 网络引导需要用到它。在/usr/share/syslinux/目录下就有pxelinux.0文件。

tftp-server是由xinetd这个超级守护进程管理的。因此vim /etc/xinetd.d/tftp  把disable=yes 改为 no, service xinetd restart。

ss -unl  查看是否69号端口已监听。

tftp服务器默认文件存储路径为/var/lib/tftpboot目录下。 cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

放入光盘挂载光盘,mkdir /media/cdrom  mount -r /dev/cdrom /media/cdrom 还得创建一个yum仓库放置光盘里面的文件,

我把它放在httpd上。安装httpd服务器,yum -y installl httpd,   mkdir /var/www/html/centos6 创建目录硬链接  mount —

bind /media/cdrom /var/www/html/centos6    ls /var/www/html/centos6 如图:

制作一个kickstart文件来定制如何安装系统,yum -y install system-config-kickstart,  system-config-kickstart 如图:

 

 

 

 

 

 

为了方便下面几项无需去配置。 可以使用ksvalidator命令检查是否有语法错误 ksvalidator centos6.cfg。 cp /root/centos6.cfg /var/www/html/ 

service httpd start 

接下来复制几个必要的文件:cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img}  /var/lib/tftpboot/

cp /media/cdrom/isolinux/{boot.msg,splash.jpg,vesamenu.c32} /var/lib/tftpboot/

mkdir /var/lib/tftpboot/pxelinux.cfg  cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

ls /var/lib/tftpboot 如图:

 

vim /var/lib/tftpboot/pxelinux.cfg/default

 

加上  ks=http://172.16.100.10/centos6.cfg

启动一台虚拟机从网卡引导:

 

把centos6.cfg文件中的#Use graphic install 下的graphic 两行改为 #Use text install text,引导就不需要你点next选项: 

全搞定!!!

 

补充:initrd.img是一个小的映象,包含一个最小的linux系统

vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文件,“vm”代表 “Virtual Memory”。Linux 支持虚拟内存,能够使用硬盘空间

作为虚拟内存,因此得名“vm”

系统内核vmlinuz被加载到内存后开始提供底层支持,在内核的支持下各种模块,服务等被加载运行。这样当然是大家最容易接受的方

式,曾经的linux就是这样的运行的。假设你的硬盘是scsi 接口而你的内核又不支持这种接口时,你的内核就没有办法访问硬盘,当然

也没法加载硬盘上的文件系统,怎么办?把内核加入scsi驱动源码然后重新编译出一个新的内核文件替换原来vmlinuz

initrd.img文件就是个ram disk的映像文件,内核加载这个ram disk作为伪根文件系统并开始执行其中的”某个文件”(2.6内核是 init

文件)来加载各种模块,服务等(这个ram disk包含各种驱动,比如包含真正根文件系统所在磁盘的驱动)。经过一些配置和运行后,

就可以去物理磁盘加载真正的root分区了,然后又是一些配置等,最后启动成功。也就是你只需要定制适合自己的 initrd.img 文件就

可以了。这要比重编内核简单多了

大前端WP主题 更专业 更方便

联系我们联系我们