Linux 学习概述

根据慕课网 Linux Guide for Developers和菜鸟课程笔记,主要是Linux知识的概述,看完主要能对Linux基本操作有个概念。

我们对于Linux到底要掌握多少知识呢?

我觉得你只要弄清楚基本文件操作,权限管理,进程管理,网络管理,linux的环境相关,vim的使用,软件包安装的使用应该就可以满足你日常的开发了。如果你是做后端开发,那么除了在以上我觉得你还要会一些服务,比如iptables,lamp,nginx,我觉得深入学习下web模型会比较好,比如弄清楚nginx 哪里比apache好,了解下什么是代理,有哪些缓存软件,dns,还有数据库,常用的脚本工具,如fabric ,supervisor 等等,如果你是做后端开发应该比我懂,因为这些软件都是围绕web和app来的。有时间就多了解下,部署的时候也能用到的。

1.概述

  • 终端配置
  • 用户权限
  • 重定向
  • 软件安装
  • 搜索
  • 进程
  • 网络操作
  • 脚本

2.终端配置

Linux命令行里面提示符:

这里写图片描述

终端使用手册查看命令行使用方法:

man 命令行
# 例子
man rm

3.文件系统

cd ..          返回上一级目录
cd ~ 或者 cd   返回用户家(根)目录
cd -           返回根目录之后,想返回之前的目录,可以用这个命令
cd ../ ..      返回上上级目录
cd /xx/xx     (例如cd /yangyang/home)以绝对路径方式切换到指定文件夹

pwd            打印当前所在文件位置

Linux挂载分区解析图:

这里写图片描述

Linux绝对路径和相对路径:

绝对路径 start with “/”
相对路径 start with “.”or”..”

这里写图片描述

这里写图片描述

这里写图片描述

附注:/root是叫根目录,但是真正的根目录是/root和/home上面的文件夹../..,这才是根目录。

4.操作文件和目录

文件和文件夹的基础操作:

touch a.txt   创建文件
mkdir test    创建文件夹
echo hello >a.txt 写入数据到文件
vim a.txt     编辑文件
cat a.txt     查看文件
less a.txt    查看文件(分页查看)

file a.txt    查看文件类型
rm a.txt      删除文件  
rm -r test    删除文件夹

cp file1 file2   复制文件或目录
mv file1 file2   移动或者重命名文件

这里写图片描述

文件的解压与打包:

uzip zip

# .tar.gz格式 的解压缩与压缩
tar -zxvf 
tar -zcvf

# .tar.bz2格式 的解压缩与压缩
tar -jxvf
tar -jcvf

文件操作:

# 下载网页文件(下载的文件是index.html)
wget http://imooc.com

# less 分页查看文件
less index.html

# head 输出文件第一部分

# tail 输出文件最后一部分

# j向下一行滚屏 k向上一行滚屏

# 在:后输出/字符,就可以找到该文件内所有该字符所在位置

# gg 到文件头 G 到文件尾

# q 退出

5.重定向

重定向:

# 重定向 覆盖 >
date >output.txt

# 重定向 追加 >>
date >>output.txt

# 管道符 | (查看之后找出特定文件)
ls /bin|grep less   #就可以找出所有文件中包含less关键字的文件了

# 上面的管道还可以这么些
ls /bin >bin.txt
grep less <bin.txt

在Linux系统中有一个习惯——把所有的东西都视为文件,文件、文件夹、设备等等都是文件。

有三类文件是一直打开的,stdin标准输入/stdout标准输出/stderr标准错误。

这里写图片描述

# 标准错误输出 重定向
ls shit 2>out.txt
# cat 合并文件(把两个文件内容合并到重定向的文件内)
cat file1 file2 >file

# uniq 报告或删除文件中的重复的行
cat files.txt
    d.txt
    a.txt
    f.html
    b.txt
    b.txt
cat files.txt|uniq
    d.txt
    a.txt
    f.html
    b.txt

# grep 打印匹配行
cat files.txt|uniq|grep txt
    d.txt
    a.txt
    b.txt

# sort 排序文件
cat files.txt|uniq|grep txt|sort
    a.txt
    b.txt
    d.txt

6.用户和文件权限

# 查看用户权限命令(下面两个命令都可以)
ls -l 文件夹/文件
ll 文件夹/文件

Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源得用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。

实现用户账号的管理,要完成的工作主要有如下几个方面:

  • 用户账号的添加、删除与修改。
  • 用户口令的管理。
  • 用户组的管理。

Linux系统用户组的管理:

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

附注:上面 - 是指文件的类型(可以是file、sym link、directory类型),1 是代表应用连接的数目(link number)、第一个peter是指所属用户、第二个peter是指所属的用户组、0 是代表文件大小、时间 是指最后修改时间。

附注:r w x对于文件和文件夹含义还不一样。

# 1. r (r对于文件夹来说可以读取文件夹内容,对于文件就是查看文件内容)
ls mydir            (文件)
cat file            (文件夹)

# 2. w (w对于文件是可以编辑文件内容,w对于文件夹是可以创建/删除重命名文件夹里面的文件)
edit file                        (文件)
create/delete/rename files in it (文件夹,w是只能对文件夹内的文件有相关操作)

# 3. x (x对于文件是指可以执行该文件,对于文件夹是可以cd进该目录)
. /a.sh         (文件)
cd mydir        (文件夹)

修改权限chmod:

chmod 666 a.txt

另一种方式

chmod [-cfvR] [--help] [--version] mode file...

参数说明:

  • -c 若该文件权限确实已经更改,才显示其更改动作
  • -f 若该文件权限无法被更改也不要显示错误讯息
  • -v 显示权限变更的详细资料
  • -R 对目前目录下的所有文件和子目录进行相同的权限变更(即以递回的方式逐个变更)
  • –help 显示辅助说明
  • –version 显示版本

mode:权限设定字串,格式如下:

[ugoa...] [[+-=] [rwxX]...] [,...]]

其中:

  • u表示该文件的拥有者,g表示与该文件的拥有者属于同一个群体(group)者,o表示其他以为的人,a表示这三者皆是。
  • +表示增加权限,-表示取消权限,=表示唯一设定权限。
  • r表示可读取,w表示可写入,x表示可执行,X表示只有当该文件是个子目录或者该文件已经被设定过为可执行。

    实例:

将文件file1.txt设为所有人皆可读取:

chmod ugo+r file1.txt
# 或者
chmo a+r file1.txt

将文件file1.txt与file.txt设为该文件拥有者,于其所属同一个群体者可写入,但其他以为所有的人则不可写入:

chmod ug+w,o-w file1.txt file2.txt

将ex1.py 设定为只有该文件拥有者可以执行:

chmod u+x ex1.py

将目前目录下的所有文件与子目录设为任何人可读取:

chmod -R a+r *

7.进程

Linux ps命令用于显示当前进程(process)的状态。

ps [options] [--help]

参数:

  • -A 列出所有的行程
  • -w 显示加宽可以显示较多的资讯
  • -au 显示较详细的咨询
  • -aux 显示所有包含其他使用者的行程
# aux输出格式:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
  • USER 行程拥有者
  • PID pid
  • %CPU 占用的CPU使用率
  • %MEM 占用的记忆体大小
  • VSZ 占用的虚拟记忆体大小
  • RSS 占用的记忆体大小
  • TTY 终端的次要装置号码
  • STAT 该行程的状态(D、R、S、T、Z、W、<、N、L)
  • START 行程开始时间
  • TIME 执行的时间
  • COMMAND 所执行的指令

实例:

# 1.显示进程信息
ps -A

# 2.显示root进程用户信息
ps -u root

# 3.显示所有命令,连带命令行
ps -ef

结束进程:

查出PID之后,就可以使用kill pid就可以结束对应进程。

后台执行:

fg、bg、jobs、&、ctrl+z都是根系统任务有关的。

# 1.& 这个放在一个命令的最后,可以把这个命令放到后台执行
firefox &

# 2.crtl + z 可以将一个正在前台执行的命令放到后台,并且暂停
ctrl + z

# 3.jobs 查看当前有多少在后台运行的命令

# 4.bg 将一个在后台暂停的命令,变成继续执行,如果后台有多个命令,可以用bg %jobnumber 将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

# 5.fg 将后台中的命令调至前台继续运行,如果后台有多个命令,可以用fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

Linux top命令:

Linux top命令用于实时显示process的动态。

top - [d/q/c/S/s/i/n/b]
  • d 改变显示的更新速度,或是在交谈式指令列(interactive command)按s
  • q 没有任何延迟的显示速度,如果使用者是有superuser的权限,则top将会以最高的优先序执行
  • c 切换显示模式
  • s 安全模式
  • i 不显示任何闲置或者无用的行程
  • n 更新的次数,完成后将会退出top
  • b 批次档模式,搭配”n”参数一起使用,可以用来将top的结果输出到档案内

实例:

# 显示进程信息
top

# 显示完整命令
top -c

# 以批处理模式显示程序信息
top -b

# 以累积模式显示程序信息
top -S

# 设置信息更新次数(表示更新两次后终止更新显示)
top -n 2

# 设置信息更新时间(表示更新周期为3秒)
top -d 2

# 显示指定的进程信息(显示进程号为139的进程信息,CPU、内存占用率等)
top -p 139

# 将更新显示二次的结果输入到名称为top.log的档案里
top -n 2 -b < top.log

附注:终端里面的复制黏贴是Ctrl+Shift+c和Ctrl+Shift+v。

8.查找

1.locate 查找文件的命令是从数据库中查找的,所以,刚刚创建的文件需要运行一下updatedb命令才能及时将对应的文件信息写入到数据库中,否则系统会根据默认的时间来执行的(一般是一天一次)。

locate 用于查找系统中所有路径中包含对应的字样的文件,注意,他也支持正则表达式,通过文件名查找文件。

locate demo
# 使用正则表达式
locate --regexp 正则表达式

2.find 在目录层次结构中搜索文件

# 查看目录内所有文件
find .

# 查看.txt结尾的文件
find .|grep .txt

# 文件类型
find -type f

# 目录类型
find -type d

# exec执行后续命令
find . -type f -exec ls -l '{}' ';' #找到的文件,通过-exec参数直接执行ls命令
find . -type f -exec grep hello '{}' ';'  #-exec直接执行grep 查找有hello内容的文件

find . -type f -exec grep hello '{}' ';' -print #打印出查找出的具体的文件名
find . -type f -exec grep -n hello '{}' ';' -print  #打印出查找出的文件出现的行数
find . -type f -exec grep -ni hello '{}' ';' -print  #不区分大小写的查找

3.grep 过滤字符串 ,主要用于字符串查找

find .|grep .txt # find之后,再使用grep过滤,寻找.txt的文件

9.网络操作

ssh和rsync的使用。

ssh(远程操作工具)

rsync(数据传输工具)

10.安装软件

三种方式:手动安装、deb包、从apt-get仓库安装。

deb包包括程序本身、配置文件、安装位置和依赖关系。

11.shell脚本编程

Shell编程:

指定解析器:(指定用bash去解析下面的语句,也可以指定为ruby/python)
#! /usr/bin/env bash

语句即命令:(在terminal就是命令,在脚本里面就是语句)

say_hello(){
    echo "hello" 
}

位置参数:

执行脚本:$ peter.sh a.txt b.txt
$#:代表一共有几个参数,这里为2
$0:代表程序名,即peter.sh
$1:代表第一个参数,即a.txt
$2:代表第二个参数,即b.txt

脚本不在当前shell执行:

在shell中执行脚本,并不是在当前shell中执行,而是新开一个shell执行。如果指定在当前shell中执行脚本,用source命令:source peter.sh。

这里写图片描述

循环控制:

重命名指定目录下文件为文件名.txt
rename脚本:
#!/usr/bin/env bash

cd $1
echo I am in `pwd`

for file in `ls`
do
    mv $file $file.txt 
done
执行脚本:./rename.sh mydir/

远程执行:

ssh -t 登录信息 执行语句
例如:ssh -t peter@happycasts.net 'touch a.txt'

确定执行:

echo -n "Want to sync? (y/n):"
read AAA
if [ "${AAA:-y}" = "y" ];then
    xxx
else
    echo Nothing done, bye.
fi

其他语言脚本:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值