Linux初体验
本篇主要是复习一下命令。学命令前整点概念开开胃,电脑带不动虚拟机的推荐可以买一个阿里云服务器的,一样玩,还能部署项目
啥是Linux?
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
乍一看Linux和Unix很像,那他们又有什么区别的呢?
Linux和Unix都是功能强大的操作系统,都是应用广泛的服务器操作系统,但是不要以为他们是一个东西,区别还是很大的
Linux | Unix | |
---|---|---|
开源性 | 开源,免费 | 需要付费 |
跨平台性 | 良好 | 较弱 |
可视化界面 | 命令行&窗体管理 | 仅命令行 |
硬件环境 | 要求较低 | 要求苛刻 |
用户群体 | 用户群体很广泛,个人和企业均可使用 | 用户群体比较窄,多是安全性要求高的大型企业使用,如银行、电信部门等 |
Linux内核
Linux的核心就是内核,内核控制着计算机系统上的所有硬件和软件,在必要时分配硬件,并根据需要执行软件。
- 系统内存管理
- 应用程序管理
- 硬件设备管理
- 文件系统管理
Linux体系结构
- 1、现代 CPU 实现了不同的工作模式,不同模式下 CPU 可以执行的指令和访问的寄存器不同。
- 2、Linux 从 CPU 的角度出发,为了保护内核的安全,把系统分成了两部分。
用户空间和内核空间是程序执行的两种不同的状态,我们可以通过两种方式完成用户空间到内核空间的转移:1)系统调用;2)硬件中断。
Linux 使用的进程间通信方式?
- 1、管道(pipe)、流管道(s_pipe)、有名管道(FIFO)。
- 2、信号(signal) 。
- 3、消息队列。
- 4、共享内存。
- 5、信号量。
- 6、套接字(socket) 。
root用户是什么
root帐户就像一个系统管理员帐户,允许你完全控制系统。你可以在此处创建和维护用户帐户,为每个帐户分配不同的权限。每次安装Linux时都是默认帐户。
Linux的目录结构
Linux 文件系统的结构层次鲜明,就像一棵倒立的树,最顶层是其根目录:
常见目录说明:
- /bin: 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里;
- /etc: 存放系统管理和配置文件;
- /home: 存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示;
- **/usr **: 用于存放系统应用程序;
- /opt: 额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里;
- /proc: 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息;
- /root: 超级用户(系统管理员)的主目录(特权阶级o);
- /sbin: 存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等;
- /dev: 用于存放设备文件;
- /mnt: 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统;
- /boot: 存放用于系统引导时使用的各种文件;
- **/lib **: 存放着和系统运行相关的库文件 ;
- /tmp: 用于存放各种临时文件,是公用的临时文件存储点;
- /var: 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等;
- /lost+found: 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里。
Linux有哪些版本?
一般来说,桌面用户首选 Ubuntu ;服务器首选 RHEL 或 CentOS ,两者中首选 CentOS 。
博主的阿里云服务器就是CentOS的,其实新手这都不是问题,主要是一颗学习的心。
接下来就正菜吧,命令搞一下
Linux常用命令
date
:当前日期时间
ls
:列出当前目录文件
ls -a
:列出当前目录文件(包含隐藏文件)
control+W
:剪切 control+Y
:粘贴剪切的内容
history
:列出用过的命令 !+编号
:会执行对应的命令
curl
:在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。
文件管理命令
pwd
:打印当前工作目录路径
which
:查看命令位于哪个位置,因为Linux每一个命令都对应一个应用程序,执行命令也就会执行对应的应用程序,所以which pwd
意思就是查看pwd程序的目录路径
du
:统计目录大小,单位为kb
du -m
:统计目录大小,单位为M
du -a
:统计目录+文件大小
du -s
:统计目录大小,只显示大小
cat、less、head、tail
:查看文件内容
cat 文件 :一次性在终端显示文件内容;cat file.log
less 文件:在终端显示一部分文件内容,然后通过 空格 回车 看剩余内容; less file.log
head 文件 :在终端显示文件前10行内容;head file.log
tail 文件
:在终端显示文件后10行内容;
tail -f 文件
:实时更新文件内容
touch 文件
:创建一个空白文件;touch new_file
;touch new_file new_file2
同时创建多个文件;
mkdir 目录
:创建一个目录;mkdir new_folder
;如果上级目录不存在,无法创建成果
mkdir -p 目录:递归创建目录;
mkdir -p one/two/three
cp
:复制文件或者目录,并粘贴到指定的文件或者目录
copy new_file new_file_copy
:拷贝new_file文件到new_file_copy文件;
copy new_file folder/new_fille_copy
:拷贝new_file文件到folder目录下的new_file_copy
copy -r one one_copy
:拷贝one目录到one_copy目录
mv
:移动文件,相当于剪切+粘贴
mv file one
:移动file文件到one目录
my file rename_file
:mv也可以对文件重命名
rm
:删除文件和目录
rm file
:删除file文件
rm -i file
:在删除file文件前循环是否确定删除,y确定,n取消
rm -f file
:强制删除file文件
rm -r folder
:删除folder目录,-r表示递归,所以可以用来删除目录
rm -rf /*
:删除根目录下的所有文件!只有root用户才有权限!!!慎用!!!!
sudo rm -rf --no-preserve-root/
也会删除根目录所有文件
用户、权限相关
root:超级用户,一些命令需要root用户才可以执行
sudo
:暂时切换为root
su
: 一直切换到root用户
exit
:切回到普通用户
创建用户,需要root权限
1.useradd 用户
:添加用户
2.passwd --stdin 用户
:指定密码
删除用户,需要root权限
userdel 用户
:删除该用户
userdel -r 用户
:删除该用户以及/home下的目录
userdel: user is currently used by process xxxx;重启虚拟机
系统管理命令
date 命令
显示或设定系统的日期与时间。
命令参数:
-d<字符串> 显示字符串所指的日期与时间。字符串前后必须加上双引号。
-s<字符串> 根据字符串来设置日期与时间。字符串前后必须加上双引号。
-u 显示GMT。
%H 小时(00-23)
%I 小时(00-12)
%M 分钟(以00-59来表示)
%s 总秒数。起算时间为1970-01-01 00:00:00 UTC。
%S 秒(以本地的惯用法来表示)
%a 星期的缩写。
%A 星期的完整名称。
%d 日期(以01-31来表示)。
%D 日期(含年月日)。
%m 月份(以01-12来表示)。
%y 年份(以00-99来表示)。
%Y 年份(以四位数来表示)。
123456789101112131415
实例:
(1)显示下一天
date +%Y%m%d --date="+1 day" //显示下一天的日期
1
(2)-d参数使用
date -d "nov 22" 今年的 11 月 22 日是星期三
date -d '2 weeks' 2周后的日期
date -d 'next monday' (下周一的日期)
date -d next-day +%Y%m%d(明天的日期)或者:date -d tomorrow +%Y%m%d
date -d last-day +%Y%m%d(昨天的日期) 或者:date -d yesterday +%Y%m%d
date -d last-month +%Y%m(上个月是几月)
date -d next-month +%Y%m(下个月是几月)
1234567
free 命令
显示系统内存使用情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。
命令参数:
-b 以Byte显示内存使用情况
-k 以kb为单位显示内存使用情况
-m 以mb为单位显示内存使用情况
-g 以gb为单位显示内存使用情况
-s<间隔秒数> 持续显示内存
-t 显示内存使用总合
123456
kill 命令
发送指定的信号到相应进程。不指定型号将发送SIGTERM(15)终止指定进程。如果任无法终止该程序可用"-KILL" 参数,其发送的信号为SIGKILL(9) ,将强制结束进程,使用ps命令或者jobs 命令可以查看进程号。root用户将影响用户的进程,非root用户只能影响自己的进程。
常用参数:
-l 信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
-a 当处理当前进程时,不限制命令名和进程号的对应关系
-p 指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s 指定发送信号
-u 指定用户
12345
举例:
(1)先使用ps查找进程pro1,然后用kill杀掉
kill -9 $(ps -ef | grep pro1)
1
ps 命令
ps(process status),用来查看当前运行的进程状态,一次性查看,如果需要动态连续结果使用 top
linux上进程有5种状态:
- 运行(正在运行或在运行队列中等待)
- 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
- 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
- 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
- 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)
ps 工具标识进程的5种状态码:
D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process
12345
命令参数:
-A 显示所有进程
a 显示所有进程
-a 显示同一终端下所有进程
c 显示进程真实名称
e 显示环境变量
f 显示进程间的关系
r 显示当前终端运行的进程
-aux 显示所有包含其它使用的进程
12345678
rpm 命令
Linux rpm 命令用于管理套件。
rpm(redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,由于它遵循 GPL 规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM 套件管理方式的出现,让 Linux 易于安装,升级,间接提升了 Linux 的适用度。
# 查看系统自带jdk
rpm -qa | grep jdk
# 删除系统自带jdk
rpm -e --nodeps 查看jdk显示的数据
# 安装jdk
rpm -ivh jdk-7u80-linux-x64.rpm
123456
top 命令
显示当前系统正在执行的进程的相关信息,包括进程 ID、内存占用率、CPU 占用率等,其实就是windows的任务管理器,这个被考过
常用参数:
-c 显示完整的进程命令
-s 保密模式
-p <进程号> 指定进程显示
-n <次数>循环显示次数
压缩 解压
tar -cvf log.tar haha.log
仅打包,不压缩!
tar -tf log.tar
查看归档文件中的内容
tar -rvf log.rar new.log
向归档中添加新文件
tar -xvf log.rar
将归档解开
tar -zcvf log.tar.gz haha.log
打包并gizp压缩
tar -zxvf log.tar.gz
解压
文件权限
这个最好了解一下
- r 对应 4 读的权限
- w 对应 2 写的权限
- x 对应 1 执行的权限
权限 | 数字 | 计算 |
---|---|---|
— | 0 | 0+0+0 |
r– | 4 | 4+0+0 |
-w- | 2 | 0+2+0 |
–x | 1 | 0+0+1 |
rw- | 6 | 4+2+0 |
-wx | 3 | 0+2+1 |
r-x | 5 | 4+0+1 |
rwx | 7 | 4+2+1 |
一个文件的权限有三组:如-rw-r–r--
- 第一个表示这是一个文件;
d
表示是一个目录 - rw对应文件所有者的权限
- 第二个r文件所有者同一群组用户的权限
- 第三个r其他用户的权限
所以给文件赋予权限的时候,要用三个数字连起来,分别对应这三种用户:
- 因此最宽泛的权限就是777,因为7代表rwx,每个用户都有读、写、执行文件的权限
- 同样最低的权限就是000,除了root用户,没有任何人有任何权限
- chmod 600 name.txt:只有文件所有者对name.txt有读写权限,其他用户什么权限都没有
网络通讯命令
ifconfig 命令
- ifconfig 用于查看和配置 Linux 系统的网络接口。
- 查看所有网络接口及其状态:
ifconfig -a
。 - 使用 up 和 down 命令启动或停止某个接口:
ifconfig eth0 up
和ifconfig eth0 down
。
iptables 命令
iptables ,是一个配置 Linux 内核防火墙的命令行工具。功能非常强大,对于我们开发来说,主要掌握如何开放端口即可。例如:
-
把来源 IP 为 192.168.1.101 访问本机 80 端口的包直接拒绝:
iptables -I INPUT -s 192.168.1.101 -p tcp --dport 80 -j REJECT
。 -
开启 80 端口,因为web对外都是这个端口
iptables -A INPUT -p tcp --dport 80 -j ACCEP 1
-
另外,要注意使用
iptables save
命令,进行保存。否则,服务器重启后,配置的规则将丢失。
netstat 命令
Linux netstat命令用于显示网络状态。
利用netstat指令可让你得知整个Linux系统的网络情况。
语法
netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]
1
参数说明:
- -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或–statistice 显示网络工作信息统计表。
- -t或–tcp 显示TCP传输协议的连线状况。
- -u或–udp 显示UDP传输协议的连线状况。
- -v或–verbose 显示指令执行过程。
- -V或–version 显示版本信息。
- -w或–raw 显示RAW传输协议的连线状况。
- -x或–unix 此参数的效果和指定"-A unix"参数相同。
- –ip或–inet 此参数的效果和指定"-A inet"参数相同。
实例
如何查看系统都开启了哪些端口?
[root@centos6 ~ 13:20 #55]# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1035/sshd
tcp 0 0 :::22 :::* LISTEN 1035/sshd
udp 0 0 0.0.0.0:68 0.0.0.0:* 931/dhclient
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] STREAM LISTENING 6825 1/init @/com/ubuntu/upstart
unix 2 [ ACC ] STREAM LISTENING 8429 1003/dbus-daemon /var/run/dbus/system_bus_socket
12345678910
如何查看网络连接状况?
[root@centos6 ~ 13:22 #58]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 192.168.147.130:22 192.168.147.1:23893 ESTABLISHED
tcp 0 0 :::22 :::* LISTEN
udp 0 0 0.0.0.0:68 0.0.0.0:*
1234567
如何统计系统当前进程连接数?
- 输入命令
netstat -an | grep ESTABLISHED | wc -l
。 - 输出结果
177
。一共有 177 连接数。
用 netstat 命令配合其他命令,按照源 IP 统计所有到 80 端口的 ESTABLISHED 状态链接的个数?
严格来说,这个题目考验的是对 awk 的使用。
首先,使用 netstat -an|grep ESTABLISHED
命令。结果如下:
tcp 0 0 120.27.146.122:80 113.65.18.33:62721 ESTABLISHED
tcp 0 0 120.27.146.122:80 27.43.83.115:47148 ESTABLISHED
tcp 0 0 120.27.146.122:58838 106.39.162.96:443 ESTABLISHED
tcp 0 0 120.27.146.122:52304 203.208.40.121:443 ESTABLISHED
tcp 0 0 120.27.146.122:33194 203.208.40.122:443 ESTABLISHED
tcp 0 0 120.27.146.122:53758 101.37.183.144:443 ESTABLISHED
tcp 0 0 120.27.146.122:27017 23.105.193.30:50556 ESTABLISHED
1234567
ping 命令
Linux ping命令用于检测主机。
执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
指定接收包的次数
ping -c 2 www.baidu.com
1
telnet 命令
Linux telnet命令用于远端登入。
执行telnet指令开启终端机阶段作业,并登入远端主机。
语法
telnet [-8acdEfFKLrx][-b<主机别名>][-e<脱离字符>][-k<域名>][-l<用户名称>][-n<记录文件>][-S<服务类型>][-X<认证形态>][主机名称或IP地址<通信端口>]
1
参数说明:
- -8 允许使用8位字符资料,包括输入与输出。
- -a 尝试自动登入远端系统。
- -b<主机别名> 使用别名指定远端主机名称。
- -c 不读取用户专属目录里的.telnetrc文件。
- -d 启动排错模式。
- -e<脱离字符> 设置脱离字符。
- -E 滤除脱离字符。
- -f 此参数的效果和指定"-F"参数相同。
- -F 使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机。
- -k<域名> 使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名。
- -K 不自动登入远端主机。
- -l<用户名称> 指定要登入远端主机的用户名称。
- -L 允许输出8位字符资料。
- -n<记录文件> 指定文件记录相关信息。
- -r 使用类似rlogin指令的用户界面。
- -S<服务类型> 设置telnet连线所需的IP TOS信息。
- -x 假设主机有支持数据加密的功能,就使用它。
- -X<认证形态> 关闭指定的认证形态。
实例
登录远程主机
# 登录IP为 192.168.0.5 的远程主机
telnet 192.168.0.5
Vim编辑器(重要)
具体的流程可以看我做的这张图
插入模式
i
进入插入模式
esc
键盘退出插入模式,进入交互模式
交互模式
0
定位到行首;$
定位到行尾
w
一个单词一个单词的移动,空位就是一个单词
x
删除一个字符
先按数字键,再看x,可以删除数字行
比如先按数字键4,再按x就会删除光标以后的4行
dd
:连续按两次d会删除一行
d0
:删除当前光标到行首的字符
d$
:删除当前光标到行尾的字符
dw
:删除一个单词
yy
:复制一行
p
:粘贴;7+p
:粘贴7次
u
:撤销;7+u
:撤销7次
control+R
:修改撤销,就是取消撤销操作
G
:定位到最后一行;7+G
:跳转到第7行
/+字符
:从当前光标向文件尾部开始查找字符;/World
:在文件中查找”World字符”,n
:跳转到下一个字符
?+字符
:从当前光标向文件首部开始查找字符
命令模式
:s/旧字符串/新字符串
:替换光标所在行的第一个字符串
:s/旧字符串/新字符串/g
:替换光标所在行的所有字符串
:#,# s/旧字符串/新字符串/g
:替换指定行到指定行之间的字符串;:1,5 s/World/shijie/g
:替换1-5行的”World”为”世界”
:%s/旧字符串/新字符串/g
:替换文件内所有的字符串
:w
保存修改
:q
退出文件; :q!
强制退出,不保存修改
:wq
保存并退出 :w!
强制保存,没有写的权限的时候可以强制保存
tips:
命令光看不敲,太理论了吧亲,建议实践一下,回头面试官就问一句,说说常用的20个Linux命令?背书就没意思了
可以删除数字行`比如先按数字键4,再按x就会删除光标以后的4行
dd
:连续按两次d会删除一行
d0
:删除当前光标到行首的字符
d$
:删除当前光标到行尾的字符
dw
:删除一个单词
yy
:复制一行
p
:粘贴;7+p
:粘贴7次
u
:撤销;7+u
:撤销7次
control+R
:修改撤销,就是取消撤销操作
G
:定位到最后一行;7+G
:跳转到第7行
/+字符
:从当前光标向文件尾部开始查找字符;/World
:在文件中查找”World字符”,n
:跳转到下一个字符
?+字符
:从当前光标向文件首部开始查找字符
命令模式
:s/旧字符串/新字符串
:替换光标所在行的第一个字符串
:s/旧字符串/新字符串/g
:替换光标所在行的所有字符串
:#,# s/旧字符串/新字符串/g
:替换指定行到指定行之间的字符串;:1,5 s/World/shijie/g
:替换1-5行的”World”为”世界”
:%s/旧字符串/新字符串/g
:替换文件内所有的字符串
:w
保存修改
:q
退出文件; :q!
强制退出,不保存修改
:wq
保存并退出 :w!
强制保存,没有写的权限的时候可以强制保存
tips:
命令光看不敲,太理论了吧亲,建议实践一下,回头面试官就问一句,说说常用的20个Linux命令?背书就没意思了
参考网址:https://blog.csdn.net/ThinkWon/article/details/104588679