Linux 初探
Linux,全称GNU/Linux,是一套免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年第一次释出,它主要受到Minix和Unix思想的启发,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux有上百种不同的发行版,如基于社区开发的debian、archlinux,和基于商业开发的Red Hat Enterprise Linux、SUSE、oracle linux等
体系架构
简要结构图
完整结构图
系统体系结构图
常见目录含义
目录 | 概述 |
---|---|
/bin | 存放⼆进制可执⾏⽂件(ls,cat,mkdir等),常⽤命令⼀般都在这⾥。 |
/etc | 存放系统管理和配置⽂件 |
/home | 存放所有⽤户⽂件的根⽬录,是⽤户主⽬录的基点,⽐如⽤户user的主⽬录就是/home/user,可以⽤~user表示 |
/usr | ⽤于存放系统应⽤程序,⽐较重要的⽬录/usr/local 本地系统管理员软件安装⽬录(安装系统级的应⽤)。这是最庞⼤的⽬录,要⽤到的应⽤程序和⽂件⼏乎都在这个⽬录。/usr/x11r6 存放x window的⽬录/usr/bin 众多的应⽤程序/usr/sbin超级⽤户的⼀些管理程序/usr/doc linux⽂档/usr/include linux下开发和编译应⽤程序所需要的头⽂件/usr/lib 常⽤的动态链接库和软件包的配置⽂件/usr/man 帮助⽂档/usr/src 源代码,linux内核的源代码就放在/usr/src/linux⾥/usr/local/bin本地增加的命令/usr/local/lib 本地增加的库 |
/opt | 额外安装的可选应⽤程序包所放置的位置。⼀般情况下,我们可以把tomcat等都安装到这⾥。 |
/proc | 虚拟⽂件系统⽬录,是系统内存的映射。可直接访问这个⽬录来获取系统信息。 |
/root | 超级⽤户(系统管理员)的主⽬录(特权阶级^o^) |
/sbin | 存放⼆进制可执⾏⽂件,只有root才能访问。这⾥存放的是系统管理员使⽤的系统级别的管理命令和程序。如ifconfig等。 |
/dev | ⽤于存放设备⽂件。 |
/mnt | 系统管理员安装临时⽂件系统的安装点,系统提供这个⽬录是让⽤户临时挂载其他的⽂件系统。 |
/boot | 存放⽤于系统引导时使⽤的各种⽂件 |
/lib | 存放跟⽂件系统中的程序运⾏所需要的共享库及内核模块。共享库⼜叫动态链接共享库,作⽤类似windows⾥的.dll⽂件,存放了根⽂件系统程序运⾏所需的共享⽂件。 |
/tmp | ⽤于存放各种临时⽂件,是公⽤的临时⽂件存储点。 |
/var | ⽤于存放运⾏时需要改变数据的⽂件,也是某些⼤⽂件的溢出区,⽐⽅说各种服务的⽇志⽂件(系统启动⽇志等。)等。 |
/lost+found | 这个⽬录平时是空的,系统⾮正常关机⽽留下“⽆家可归”的⽂件(windows下叫什么.chk)就在这⾥ |
通用命令
认识终端
[root@travis ~]#
名称 | 概述 |
---|---|
root | 为当前登录用户 |
travis | 主机名 |
~ | 当前⼯作⽬录,默认是当前⽤户的家⽬录,root就是/root,普通⽤户是 /home/⽤户名 |
#、$ | 提示符超级⽤户是 #,普通⽤户是$ |
一般命令格式
命令 [选项][参数]
当有多个选项时,可以写在⼀起
⼀般参数有简化和完整写法两种 -a 与 --all 等效
ls
查询⽬录中的内容
ls [选项][⽂件或者⽬录]
选项
- -a 显示所有⽂件,包括隐藏⽂件
- -l 显示详细信息
- -d 查看⽬录本身的属性⽽⾮⼦⽂件 ls /etc/
- -h ⼈性化的⽅式显示⽂件⼤⼩
- -i 显示inode,也就是i节点
默认当前⽬录下的⽂件列表
-l 显示详细信息
drwxr-xr-x . 1 root root 800 Sep 16 00:19 logs
drwxr-xr-x | . | 1 | root | root | 800 | Sep 16 00:19 | logs |
---|---|---|---|---|---|---|---|
⽂件类型和权限 | ACL 权限 | 硬链接引⽤计数 | 所有者 | 所属组 | 文件大小 | 最后修改时间 | 文件名 |
⽂件类型和权限
-rw-r--r--
- ⽂件类型 - ⽂件、d ⽬录、l 软链接⽂件
- u(所有者)、g(所属组)、o(其他⼈)
- r(read) 读取、w(write) 写⼊、x(execute) 执⾏
文件处理命令
mkdir
建⽴⽬录 mkdir
make directory
mkdir -p [⽬录名]
- -p 递归创建
cd
切换所在⽬录 change directory
- cd [⽬录]
- ~ 家⽬录
- 家⽬录
- -上次⽬录
- . 当前⽬录
- .. 上级⽬录
- 相对路径是参照当前所在⽬录
- 绝对路径是从根⽬录开始
- 按TAB键可以补全命令和⽬录
pwd
显示当前⽬录 pwd
rmdir
删除目录 rmdir
- 删除⽬录 remove empty directory
- rmdir [⽬录名]
rm
删除⽂件或者⽬录 remove
- 删除⽂件或者⽬录 remove
- rm [⽂件或者⽬录]
- -r 删除⽬录
- -f 强制删除
- rm -rf [⽂件或者⽬录] 递归强制删除所有⽬录
cp
copy 复制命令
- copy 复制命令
- copy [源⽂件或者⽬录][⽬标⽂件]
- -r 复制⽬录,默认是复制⽂件
- -p 连带⽂件属性复制
- -d 若源⽂件是链接⽂件,则复制连接属性
- -a 相当于 -rpd
mv
- 移动⽂件或者改名 move
- mv [源⽂件或者⽬录][⽬标⽂件]
in
链接命令,⽣成链接⽂件 link
硬连接特征
- 拥有相同的i节点和存储block块,可以看作是同⼀个⽂件
- 可以通过i节点访问
- 不能跨分区
- 不能针对⽬录使⽤
- ⼀般不使⽤
软链接特征
- ln -s [源⽂件][⽬标⽂件]
- -s 创建软链接
- 类似Windows快捷⽅式
- 软链接拥有⾃⼰的i节点和Block块,但是数据块中只保存源⽂件的⽂件名和i节点号,并没有实际的⽂件数据
- lrwxrwxrwx l 软链接 软链接的⽂件权限都是 777
- 修改任意⼀个⽂件,另⼀个都会改变
- 删除源⽂件,软链接不能使⽤
- 软链接源⽂件必须写绝对路径
⽂件搜索命令
locate
- 在后台数据库中按⽂件名搜索,速度⽐较快
- 数据保存在 /var/lib/mlocate 后台数据库,每天更新⼀次
- 可以 updatedb 命令⽴刻更新数据库
- 只能搜索⽂件名
/etc/updatedb.conf
建⽴索引的配置⽂件
- PRUNE_BIND_MOUNTS = "yes" 全部⽣效,开启搜索限制
- PRUNEFS 不搜索的⽂件系统
- PRUNENAMES 忽略的⽂件类型
- PRUNEPATHS 忽略的路径 /tmp
whereis
- 搜索命令所在路径以及帮助⽂档所在位置
- whereis 命令名
whereis ls
- -b 只查找可执⾏⽂件
- -m 只查找帮助⽂件
which
- 可以看到别名
which ls
- 能看到的都是外部安装的命令
- ⽆法查看Shell⾃带的命令,如
which cd
echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
- 定义的是系统搜索命令的路径
- echo $PATH
find
- ⽂件搜索命令
- find [搜索范围][搜索条件]
按名称搜索
避免⼤范围的搜索,会⾮常消耗系统资源
find / -name aaa.log
通配符
- find是在系统当中搜索符合条件的⽂件名,如果需要匹配,使⽤通配符匹配,通配符是完全匹配
- 通配符
- *匹配任意内容
- ? 匹配任意⼀个字符
- [] 匹配任意⼀个中括号内的字符
find . -name "ab[cdef]"
不区分⼤⼩写 -i
find / -iname "ab[cdef]"
按所有者进⾏搜索 -u
find /root -user root
find /root -nouser
grep
- 在⽂件当中匹配符合条件的字符串
- grep "10" access.log
- -i 忽略⼤⼩写
- -v 排除指定字符串
- find命令,在系统当中搜索符合条件的⽂件名,如果需要匹配,使⽤通配符匹配,通配符是完全匹配
- grep命令 在⽂件当中搜索符合条件的字符串,如果需要匹配,使⽤正则表达式进⾏匹配,正则表达式时包含匹配
网络管理
ifconfig & ip
查看和配置网络基本信息
tracerout
排查网络故障
ss | netstat
找到占用网络端口的进程
netstat -an | grep ':80'
nslookup
nslookup www.baidu.com
压缩
.zip` `.gz` `.bz2` `.tar.gz` `.tar.bz2
zip
- 压缩⽂件 zip 压缩⽂件名 源⽂件
- 压缩⽬录 zip -r 压缩⽂件名 源⽬录
- 解压 unzip 压缩⽂件名
mkdir book
touch book/1.txt
touch book/2.txt
zip -r book.zip book
unzip book.zip
gzip
命令 | 示例 | 含义 |
---|---|---|
gzip 源⽂件 | gzip a.txt | 压缩为.gz格式的压缩⽂件,源⽂件会消失 |
gzip -c 源⽂件 > 压缩⽂件 | gzip -c yum.txt >yum.txt.gz | 压缩为.gz格式的压缩⽂件,源⽂件不会消失 |
gzip -r ⽬录 | gzip -r xx | 压缩⽬录下的所有⼦⽂件,但是不压缩⽬录 |
gzip -d 压缩⽂件名 | gzip -d yum.txt.gz | 解压缩⽂件,不保留压缩包 |
gunzip 压缩⽂件 | gunzip yum.txt.gz | 解压缩⽂件,不保留压缩包 |
- 压缩是压缩⽬录下的⽂件
bz2
命令 | 示例 | 含义 |
---|---|---|
bzip2 源⽂件 | bzip2 1.txt | 压缩为.bz2格式的⽂件,不保留源⽂件 |
bzip2 -k 源⽂件 | zip2 -k 1.txt | 压缩为.bz2格式的⽂件,保留源⽂件 |
bzip2 -d 压缩⽂件名 | bzip2 -d 1.txt.bz2 | 解压压缩包 |
bunzip2 压缩⽂件名 | bunzip2 1.txt.bz2 | 解压压缩包 |
- bzip2 不能压缩⽬录
tar
- 打包命令
- tar -cvf 打包⽂件名 源⽂件
- -c 打包
- -v 显示过程
- -f 指定打包后的⽂件名
tar -cvf book.tar book
gzip book.tar
bzip2 book.tar
- x 解打包
tar -xvf book.tar
关机重启
w
查看登录⽤户信息
- USER 登录的⽤户名
- TTY 登录的终端 tty1 本地终端 pts/0远程终端
- FROM 登录的IP
- LOGIN 登录时间
- IDLE ⽤户闲置时间
- JCPU 该终端所有进程占⽤的时间
- PCPU 当前进程所占⽤的时间
- WHAT 正在执⾏的命令
who
查看登录⽤户信息
- USER 登录的⽤户名
- TTY 登录的终端 tty1 本地终端 pts/0远程终端
- LOGIN 登录时间(登录的IP)
last
查看当前登录和过去登录的⽤户信息 默认读取 /var/log/wtmp ⽂件
- ⽤户名
- 登录终端
- 登录IP
- 登录时间
- 退出时间(在线时间)
lastlog
查看所有⽤户的最后⼀次登录时间
- ⽤户名
- 登录终端
- 登录IP
- 最后⼀次登录时间
vi常用
- [Esc] 退出编辑模式,回到一般模式中(常用)
- :w 保存
- :w! 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!
- :q 退出
- :q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
- :! 强制保存
- :ls 列出所有的⽂件
- :n 下⼀个
- :N 上⼀个
- :15 跳转到指定⾏
- /xxx 从光标位置开始向后搜索 xxx 字符串
- ?xxx 从光标位置开始向前搜索
- h 前移光标
- l 左移光标
- j 下移光标
- k 上移光标
切换用户
su
su root
安装文件
rpm
rpm命令是RPM软件包的管理工具。rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。
用法: rpm [选项...]
- -a:查询所有套件;
- -b<完成阶段><套件档>+或-t <完成阶段><套件档>+:设置包装套件的完成阶段,并指定套件档的文件名称;
- -c:只列出组态配置文件,本参数需配合"-l"参数使用;
- -d:只列出文本文件,本参数需配合"-l"参数使用;
- -e<套件档>或--erase<套件档>:删除指定的套件;
- -f<文件>+:查询拥有指定文件的套件;
- -h或--hash:套件安装时列出标记;
- -i:显示套件的相关信息;
- -i<套件档>或--install<套件档>:安装指定的套件档;
- -l:显示套件的文件列表;
- -p<套件档>+:查询指定的RPM套件档;
- -q:使用询问模式,当遇到任何问题时,rpm指令会先询问用户;
- -R:显示套件的关联性信息;
- -s:显示文件状态,本参数需配合"-l"参数使用;
- -U<套件档>或--upgrade<套件档>:升级指定的套件档;
- -v:显示指令执行过程;
- -vv:详细显示指令执行过程,便于排错。
rpm -ivh your-package # 直接安装
rpm --force -ivh your-package.rpm # 忽略报错,强制安装
查看进程
ps
- -e 显示所有进程
- -f 全格式
- -u 不显示标题
- -l 长格式
- -w 宽输出
- a 显示终端上所有进程,包含其他用户的进程
- r 只显示正在运行的进程
- u 以用户为主的格式来显示程序的状况
- x 显示所有程序,不以终端机来区分
查看进程: ps -ef
ps -ef 是用标准的格式显示进程的、其格式如下
- UID //用户ID、但输出的是用户名
- PID //进程的ID
- PPID //父进程ID
- C //进程占用CPU的百分比
- STIME //进程启动到现在的时间
- TTY //该进程在那个终端上运行,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程
- CMD //命令的名称和参数
查看进程: ps aux
ps aux 是用BSD的格式来显示、其格式如下
同ps -ef 不同的有列有
- USER //用户名
- %CPU //进程占用的CPU百分比
- %MEM //占用内存的百分比
- VSZ //该进程使用的虚拟內存量(KB)
- RSS //该进程占用的固定內存量(KB)(驻留中页的数量)
- STAT //进程的状态
- START //该进程被触发启动时间
- TIME //该进程实际使用CPU运行的时间
其中STAT状态位常见的状态字符有
- D //无法中断的休眠状态(通常 IO 的进程)
- R //正在运行可中在队列中可过行的
- S //处于休眠状态
- T //停止或被追踪
- W //进入内存交换 (从内核2.6开始无效
- X //死掉的进程 (基本很少见)
- Z //僵尸进程
- < //优先级高的进程
- N //优先级较低的进程
- L //有些页被锁进内存
- s //进程的领导者(在它之下有子进程)
- l //多线程,克隆线程(使用 CLONE_THREAD, 类似 NPTL pthreads)
- [+] //位于后台的进程组
传输文件
scp
可以简单用scp 命令来实现
查看scp帮助:sup -h
输出信息如下
scp: illegal option -- h
usage: scp [-346BCpqrTv] [-c cipher] [-F ssh_config] [-i identity_file]
[-J destination] [-l limit] [-o ssh_option] [-P port]
[-S program] source ... target
option
- -v 显示进度
- -r 递归处理
- -C 压缩选项
- -P 选择端口
macos 上传
scp -r local_folder remote_username@remote_ip:remote_folder
macos 下载
scp -r remote_username@remote_ip:remote_folder local_folder
更多参数
更多参数可以通过命令 man scp
来查看
查看端口占用
netstat
常见参数: |命令|参数| |:- |:- | |-a或--all | 显示所有连线中的Socket。 |-A<网络类型>或--<网络类型> | 列出该网络类型连线中的相关地址。 |-c或--continuous | 持续列出网络状态。 |-C或--cache | 显示路由器配置的快取信息。 |-e或--extend | 显示网络其他相关信息。 |-F或--fib | 显示FIB。 |-g或--groups | 显示多重广播功能群组组员名单。 |-h或--help | 在线帮助。 |-i或--interfaces | 显示网络界面信息表单。 |-l或--listening | 显示监控中的服务器的Socket。 |-M或--masquerade | 显示伪装的网络连线。 |-n或--numeric | 直接使用IP地址,而不通过域名服务器。 |-N或--netlink或--symbolic | 显示网络硬件外围设备的符号连接名称。 |-o或--timers | 显示计时器。 |-p或--programs | 显示正在使用Socket的程序识别码和程序名称。 |-r或--route | 显示Routing Table。 |-s或--statistics | 显示网络工作信息统计表。 |-t或--tcp | 显示TCP传输协议的连线状况。 |-u或--udp | 显示UDP传输协议的连线状况。 |-v或--verbose | 显示指令执行过程。 |-V或--version | 显示版本信息。 |-w或--raw | 显示RAW传输协议的连线状况。 |-x或--unix | 此参数的效果和指定"-A unix"参数相同。 |--ip或--inet | 此参数的效果和指定"-A inet"参数相同。
查看当前所有tcp端口
[root@localhost ~]# netstat -ntlp
查看所有8000端口使用情况
[root@localhost ~]# netstat -ntulp | grep 8000
更改用户权限
chown
只能是 root 用户更改 用户组和用户所属
- user : 新的文件拥有者的使用者 ID
- group : 新的文件拥有者的使用者组(group)
- -c : 显示更改的部分的信息
- -f : 忽略错误信息
- -h :修复符号链接
- -v : 显示详细的处理信息
- -R : 处理指定目录以及其子目录下的所有文件
- --help : 显示辅助说明
- --version : 显示版本
规则
[root@localhost ~]# chown [-cfhvR] [--help] [--version] user[:group] file...
# 常见
[root@localhost ~]# chown -R user:group file(dir)
chmod
Linux/Unix 的文件调用权限分为三级 : 文件拥有者、群组、其他。利用 chmod 可以藉以控制文件如何被他人所调用
常见参数
参数 | 说明 |
---|---|
u | 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。 |
+ | 表示增加权限、- 表示取消权限、= 表示唯一设定权限。 |
r | 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。 |
-c | 若该文件权限确实已经更改,才显示其更改动作 |
-f | 若该文件权限无法被更改也不要显示错误讯息 |
-v | 显示权限变更的详细资料 |
-R | 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更) |
--help | 显示辅助说明 |
--version | 显示版本 |
用法
[root@localhost ~]# chmod [-cfvR] [--help] [--version] mode file...
# 超级权限
[root@localhost ~]# chmod 777 file(dir)
# 稳定读取
[root@localhost ~]# chmod 600 file(dir)
# 给所有者增加写的权限
[root@localhost ~]# chmod u+w file(dir)
# 递归给权限
[root@localhost ~]# chmod -R 600 file(dir)