shell 是什么

shell 是一个命令行解释器,它为用户提供了一个向linux内核发送请求,以便运行程序的界面系统级程序,用户可以使用shell来启动,挂起,停止甚至是编写一些程序。

shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。shell是解释执行的脚本语言,在shell中可以直接调用linux系统命令

linux 挂载命令

查询与自动挂载

  • mount

#查询系统中已经挂载的设备

  • mount -a

#依据配置文件/etc/fstab的内容,自动挂载

  • mount [-t 文件系统] [-0 特殊选项] 设备文件名 挂载点

选项:

1,-t 文件系统:加入文件系统类型来指定挂载的类型,可以ext3、ext4、iso9660等文件系统

2,-o 特殊选项:可以指定挂载的额外选项

参数 说明
atime|noatime 更新访问时间|不不更新访问时间。访问分区文件时,是否更新文件的访问时间,默认为更新
async|sync 一部|同步,默认为异步
auto|noauto 自动|手动,mount -a 命令执行时,是否会自动安装/etc/fstab文件内容挂载,默认为自动
defaults 定义默认值,相当于rw,suid,dev,exec,auto,nouser,async这七个选项
exec|noexec 执行|不执行。设定是否允许在文件系统中执行可执行文件,默认是exec允许
remount 重新挂载已挂载的文件系统,一般 用于指定修改特殊权限
rw|ro 读写|只读,文件系统挂载时,是否具有读写权限,默认是rw
suid|nosuid 具有|不具有suid权限,设定文件系统是否具有suid和sgid的权限,默认是具有
user|nouser 允许|不允许普通用户挂载,设定文件系统是否允许普通用户挂载,默认是不允许,只有root可以挂载分区
usrquota 写入代表文件系统支持用户磁盘配额,默认不支持
grpquota 写入代表文件系统支持组磁盘配额,默认不支持

挂载光盘

  • mkdir /mnt/cdrom/

#建立挂载点

  • mount -t iso9660 /dev/cdrom /mnt/cdrom

#挂载光盘

  • mount /dev/sr0 /mnt/cdrom

#简洁挂载方式

  • umount 设备文件名或挂载点(用完后必须卸载)

umount /mnt/cdrom

U盘挂载

  • fdisk -l

#查看U盘设备文件名

  • mount -t vfat(指的是fat32) /dev/sdb1 /mnt/usb

#注意:linux默认是不支持NTFS文件系统的

 

linux 文件解压缩

.tar.gz压缩格式

  • 其实.tar.gz格式是先打包为.tar格式,再压缩为.gz格式
  • tar -zcvf 压缩包名.tar.gz 源文件

选项:

-z:压缩为.tar.gz格式

  • tar -zxvf 压缩包名.tar.gz

选项:

-x:解压.tar.gz格式

.tar.bz2 压缩格式

  • tar -jcvf 压缩包名.tar.bz2 源文件

选项:

-z:压缩为.tar.bz2格式

  • tar -jxvf 压缩包名.tar.bz2

选项:

-x:解压.tar.bz2格式

 

linux 文件搜索命令

文件搜索命令locate

1,locate 文件名

在后台数据库中按文件名搜索,搜索速度更快

2,/var/lib/mlocate

locate命令所搜索的后台数据库

3,updatedb

更新数据库

4,/etc/updatedb.con 配置文件

PRUNE_BIND_MOUNTS=”yes”

#开启搜索限制

PRUNEFS=

#搜索时,不搜索的文件系统

PRUNENAMES=

#搜索时,不搜索的文件类型

PRUNEPATHS=

#搜素时,不搜索的路径

命令搜索命令whereis 与 which

whereis 命令

#搜索命令所在的路径及帮助文档所在位置

选项:

-b 只查找可执行文件

-m 只查找帮助文件

which 命令

#查看命令的别名

文件搜索命令find

  • find [搜索范围] [搜索条件](按照扇区搜索,不是按照分区)

#搜索文件

  • find / -name install.log

#避免大范围搜索,会非常耗费系统资源

#find是在系统当中搜索符合条件的文件名。如果需要匹配,使用通配符匹配,通配符是完全匹配(* 匹配任意内容 ?匹配任意一个字符[]匹配任意一个中括号内的字符)

  • find /root -iname install.log

#不区分大小写

  • find /root -user root

#按照所有者搜索

  • find /root -nouser

#查找没有所有者的文件(1,内核产生的文件有可能没有所有者2,外来文件例:window下拷贝的文件用U盘插入)

  • find /var/log/  -mtime +10

#查找10天前修改的文件

-10  10天内修改文件

10    10天当天修改的文件

+10  10天前修改的文件

atime    文件访问时间

ctime    改变文件属性

mtime    修改文件内容

  • find . -size 25k(.代表当前目录)

#查找文件大小是25KB的文件

25    小于等于25KB的文件

25k    等于25KB的文件

+25k 大于25KB的文件

  • find . -inum 262422 (.代表当前目录也可以输入目录)

#查找I节点是262422的文件

  • find /etc -size +20k -a -szie -50k

#查找/etc/目录下。大于20kb并且小于50kb的文件

-a and 逻辑与,两个条件都满足

-o or     逻辑或,两个条件满足一个即可

  • find /etc -size +20 -a -szie -50k -exec ls -lh {} \;

#查找/etc 目录下,大于20kb并且小于50kb的文件,屏显示详细信息

#-exec  命令 {}\;对搜索结果执行操作

字符串搜索命令grep

  • grep [选项] 字符串 文件名

#在文件当中匹配符合条件的字符串

选项:

-i    忽略大小写

-v    排除指定字符串

find命令与grep命令的区别

find命令:在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配

grep命令:在文件当中搜索符合条件的字符串,如果需要匹配,使用正则表达进行匹配,正则表达式是包含匹配

linux链接命令

ln -s [原文件] [目标文件]

命令英文原意:link

功能描述:生成链接文件

选项:-s 创建软连接

硬链接特征

1,拥有相同的I节点和存储block块,可以看作是同一个文件

2,可通过i节点识别

3,不能跨分区

4,不能针对目录使用

软连接特征

1,类似windows快捷方式

2,软连接拥有自己的 I节点和block块,但是数据块只保存文件的文件名和i节点号,并没有实际的文件数据

3,lrwxrwxrwx I软连接

软连接文件权限都为rwxrwxrwx

4,修改任意文件,另一个都改变

5,删除原文件,软链接不能使用

linux 常用目录的作用

/根目录

/bin命令保存目录(普通用户就可以读取的命令)

/boot启动目录,启动相关文件

/dev设备文件保存目录

/etc配置文件保存目录

/home配置文件保存目录

/lib系统库保存目录

/mnt系统挂载目录

/media 挂在目录

/root超级用户的家目录

/tmp临时目录

/sbin命令保存目录(超级用户才能使用的目录)

/proc直接写入内存的

/sys

/usr系统软件资源目录

/usr/bin/系统命令(普通用户)

/usr/sbin/系统命令(超级用户)

/var系统相关文档内容

Linux常用命令

ls [选项] [文件或目录]

选项:

-a    显示所有文件,包括隐藏文件

-l    显示详细信息

-d    查看目录属性

-h    人性化显示文件大小

-i    显示inode

-rw-r–r–

-代表文件类型

d代表类型

l代表软链接文件

rw-(u代表所有者)

r–(g代表所属组)

r–(o代表其他)

r读 w写 x执行

mkdir -p [目录名]

-p    递归创建

命令英文原意:make directories

cd [目录]

命令英文原意:change directory

简化操作

cd ~ 进入当前用户的家目录

cd – 进入上次目录

cd .. 进入上一级目录

cd . 进入当前目录

pwd

命令英文原意:print working directory

显示当前位置

rmdir [目录名]

命令英文原意:remove empty directory 删除空目录

rm -rf [文件或目录]

命令英文原意:remove

选项:

-r 删除目录

-f 强制

cp [选项] [文件或目录] [目标目录]

命令英文原意:copy

选项:

-r 复制目录

-p 连带文件属性复制

-d 若源文件时链接文件,则复制链接属性

-a 相当于 -pdr

mv [原文件或目录] [目标目录]

命令英文原意:move

linux /etc/rc.d/与/etc/rc.d/init.d的关系

在这里先解释一下init.d里面放的都是什么东西。这个目录存放的是一些脚本,一般是linux以rpm包安装时设定的一些服务的启动脚本。系统在安装时装了好多rpm包,这里面就有很多对应的脚本。执行这些脚本可以用来启动,停止,重启这些服务。
前面说到,/etc/rc.d/init.d这个目录下的脚本就类似与windows中的注册表,在系统启动的时候执行。程序运行到这里(init进程读取了运行级别),相信从命名的角度大家也能猜到该运行/etc/rc.d/init.d里面的脚本了,不然它为什么也叫init(.d)呢是吧。没错,是该运行init.d里的脚本了,但是并不是直接运行,而是有选择的因为系统并不需要启动所有的服务。
那么,系统是如何选择哪些需要启动哪些不要呢?这时刚才说的运行级别就起作用了。
在决定了系统启动的run level之后,/etc/rc.d/rc这个脚本先执行。在RH9和FC7的源码中它都是一上来就check_runlevel()(虽然实现的代码不一样,也大同小异),知道了运行级别之后,对于每一个运行级别,在rc.d下都有一个子目录分别是rc0.d,rc1.d ….. rc6.d。每个目录下都是到init.d目录的一部分脚本一些链接。每个级别要执行哪些服务就在相对应的目录下,比如级别5要启动的服务就都放在 rc5.d下,但是放在这个rc5.d下的都是一些链接文件,链接到init.d中相对应的文件,真正干活的init.d里的脚本。

到这里,估计大家可能都比较清楚了,我开始也以为是这样的。可是后来我仔细看过和比较这些链接文件和init.d里真正被执行的脚本的文件名之后,一直有几个问题没弄明白。借着写这个文章的机会,我做了一些功课,总算是大概解开了那些疑惑。
1、这些链接文件前面为什么会带一个Kxx或者Sxx呢?
是这样的,带K的表示停止(Kill)一个服务,S表示开启(Start)的意思
2、K和S后面带的数字呢?干什么用的
这个我开始的时候还以为是排列起来好看或者数数用呢(是不是很幼稚?)。后来发现不是的。它的作用是用来排序,就是决定这些脚本执行的顺序,数值小的先执行,数值大的后执行。很多时候这些执行顺序是很重要的,比如要启动Apache服务,就必须先配置网络接口,不然一个没有IP的机子来启动http服务那岂不是很搞笑。。。
3、无意中我发现同一个服务带S的和带K的链接到init.d之后是同一个脚本。我就纳闷了,为什么会是执行同一个脚本呢?
这个时候真是S和K的妙用了,原来S和K并不止是用来看起来分的清楚而已。S给和K还分别给init.d下面的脚本传递了start和stop的参数。哦,是这样的(焕然大悟的样子,呵呵)!这时我才想起来原来曾经无数用过的/etc/rc.d/init.d/network restart命令。原来传S时相当于执行了/etc/rc.d/init.d/xxx start这条命令,当然K就相当于/etc/rc.d/init.d/xxx stop了。

补充:也可以修改rc.local达到自启动的目的,但是rc.local是最后执行的自启动配置文件。

在CentOS下搭建自己的Git服务器

首先需要装好CentOS系统,作为测试,你可以选择装在虚拟机上,这样比较方便。这步默认你会,就不讲了。
有了CentOS,那么如何搭建Git服务器呢?
1、首先需要安装Git,可以使用yum源在线安装:

[root@localhost Desktop]# yum install -y git

2、创建一个git用户,用来运行git服务

# adduser git  

3、初始化git仓库:这里我们选择/data/git/learngit.git来作为我们的git仓库

[root@localhost git]# git init --bare learngit.git  
Initialized empty Git repository in /data/git/learngit.git/  

执行以上命令,会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:

[root@localhost git]# chown git:git learngit.git  

4、在这里,Git服务器就已经搭得差不多了。下面我们在客户端clone一下远程仓库

Zhu@XXX /E/testgit/8.34
$ git clone git@192.168.8.34:/data/git/learngit.git
Cloning into 'learngit'...
The authenticity of host '192.168.8.34 (192.168.8.34)' can't be established.
RSA key fingerprint is 2b:55:45:e7:4c:29:cc:05:33:78:03:bd:a8:cd:08:9d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.8.34' (RSA) to the list of known hosts.
git@192.168.8.34's password:

这里两点需要注意:第一,当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告:

The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?

这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。

Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了:

Warning: Permanently added 'github.com' (RSA) to the list of known hosts.

这个警告只会出现一次,后面的操作就不会有任何警告了。
如果你实在担心有人冒充GitHub服务器,输入yes前可以对照GitHub的RSA Key的指纹信息是否与SSH连接给出的一致。
第二,这里提示你输入密码才能clone,当然如果你知道密码,可以键入密码来进行clone,但是更为常见的方式,是利用SSH的公钥来完成验证。

5、创建SSH Key
首先在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

$ ssh-keygen -t rsa -C "youremail@example.com"  

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

6、Git服务器打开RSA认证
然后就可以去Git服务器上添加你的公钥用来验证你的信息了。在Git服务器上首先需要将/etc/ssh/sshd_config中将RSA认证打开,即:

   

  重要:

  修改 .ssh 目录的权限为 700

  修改 .ssh/authorized_keys 文件的权限为 600

1
2
3
chmod 700 .ssh
cd .ssh
chmod 600 authorized_keys
1.RSAAuthentication yes     
2.PubkeyAuthentication yes     
3.AuthorizedKeysFile  .ssh/authorized_keys

这里我们可以看到公钥存放在.ssh/authorized_keys文件中。所以我们在/home/git下创建.ssh目录,然后创建authorized_keys文件,并将刚生成的公钥导入进去。

然后再次clone的时候,或者是之后push的时候,就不需要再输入密码了:

Zhu@XXX/E/testgit/8.34
$ git clone git@192.168.8.34:/data/git/learngit.git
Cloning into 'learngit'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.

7、禁用git用户的shell登陆
出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash  

最后一个冒号后改为:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell  

这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。