linux操作系统
操作系统是电脑的关键,管理电脑软硬件资源,直接运行在裸机上的,其他软件都必须在操作系统上运行
-
操作系统分类
- 桌面操作系统:windows、linux(ubuntu、centos、rehat、debian)、mac os 、中标麒麟
- 移动端:android、symbian、ios、winphone、blackberry
- 服务器端:windows nt、os server 、rehat、centos、geetoo(贱兔)、ubuntu
- 类unix 把由unix衍生出来的系统称之为类unix系统。
-
内核 操作系统最基础的部分,其他应用都要通过内核对计算机硬件进行安全访问。
-
GUI : graphic User interface 图形用户接口
- GNOME(ubuntu 默认)
- KDE
-
32位和64位,寻址方式不同,64位效率更高
-
linux操作系统历史
-
linux有两大发行版阵营
rehat: rehat、centos(免费) debian: ubuntu deepin
linux系统优点:
-
免费、开源
-
速度快,资源少
-
稳定、安全,不宕机
-
多用户、多任务
-
支持多种平台
-
虚拟化和虚拟机
- 虚拟化: 也就是将一台物理机划分成n逻辑的计算机,最大限度的榨干计算机的性能
- docker openstack kvm
- 虚拟机 实现虚拟化的一种技术
- windows: vmware workstation virtual box
- mac :parallels desktop
- 虚拟化: 也就是将一台物理机划分成n逻辑的计算机,最大限度的榨干计算机的性能
二、系统安装
-
国内镜像(https://mirrors.aliyun.com/)
-
ubuntu16.04.3-desktop-amd64 + vmware workstation12.5
-
关机、重启命令
关机: shutdown -h 18:00 #系统在18:00定时关机 shutdown -h +10 #系统10分钟后关机 shutdown -h now 立即关机 halt 立即关机 等于shutdown -h now poweroff 关机 重启: reboot
-
快照 拍摄快照,保存虚拟机状态,以后虚拟机出错后,可以恢复到快照状态
-
linux版本查看
python@ubuntu:/myproject/blog$ uname -r 4.13.0-38-generic #内核发行号 python@ubuntu:/myproject/blog$ uname -v //显示内核版本号 #43~16.04.1-Ubuntu SMP Wed Mar 14 17:48:43 UTC 2018 #显示所有信息 python@ubuntu:/myproject/blog$ uname -a Linux ubuntu 4.13.0-37-generic #42~16.04.1-Ubuntu SMP Wed Mar 7 16:03:28 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
-
安装完毕后需要更新软件。
- 桌面右上角,设置(齿轮)—— 系统设置—— system—software update。download from 后的下拉框中选择”中国的服务器“ — 阿里云镜像:http://mirrors.aliyun.com/ubuntu
- 设置显示器,同样在系统设置中 hardware----display 选择所需分辨率
- 语言设置 系统设置——language中,添加汉语,然后再上面的列表框中将其拖动到最前面,下次重启就可以看到中文界面了。重启的时候会提示你目录是否改成汉语的,请选择no
-
显示终端
- 在图形界面里显示终端,请按ctl + alt + t 显示终端或者桌面右键–终端
- 不带图形界面的终端(全shell),请安ctl + alt + f1~f6,可以开启不同的终端窗口,最多6个,按ctl + alt + f7退回到图形界面
-
开启工作区
系统设置—外观—行为:点选开启工作区。
-
root用户和sudo
系统默认的root用户是停用的,所有和系统相关指令均需使用sudo(super user do)命令执行,需要输入密码
三、常用工具
-
ssh
是secure shell的简写
-
传输是加密,可以有效防止数据再传输过程中被截取
-
传输的数据是压缩的,所以速度超快
-
开启器ssh服务,ubuntu默认没有安装ssh服务,首先需要安装ssh服务器
#1. 安装ssh-server sudo apt-get install openssh-server #2. 检查ssh服务开启状态 python@ubuntu:~$ ps -aux | grep ssh root 3747 0.0 0.5 65512 5636 ? Ss 20:54 0:00 /usr/sbin/sshd -D #是这个 python 4119 0.0 0.1 21312 1044 pts/4 S+ 21:16 0:00 grep --color=auto ssh #3.启动ssh服务 sudo service ssh start #或者 sudo /etc/init.d/ssh start #4.测试 ssh -p 端口 用户名@主机地址 #ssh默认端口是22
-
-
远程连接工具
- xshell
- putty
- scrt
-
常见快捷键
快捷键 说明 ctrl + c 终止正在正在执行的命令 ctrl + a 回到命名开始 ctrl + e 回到命名结尾 ctrl + u 清空命令行 ctrl + l 或者clear 清屏 tab 命令、文件名、目录名自动补齐 -
常见命令错误
- 命令敲错了
- 多个空格
- 这个命令还没有安装 command not found
-
命令的提示符
root@ubuntu16 ~# root 用户名 ubuntu16 主机名 ~ 用户的家目录 root用户的家目录是/root;一般用户的家目录是 /home/用户名 / 系统根目录 # 超级管理员在工作 $ 普通用户在工作
-
软件安装
-
apt 安装
查看软件包信息 sudo apt-cache showsrc 包名 获得源码 sudo apt-get source 包名 安装软件 sudo apt-get install 包名 删除软件 sudo apt-get remove 包名 获取新的软件包列表 sudo apt-get update 升级有可用更新的软件包 sudo apt-get upgrade
#安装常见的库
sudo apt-get update
sudo apt-get install man gcc make sudo lsof ssh openssl tree vim dnsutils iputils-ping net-tools psmisc sysstat curl telnet traceroute wget libbz2-dev libpcre3 libpcre3-dev libreadline-dev libsqlite3-dev libssl-dev zlib1g-dev git mysql-server mysql-client zip p7zip
-
linux常用命令
一、linux文件系统结构
sudo apt-get install tree
tree --help #查看帮助
tree -L 1 #显示文件目录
root@ubuntu16 /# tree -L 1
. #系统根目录
├── bin #存放常见的命令
├── boot #系统启动文件和核心文件都在这个目录
├── cdrom #光驱
├── dev #存放设备文件,包括硬盘、光驱、键盘、鼠标等
├── etc #系统配置文件都在这个目录下
├── home #普通用户的家目录
├── lib #系统链接库
├── lib64 #64位的链接库
├── lost+found #系统自动生成的,如果文件系统出错,会在目录下产生文件,记录错误
├── media #系统自动挂载的光驱、usb等
├── mnt #mount简写 挂载其他文件系统
├── opt #可在此安装第三方软件
├── proc #系统进程的信息、系统状态信息
├── root #超管的目录
├── run #进程运行数据
├── sbin #管理员的命令,普通用户无法使用
├── srv #服务信息
├── sys #系统相关
├── tmp #临时目录,所有用户都具有读写权限
├── usr #unix software resource 用户的软件安装到这个目录
| ├── bin #应用程序的可执行文件
| ├── sbin #用户或超管的标准命令
| ├── local #管理员安装的应用程序目录
| └── share #共享文件目录
└── var #存放不断扩充的文件。比如数据库文件、日志文件
├── log #日志目录,各种应用的日志
└── run # /run的软连接
二、常见命令
-
ls
列出目录下的文件或子目录
ls [参数] #中括号表示可选 ls -l #以列表方式显示文件的详细信息 ls -a #显示隐藏文件,隐藏文件的文件名以.开头 ls -A #显示除.和..以外的任何文件 ls -i #查看文件的节点号 ls -d * #只显示目录 ls --color #以不同颜色显示文件、目录、可执行文件 source ~/.bashrc ls --help #查找帮助
ls --help #查看命令参数
~~~shell drwxr-xr-x 2 python python 4096 3月 28 11:20 Templates drwxr-xr-x 2 python python 4096 3月 28 11:20 Videos
第一部分:表示文件类型 d代表目录,-代表普通文件,l代表软连接
第2部分,2-10列代表文件的权限:rwxr-xr-x.
第3部分:数字代表文件的链接数
第四部分:root代表文件的所有者
第5部分:root表示文件属于哪个用户组
第6部分:数字的表示文件大小,以字节为单位
第7部分:时间,表示文件的修改时间
第8部分:文件名
#文件权限
drwxr-xr-x. 2 root root 4096 Nov 20 07:36 tmp
r:read 可读
w:write 可写
x:excute 可执行
-:表示无权限
权限:
2-4位 ower 文件的所有者
5-7位 group:用户组
8-10位 other:其他用户
2. ll
以列表方式显示,其实是ls -l的别名,这个配置在~/.bashrc中
白色代表普通文件
绿色代表可执行文件
蓝色代表目录
3. man命令
~~~shell
#命令的帮助文档
sudo apt-get install man
#用法:
man 命令名
常用的快捷键
空格 f 下翻页
b 上翻页
shift + g 到文件末尾
g 文件开头
q 退出
上下箭头 前翻和后翻
回车键 后翻
home 回到开始
-
history命令
查看你敲过的命令
-
硬链接和软连接
文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qa8Qt7Qv-1575268971839)(C:\hz1802\30\hardlink.jpg)]
为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。
- 一个 inode 号对应多个文件名,则称这些文件名为硬链接
- 一个文件多个名字 为硬链接
link 源文件名 新文件名 ln 源文件名 新文件名 stat 文件名 #查看文件信息 ls -i #查看目录下文件的硬链接数 python@ubuntu:/csl$ ls -la total 4 913923 lrwxrwxrwx. 1 root root 5 Mar 18 16:20 2.txt -> 1.txt 913926 -rw-r--r--. 2 root root 0 Mar 18 19:58 31.txt 913926 -rw-r--r--. 2 root root 0 Mar 18 19:58 32.txt 913925 -rwxr-xr-x. 1 root root 0 Mar 18 17:29 5.txt 913924 drwxr-xr-x. 2 root root 4096 Mar 18 17:29 test # 硬链接的特点: 1.只能对已存在的文件进行创建; 2.不能对交叉文件系统进行硬链接的创建; 3.不能对目录进行创建,只可对文件创建; 4.删除一个硬链接文件并不影响其他有相同inode 号的文件。
- 软连接
软链接与硬链接不同,若文件用户数据块中存放的内容是另一文件的路径名,则该文件就是软连接。软链接就是一个普通文件,只是数据块内容有点特殊。软链接类似快捷方式
ln -s 源文件 目标文件。
软连接的特点:
软链接有自己的文件属性及权限等;
可对不存在的文件或目录创建软链接;
软链接可交叉文件系统;
软链接可对文件或目录创建;
创建软链接时,链接计数 i_nlink 不会增加;
删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接
三、目录管理
-
绝对路径和相对路径
linux的目录和windows不同,不区分盘符,只有一个根目录,根目录用/表示。
- 绝对路径:从根目录到当前文件(目录)的路径,比如:/home/python
- 相对路径:以当前目录为基准,表示上级目录或子目录
- 用 . 表示当前目录
- 用…表示上级目录
- linux目录分隔符只能用正斜线(/)表示
- 用 ~ 表示用户主目录,用 - 表示来源目录(你从哪个目录切换到当前目录的)
-
目录切换
cd 目录名 #切换目录 . #当前目录 .. #代表上级目录 / #代表根目录 ~ #用户家目录(宿主目录) root用户的家目录/root 普通用户的家目录/home/用户名 cd /etc/yum.repos.d cd / #切换到根目录 cd - #切换到来源目录 cd ~ #返回用户的家目录 cd #返回用户的家目录 pwd #显示当前目录的绝对路径名
-
提示信息
[root@localhost ~]# cd / [root@localhost /]$ root代表用户名 localhost 主机名 ~ 用户的家目录 / 用户当前所处的目录(/ 根目录) # 表示超级管理员在操作 $ 普通用户在操作
-
创建目录
sudo mkdir 目录名 sudo mkdir -p 目录名 #递归创建目录 sudo mkdir -p h1802/1/2 python@ubuntu:~/tmp/2$ sudo mkdir -p 3/{4,5}/{6,7,8} python@ubuntu:~/tmp/2$ tree -L 3 . └── 3 ├── 4 │ ├── 6 │ ├── 7 │ └── 8 └── 5 ├── 6 ├── 7 └── 8
-
删除目录 rmdir
sudo rmdir [option] 目录名 #删除的时候目录必须为空 sudo rmdir -p 目录名 #递归删除空目录 sudo rmdir -p 1/2/3 #1,2,3目录都必须不能有文件
四、文件操作
-
文件创建
sudo vim 也可以创建文件 sudo touch 文件名 [文件名2] [文件名3].... #创建多个空文件,如果文件存在,自动忽略,不会覆盖 echo 'hello world' > 1.txt #可以将显示内容输出到文件,但会覆盖原来的内容,文件不存在则创建 echo '世界,你好' >> 1.txt #将显示内容追加到文件末尾,文件不存在则创建 #输出重定向符号: > 覆盖 >> 追加
-
文件移动
sudo mv 源文件 目标文件 #销毁原件 sudo mv 1.txt ./lpl/ #将1.txt移动到字目录lpl下,文件名不变 sudo mv 1.txt 2.txt #如果在同一个目录就是文件重命名 将1.txt重命名为2.txt
-
文件拷贝
sudo cp 源文件 目标文件 sudo cp -r 源目录 目标目录 #递归拷贝目录 sudo cp -r 4/8 5/7/ root@ubuntu:/home/python/tmp/2/3# tree -L 4 . ├── 4 │ ├── 1.txt │ ├── 42.js │ ├── 8 │ │ ├── 2.php │ │ ├── 3.py │ │ └── 5.hello │ └── 9.php └── 5 ├── 6 │ ├── 2.php │ ├── 3.py │ └── 5.hello ├── 7 │ └── 8 │ ├── 2.php │ ├── 3.py │ └── 5.hello └── 8
-
文件删除
sudo rm 文件名 sudo rm -i 文件名 #删除前逐一确认 sudo rm -f 文件名 #删除文件不带提示 sudo rm -rf 目录名 #递归删除目录,不管目录是否为空
-
文件查看
cat 文件名 #输出文件内容,从前往后输出, tac 文件名 #cat的反写,从后往前输出 head -n N 文件名 #显示文件的前几行,可以指定查看的行数,默认显示10行 head -N 文件名 tail -n N 文件名 #显示文件的最后几行,可以指定查看的行数(N) tail -N 文件名 # tail -f cat 文件名 #实时显示文件内容 watch -d -n 秒数 cat 文件名 #实时显示文件内容 有高亮 sudo vi 文件名 more 文件名 #从前往后查看,可以翻屏 ,不能往前翻 回车一行行查看,空格翻屏(f翻屏) q退出 less 文件名 #和more类似,可以前翻页,g首页 G尾页,b前翻页,空格和f后翻页,q退出 stat 文件名 #查看文件详细信息 #文件的三个时间: atime: accesstime 访问时间 mtime:modifytime 修改时间 ctime: changetime 修改状态时间(修改文件元数据)
-
文件查找
- find
# find 用于在系统内搜索指定文件 用法: find [路径] [参数] [文件名] -name 按文件名查找 -iname 按文件名查找,不区分大小写 -mtime +/-n #-n表示n天以内修改的文件,+n表示修改超过n天的文件 -user #按文件属主查找 -size [+/-]n[c/k/M/G] #查找文件长度为n块,+表示大于,-表示小于;c是字节 -perm 权限数值 #按照文件权限进行查找 -maxdepth N #查找的目录深度 -ls #以列表形式显示 -exec 执行shell命令,形式: -exec command {} \; find / -name "文件名" #从根目录查找指定文件名的文件,如果不指定目录,则从当前目录查找 find . -name "文件名" #从当前目录查找指定文件名的文件 find -name "文件名" #从当前目录查找指定文件名的文件 find /csl/sh1702 -name "2.txt" #查找指定目录先的文件 find /tools -mtime -3 #查找tools目录下修改时间是3天以内的文件 find /tools -mtime +3 #查找tools目录下修改时间是3天以上的文件 find -mtime -3 -maxdepth 1 -ls find /tools -size 12c #查找长度为12字节的文件 find /var ‐size +10k ‐size ‐100k ‐name '*.log' #在/var目录下,查找10-100k find -size +10k -maxdepth 1 -ls #按文件的所属用户查找 find -maxdepth 1 -user root #删除当前目录及其子目录下的所有后缀为txt的文件,注意{}和\中间有空格,最后有一个; find . -name '*.txt' -exec rm {} \; #只查找当前目录下,权限是700的文件,并以列表形式显示 find -perm 700 -maxdepth 1 -ls sudo find -maxdepth 2 -name '1.txt' -ls
- grep
#grep 是global search regular expression(RE) and print out the line的缩写,意思是全面搜索正则表达式并把行打印出来。是一种强大的文本搜索工具,它能使用正则表达式搜索文本内容,并把匹配的行打印出来。 用法: grep [options] 'pattern' filename -i 不区分大小写 -c 只显示匹配行的数量 -r 递归查找子目录 -l 列出文件内容符合指定的范本样式的文件名称。 -n 显示行号 -w 只匹配单词,不是匹配单词一部分 -E 按正则表达式搜索 --color 以不同颜色显示匹配的关键字 --include '*.py' #仅搜索py文件 --exclude '*.py' #不搜索py文件 # 在1.txt搜索this,要按照完整单词的模式进行匹配,并且显示匹配行 grep -n -w 'this' 1.txt #在当前目录下所有文件中搜索this,并不同颜色显示关键字 sudo grep 'this' * --color 显示匹配行数 sudo grep -c 'this' 1.txt 搜索指定的1.txt,递归查找子目录 grep -r -w -l 'this' --include '1.txt' # 显示当前目录下所有的文件,不显示目录 ls -la | grep -E '^-' | 管道符,他可以将前一个命令的输出作为后一个命令的输入
-
which和whereis
- which 命令名 #查找命令
- whereis 文件名 #只能搜索命令、源文件、二进制文件
-
文件内容统计(wc)
用法: wc [options] [文件列表] -l 统计有多少行 -w 统计有多少单词 $ wc -l /etc/passwd |wc -l #统计passwd有多少用户
-
awk
awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
语法:awk '{pattern + action}' {filenames} cat /etc/passwd |awk -F ':' '{print $1}' #$1显示第一列 -F 指定分割符为':' #列数从左向右: 1,2,3...
-
uniq
报告或删除文件中重复的行。uniq只比较相邻行,所以它一般会和sort命令进行组合使用。
用法:uniq [选项]... [文件]
-c //在每行前加上表示相应行目出现次数的前缀编号
-d //只输出重复的行
-D //只输出重复的行,不过有几行输出几行
-i //忽略大小写
history 历史记录的前10名排序
history |awk '{print $2}' | sort |uniq -c| sort -n -r -k 1 | head -10
- sort
sort将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
sort(选项)(参数)
选项:
-u忽略相同行
-k 按指定列排序
-n 按数值排序
-t 分割符
-r 逆序
#指定passwd文件按第三列 的数值比较,列之间的分隔符为:
cat /etc/passwd | sort -n -t ':' -k 3
#查找你最常用的10条命令
history | awk '{print $2}' | sort | uniq -c | sort -r -n -k 1 | head -n 10
五. 文件权限
1.文件权限修改
-rwxr-xr-x. 1 root root 24 Nov 21 20:26 1.sh
-rw-r--r-x. 1 root root 0 Nov 20 07:37 1.txt
-rw-r--r--. 1 root root 0 Nov 20 07:37 2.txt
#1.数字表示
r 4 100 读
w 2 010 写
x 1 001 执行
- 0 没有权限
rwx 7 可读可写可执行
rwxrw-r-- 764 文件拥有者可读可写可执行 文件所属的组可读可写 其他人可读
#2.符号表示
u 表示文件的拥有者
g 文件所属的组
o 其他人
a 所有的人 all
u+/-/= u=rwx g+x o-r
+ 表示增加权限
- 削减权限
= 赋权限
chmod o-x 32.txt #削减其他用户的可执行权限
chmod a=rwx 32.txt #给所有人赋可读可写可执行权限
chmod o+x,g+w 32.txt
chmod o=x 32.txt
-
chmod
~~~
用法:
chmod 权限 文件名/目录
chmod -R 权限 目录 递归修改目录及其子目录的所有文件的权限#数字表示 chmod 641 1.sh #符号表示 chmod a=rwx 1.sh chmod g-w 1.sh chmod -R o+w tmp #递归修改tmp及其子目录中所有文件的权限 ~~~
-
chown(change owner) 修改文件的所有者
要求:所有者必须在/etc/passwd文件中 chown 用户名 文件名/目录名 chown 用户名:组名 文件名/目录名 chown :组名 文件名/目录名 chown -R 用户名 文件名/目录名 chown csl 1.sh chown csl:csl 1.sh #修改用户和所属组
-
修改用户组 chgrp(change group )
组名必须存在 chgrp 组名 文件名/目录名 chgrp -R 组名 文件名/目录名 chgrp -R csl tmp #递归修改tmp及其子目录下文件所属组 /ect/group 所有的组
-
lsattr/chattr 修改和查看文件只读属性
lsattr 文件名 查看文件的只读属性,使用ls无法查看 chattr +/-i 文件名 给文件增加或去除只读属性 chattr +/-a 文件名 只能追加数据,不能修改或删除 lsattr 3.py #3.py有只读属性 ----i--------e- 3.py sudo chattr -i 3.py #去掉只读属性 sudo chattr +i 3.py #添加只读属性
六. 用户管理
-
用户和组
- 一个用户必须有一个主组
- 一个用户可以有多个组
- 一个组可以有多个用户
- 用户账户的信息存放在/etc/passwd文件中;用户的密码存放到/etc/shadow,该文件只有root可以修改;组账户信息存放到/etc/group中
-
useradd 添加一个用户
用法: useradd [-gud] 用户名 -g 指定主组名或组id,必须已经存在的组 -u 指定用户的id -m 自动建立用户主目录 -d 指定用户的家目录 -s 指定用户登录后使用shell,默认是/bin/bash #创建一个用户没有指定组,则默认创建一个和用户名一样的组,作为用户的主组 所有的用户都在/etc/passwd文件中 luoming:x:501:501::/home/luoming:/bin/bash 用户名 密码 用户id 用户所属组的id 用户的家目录 shell uid gid #Ubuntu 特别提供了一个adduser 命令以交互模式创建用户, sudo adduser csl 创建一个用户没有指定组 ,则默认创建一个和用户名一样的组,作为用户的主组 sudo useradd -u 1202 -g cc -md /text2 -s /use/sbin/nologin test2 nologin 不允许登录 login 允许登录
- 删除用户 userdel
userdel -r 用户名 删除用户同时删除家目录(家目录要和用户名一致才能删除)
#如果用户登录了无法删除,应该先切换用户,然后kill -9 用户进程号,然后在删除
-
修改用户信息 usermod
usermod [option] 用户名 -u 用户id -g 主组id -G 附属组名称 -a 将用户添加到附属组,必须与-G配合使用 -d 用户的家目录 -l 用户登录名 sudo usermod -u 1001 -g 999 -l lkz liwenkai sudo usermod -a -G csl python #将用户python添加到附属组csl中 sudo usermod -l newusername oldusername #修改用户名
-
修改用户密码
用法:
passwd [-lu] 用户名
-l 锁定账户密码
-u 解锁账户密码
root 可以修改其他用户的密码
普通用户只能修改自己的密码 -
su和sudo
Ubuntu默认禁止使用root账户,在系统安装的时候,创建的第一个用户作为管理员(属于sudo组),其权限要低于root,但比普通用户高,普通用户只能处理自己创建的东西,管理员可以安装软件、修改日期、删除用户等。在Ubuntu中一般看到提示符是$,当执行需要root权限操作的时候需要提升权限,我们可以使用sudo暂时提升用户权限
我们也可以使用su切换用户身份,可以切换到root或管理员,完成工作后再切换回来
用法:
sudo 命令 #需要输入用户自己的密码
用法:
su 用户名 #需要输入目标用户的密码
root切换到普通用户不用输入密码
普通用户切换,必须输入密码
因为Ubuntu默认不提供root密码,不能直接由su切换到root,可以先使用sudo来获取root权限
$ sudo su root #临时切换到root
#启用root账户
$ sudo password root #根据提示为root输入密码
#设置sudo提升权限的时候不需要输入密码,需要修改/etc/sudoers文件
sudo vi /etc/sudoers
#也可以使用工具:sudo visudo编辑
# Allow members of group sudo to execute any command
#将sudo组添加NOPASSWD:
%sudo ALL=(ALL:ALL) NOPASSWD: ALL
#然后按esc
:wq
#如果新添加的用户不属于sudo组,是不能使用sudo提升权限的,需要将用户添加到sudo组
#以属于sudo组的用户登录
sudo usermod -a -G sudo 用户名
7.其他命令
- id 查看用户的id和组信息
- groups查看用户的组
- whoami 查看当前的用户是谁
七. 组管理
#添加一个组
groupadd 组名
1702:x:1001:
组名 密码 gid
groupdel 组名 #删除组
groupmod -n 新组名 旧组名
groups 显示用户的组
#所有的组信息都在/etc/group文件中记录
#用户密码在/etc/shadow
linux常见服务
一. 文本编辑器
vi vim是vi增强版
vim需要安装
sudo apt-get -y install vim
vim的三种工作模式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JM6509tQ-1575269020095)(vi.jpg)]
1 编辑模式
命令模式=>编辑模式i a o s
按键 | 作用 |
---|---|
i | 在光标当前位置插入文本 |
a | 光标的下一个位置插入文本 |
A | 当前行的行尾插入文本 |
S | 删除当前行内容,重新输入 |
s | 删除光标当前位置的字符,开始输入 |
o | 在当前的下一行开始一个新行开始输入 |
2 命令模式
编辑模式=>命令模式 请按esc
按键 | 作用 |
---|---|
H | 向左移动一个字符 |
j | 向下移动一行 |
k | 向上移动一行 |
l | 向右移动一个字符 |
( | 移动到块首 |
) | 移动到块尾 |
gg | 移动第一行 |
G | 移动尾行 |
ngg | 移动到第n行 n是一个数字 |
yy | 复制光标当前行 |
nyy | 复制n行 |
p | 黏贴 |
np 100p | 黏贴n次 |
dd | 删除一行 |
ndd | 删除n行 |
u | 撤销上一次的操作 |
shift + 6 | 移动到本行行首 |
shift+ 4 | 移动到本行行尾 |
ctrl + r | 恢复前一个被撤销的操作 |
. | 重复前一个操作 |
3 底行模式
命令模式=》底行模式 按 : 或者 / 或 ?
按键 | 作用 |
---|---|
:w | 保存,不退出 |
:q | 不保存,退出 |
:q! | 强制退出,不保存 |
:wq | 保存并退出 |
:x | 保存并退出 |
:set nu | 显示行号 |
:set nonu | 不显示行号 |
:n | 移动到指定的行 |
/字符串 (回车) | 搜索指定字符串 n找下一个,N找上一个 |
?字符串 | 从下往上找,n往上找,N往下找 |
😒/要找的字符串/要替换的字符串 | 替换光标当前行的找到的第一个字符串 |
😒/要找的字符串/要替换的字符串/g | 替换光标当前行的找到的所有字符串 |
:%s/要找的字符串/要替换的字符串 | 替换每一行第一个找到字符串 |
:%s/要找的字符串/要替换的字符串/g | 全文替换 |
:n1,n2s/要找的字符串/要替换的字符串/g | n1与n2为数字,在第n1与n2行之间查找word1 这个字符串,并将该字符串替换为word2 |
二. 网络管理
-
ifconfig
配置和显示Linux内核中网络接口的网络参数。
#1 显示网络信息 [root@localhost ~]# ifconfig ens33 Link encap:Ethernet HWaddr 00:1C:42:14:7A:DD inet addr:192.168.3.46 Bcast:192.168.3.255 Mask:255.255.255.0 inet6 addr: fe80::21c:42ff:fe14:7add/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:351142 errors:0 dropped:0 overruns:0 frame:0 TX packets:748 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:81649700 (77.8 MiB) TX bytes:94340 (92.1 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) 重要数据说明: inet addr: ipv4地址 inet6: ipv6地址 HWaddr: mac地址 Mask: 子网掩码 UP:代表网卡开启 RUNNING:代表网卡的网线被接上 MULTICAST:支持组播 MTU:最大传输单元 (1500字节)。 #2. ifconfig ens33 查看指定网卡信息 #3.启动关闭网卡 ifconfig ens33 up #启动网卡 ifconfig ens33 down #关闭网卡 # 重启网络 /etc/init.d/network restart
-
ifup和ifdown 启动和关闭网卡
需要配置/etc/network/interfaces,不建议使用这两个命令
-
ip
ip命令用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道,是Linux下较新的功能强大的网络配置工具。
ip [选项] [参数] 选项: -s 显示详细信息 #1.用ip命令显示网络设备的运行状态 ip link list #2 查看网络地址 ip a ip address show ip address show ens33 #查看具体网卡的ip地址 #3 修改接口状态 ip link set enss33 up #开启网卡 ip link set ens33 down #关闭网卡 #4显示路由信息 ip route show
-
ping
ping命令用来测试主机之间网络的连通性
用法: ping [参数] [主机名或IP地址] 参数: -c n 执行指定次数 n的ping命令 -b 测试与网关IP的连通性 #1.查看于百度的联通型 [root@localhost ~]# ping -c 3 www.baidu.com #2.查看于网关的连通性 [root@localhost ~]# ping -b www.baidu.com
-
netstat 查看网络连接状况
netstat -an -n 显示端口 -p 显示进程 -t tcp -u udp -a 显示所有 #1.sudo netstat -nt 显示所有已建立的TCP连接 Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 10.0.112.235:22 10.0.112.252:57530 ESTABLISHED tcp 0 64 192.168.3.46:22 192.168.3.50:58677 ESTABLISHED #2. sudo netstat -nu 显示已建立的UDP连接 #3. sudo netstat -ntpa 显示TCP端口号的使用情况
三. 进程管理
-
ps
Linux中的ps命令是Process Status的缩写。ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。
用法: ps [选项参数] [用户名](可选) 参数: -a -e 显示所有进程 -u 显示指定用户的进程 x :通常与 a 这个参数一起使用,可列出较完整信息。 #1.ps -e|more -20 显示所有进程,每屏20个 #2.ps -u root|more -10 显示指定用户的进程信息 #3. ps -ef|grep kworker 过滤指定信息 #4. ps -aux 列出目前所有的正在内存当中的程序 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 19232 1496 ? Ss 00:23 0:00 /sbin/init root 2 0.0 0.0 0 0 ? S 00:23 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 00:23 0:00 [migration/0] PID 进程号 %CPU cpu的占用率 %MEM 内存的占用率 VSZ 占用虚拟内存的量 RSS 驻留内存的量 TTY 进程的控制终端,?表示不是从终端进入的。 STAT 进程状态(R就绪 S可中断的休眠态 T暂停执行) START 进程开始时间 TIME已经执行的时间 #杀死进程 kill [参数] 进程号 #1. kill 2 杀死指定进程号的进程 #2. kill -9 2 强制杀死指定进程号的进程 #杀死指定进程名的进程 killall -TERM 进程名称
-
top
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。
用法: top 使用q退出 top - 03:32:26 up 3:08, 2 users, load average: 0.03, 0.04, 0.05 Tasks: 100 total, 1 running, 99 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1016160k total, 163660k used, 852500k free, 9412k buffers Swap: 2064380k total, 0k used, 2064380k free, 51072k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 19232 1496 1224 S 0.0 0.1 0:00.95 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:00.05 migration/0 数据说明: 03:32:26 当前时间 up 3:08 系统运行时间,格式为时:分 2 user 当前登录用户数 load average: 0.03, 0.04 0.05 系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。 第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下: total 进程总数 running 正在运行的进程数 sleeping 睡眠的进程数 stopped 停止的进程数 zombie 僵尸进程数 Cpu(s): 最后两行为内存信息。内容如下: Mem: 191272k total 物理内存总量 173656k used 使用的物理内存总量 17616k free 空闲内存总量 22052k buffers 用作内核缓存的内存量 Swap: 192772k total 交换区总量 0k used 使用的交换区总量 192772k free 空闲交换区总量 进程信息区统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。 序号 列名 含义 a PID 进程id b PPID 父进程id c RUSER Real user name d UID 进程所有者的用户id e USER 进程所有者的用户名 f GROUP 进程所有者的组名 g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ? h PR 优先级 i NI nice值。负值表示高优先级,正值表示低优先级 j P 最后使用的CPU,仅在多CPU环境下有意义 k %CPU 上次更新到现在的CPU时间占用百分比 l TIME 进程使用的CPU时间总计,单位秒 m TIME+ 进程使用的CPU时间总计,单位1/100秒 n %MEM 进程使用的物理内存百分比 o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。 q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA r CODE 可执行代码占用的物理内存大小,单位kb s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb t SHR 共享内存大小,单位kb u nFLT 页面错误次数 v nDRT 最后一次写入到现在,被修改过的页面数。 w S 进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程) x COMMAND 命令名/命令行 y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名 z Flags 任务标志,参考 sched.h
-
lsof
lsof命令是一个列出当前系统打开文件的工具。
需要安装命令 yum -y install lsof #1、直接输入命令 lsof 终端下输入lsof就会显示系统打开的所有文件。由于lsof会访问核心内存和各种文件,必须以root用户来执行该命令。
四. 登录状态
-
uname
uname命令用于显示系统信息
#显示linux核心版本号 uname -r #显示系统所有信息 uname -a #显示操作系统版本 uname -v
-
hostname
显示或设置主机名称
#显示主机名 $ hostname #临时设置主机名 $ sudo hostname hello #永久设置主机名 $ vim /etc/hostname #ubuntu的主机名在/etc/hostname文件中,其他liux可能会在/etc/sysconfig/network中
-
whoami
whoami命令用于显示自身用户名称。
-
who
显示当前登录用户
who [-aHbl] -H 显示标题 -a 显示所有信息 -b 显示最近登录时间 -l 显示系统登录时间 $ who -Hl 名称 线路 时间 空闲 进程号 备注 登录 tty1 2018-03-30 14:17 952 id=tty1 $ who -b 系统引导 2018-03-30 14:17 $ who -a 系统引导 2018-03-30 14:17 登录 tty1 2018-03-30 14:17 952 id=tty1 运行级别 5 2018-03-30 14:17 python + tty7 2018-03-30 14:17 02:34 1431 (:0)
-
w
用来查看登录者的信息及他们的行为
w 命令:执行这项指令可得知目前登入系统的用户有那些人,以及他们正在执行的程序。单独执行w 命令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。 语法:w [-fhlsuV][用户名称] linux w 命令参数: -f 开启或关闭显示用户从何处登入系统。 -h 不显示各栏位的标题信息列。 -l 使用详细格式列表,此为预设值。 -s 使用简洁格式列表,不显示用户登入时间,终端机阶段作业和程序所耗费的CPU时间。 -u 忽略执行程序的名称,以及该程序耗费CPU时间的信息。 #1. 常见用法,直接使用 [root@localhost csl]# w 03:44:07 up 3:20, 2 users, load average: 0.07, 0.08, 0.06 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 - 01:41 1:00m 0.13s 0.13s -bash root pts/1 192.168.3.50 02:34 0.00s 0.18s 0.00s w
-
last
显示用户最近登录信息
#显示用户最近登录信息,只显示10行 $ last -10 python tty7 :0 Fri Mar 30 14:17 gone - no logout reboot system boot 4.13.0-37-generi Fri Mar 30 14:17 still running python tty7 :0 Thu Mar 29 20:59 - down (17:17) reboot system boot 4.13.0-37-generi Thu Mar 29 20:49 - 14:17 (17:28) python pts/18 10.0.103.229 Thu Mar 29 14:53 - 18:00 (03:07) python pts/17 10.0.136.238 Thu Mar 29 09:48 - 17:05 (07:17) python pts/17 10.0.136.238 Thu Mar 29 09:36 - 09:48 (00:11) python tty7 :0 Thu Mar 29 09:36 - down (08:24) reboot system boot 4.13.0-37-generi Thu Mar 29 09:36 - 18:00 (08:24) python pts/18 10.0.136.238 Thu Mar 29 09:17 - 09:35 (00:17)
五. linux的启动
1 开机BIOS加载
2 读取MBR引导记录
3 加载linux内核
4 加载init进程,实现系统初始化,init进程是其他所有进程的父进程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cH71QOJq-1575269020098)(runlevel.png)]
5 执行/etc/init/rc-sysinit.conf,设置启动级别
6 启动内核
7 执行不同运行级别脚本程序,视级别的不同执行rc0~rc6下的脚本来完成相应的初始化和启动工作
8 执行/etc/init.d/rc.local ,可以把要自动加载的程序写到这个脚本里
9 用户登录
显示当前运行模式的命令:
runlevel
who -r
##六. 计划任务
在指定的时间做指定的事情,周期性的事情。需要用户有相应的权限,否则无法操作
vim /etc/crontab 打开定时任务
crontab -l 查看定时任务 /etc/crontab 里边的除外
crontab -e 编辑定时任务
分 小时 日 月 周 操作 解释
0-59 0-23 1-31 1-12 0-6
0 0 * * * mysqldum 每天0时备份数据库
0 2 * * 0 sync 每个星期天2点中做文件同步
0 0 15 * * /usr/local/jsgz.py 每个月的15号0时计算工资
0 */1 * * * sh 每个1个小时执行脚本
0 8,12,18 * * * daka.py 每天的8点、12点、18点打卡
0 8-22 * * * study.py 每天8-22在教室学习
crontab -r 清空所有定时任务 只能清除crontab -e产生的定时任务
清除指定定时任务 crontab -e 删除指定行
service cron start/restart/stop #启动、重启、停止定时任务
- 实时查看日志
tail -f 文件名
watch -d -n 秒数 cat /8.txt #带高亮
七. 软件安装
7.1 压缩与解压
windows常见的压缩包:rar zip 7zip iso
linux常见的压缩包: zip gz bz2 tar
-
gz压缩和解压
如果没有gzip,用apt安装 # apt-get install gzip gzip 文件名1 文件名2 #多文件压缩,自动生成对应压缩包 文件名.gz 不能压缩目录 删除原件 gzip -d 压缩包1 压缩包2 #支持批量解压,删除原件
-
bz2压缩和解压
压缩 bzip2 文件名1 文件名2 #支持批量压缩 不支持压缩目录 自动升成 文件名.bz2 解压 bzip2 -d 包名1 包名2 #自动删掉原件
-
tar压缩和解压
tar [option] -c 打包 -x 解包 -v 可视化 -f指定文件名 -t 查看包里的东西 -z 用gzip对包进行压缩 -j 用把bzip2对包进行压缩 tar -cvf 包名 文件名1 文件名2 目录1 #不删除原件,可以打包目录 tar -xvf 包名 #不删除原件 打包并压缩 tar -zcvf 包名 文件名1 文件名2 目录1 tar -jcvf 包名 文件名1 文件名2 目录1 解压 tar -zxvf 包名 tar -jxvf 包名
-
zip压缩和解压
apt-get -y install zip unzip zip 包名 文件名或目录 unzip 包名
7.2 软件的安装
- apt
解决deb复杂的依赖关系
查看软件包信息 sudo apt-cache showsrc 包名
获得源码 sudo apt-get source 包名
安装软件 sudo apt-get install 包名
删除软件 sudo apt-get remove 包名
获取新的软件包列表 sudo apt-get update
升级有可用更新的软件包 sudo apt-get upgrage
安装apache
#1 更新软件列表
sudo apt-get update
#2 安装
sudo apt-get install apache2
#3 启动服务
sudo /etc/init.d/apache2 start # start | restart | stop
或
service apache2 start
# 配置虚拟站点
cd /etc/apache2
#在sites-available目录下配置自己的虚拟站点
cp 000-default.conf www.jxc.com.conf
cd ../sites-enabled
ln -s ../sites-available/www.jxc.com.conf www.jxc.com.conf
#配置网站
cd /var/www/html/jxc
vim index.html
#重启apache服务
sudo /etc/init.d/apache2 restart
#到window下设置域名解析
#C:\Windows\System32\drivers\etc\ 编写hosts文件