Linux和Windows目录结构的组织形式有很大不同,
Windows
划分出了“盘”的概念(C盘、D盘、E盘),已经建立文件系统的硬盘分区被挂载到某一个目录下,用户通过操作目录来实现磁盘读写。
以反斜杠(\)分割目录
Linux
首先是建立一个根(/)文件系统,所有的目录页都是有根目录衍生出来的,
以斜杠(/)分割目录
在Linux底下,所有的文件与目录都是由根目录开始,是目录与文件的源头,然后一个个的分支下来,如同树枝状,因此称为这种目录配置为:目录树。
目录树的特点是什么呢?
- 目录树的起始点是根目录(/,root);
- 每一个目录不止能使用本地的文件系统,也可以使用网络上的文件系统,可以利用NFS服务器挂载特定目录。
- 每一个文件在此目录树中的文件名,包含完整路径都是独一无二的。
/bin: bin是Binary的缩写, 这个目录存放着最经常使用的命令。 /boot: 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。 /dev : dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。 /etc: 这个目录用来存放所有的系统管理所需要的配置文件和子目录。 /home: 用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。 /lib: 这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。 /lost+found: 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。 /media: linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。 /mnt: 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。 /opt: 这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。 /proc: 这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。 这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器: echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all /root: 该目录为系统管理员,也称作超级权限者的用户主目录。 /sbin: s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。 /selinux: 这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。 /srv: 该目录存放一些服务启动之后需要提取的数据。 /sys: 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。 sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。 该文件系统是内核设备树的一个直观反映。 当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。 /tmp: 这个目录是用来存放一些临时文件的。 /usr: 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。 /usr/bin: 系统用户使用的应用程序。 /usr/sbin: 超级用户使用的比较高级的管理程序和系统守护程序。 /usr/src:内核源代码默认的放置目录。 /var: 这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
在linux系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。
/etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。
/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在/bin/ls 目录下的。
值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin 则是给root使用的指令。
/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在/var/log 目录下,另外mail的预设放置也是在这里。
查看命令
ls 查看目录文件
ls -la 查看所有目录(包括隐藏文件)
stat 文件(目录) 查看文件(目录)的详细信息
lsattr 文件 查看文件的隐藏属性
. 当前目录
.. 上一层目录
- 前一个工作目录
~ 当前【用户】所在的家目录
文件夹操作
增
mkdir 文件夹名称 创建文件夹
touch .py文件 创建一个文件
可以使用递归来生成文件夹结构
全是文件夹的 mkdir -p(参数) 文件夹1/文件夹2/文件夹3
文件夹下的文件 mkdir -p(参数) 文件夹4/{文件夹5,文件夹6,文件夹7} (文件夹5、6、7并列)
删
rmdir 文件夹名称(空的)
想要删除非空的文件夹 rm -rf ./*
改
mv 原文件名 新文件名(也有可能是移动)
执行第一个python命令
touch .py文件 创建一个py文件
vi py文件 进入文件中
按下键 i 进入编辑模式
按下键o (在光标所在的下一行进入编辑模式)
按下键 Esc 进入命令模式
输入命令 :wq! 保存退出
输入命令 :q! 退出,不保存
Linux中非常重要的概念--路径,路径用来定位如何找到某个文件。
用户在硬件存储设备中执行的文件建立,写入,读取,修改,转存与控制等操作都是依赖文件系统完成的。文件系统的作用是合理规划硬盘,保证用户正常使用。
Linux系统支持数十种文件系统,常见文件系统如下。
/etc/fstab是用来存放文件系统的静态信息的文件
cat /etc/fstab #检查linux的文件系统
现代操作系统一般属于多用户的操作系统,也就是说,同一台机器可以为多个用户建立账户,一般这些用户都是为普通用户,这些普通用户能同时登录这台计算机,计算机对这些用户分配一定的资源。
普通用户在所分配到的资源内进行各自的操作,相互之间不受影响。但是这些普通用户的权限是有限制的,且用户太多的话,管理就不便,从而引入root用户。
root用户是唯一的,且拥有系统的所有权限。root用户所在的组称为root组。“组”是具有相似权限的多个用户的集合。
Linux系统的特性就是可以满足多个用户,同时工作,因此Linux系统必须具备很好的安全性。
在安装RHEL7时设置的root管理员密码,这个root管理员就是所有UNIX系统中的超级用户,它拥有最高的系统所有权,能够管理系统的各项功能,如添加/删除用户,启动/关闭进程,开启/禁用硬件设备等等。
因此“能力越大,责任越大”,root权限必须很好的掌握,否则一个错误的命令可能会摧毁整个系统。
关于用户的id
在Linux系统中,
用户也有自己的UID身份账号且唯一
系统管理员UID为0 ,系统用户UID为1~999
Linux安装的服务程序都会创建独有的用户负责运行。
普通用户UID从1000开始:由管理员创建
用户组GID
为了方便管理属于同一组的用户,Linux 系统中还引入了用户组的概念。通过使用用户组号码(GID,Group IDentification),我们可以把多个用户加入到同一个组中,从而方便为组中的用户统一规划权限或指定任务。
假设有一个公司中有多个部门,每个部门中又 有很多员工。如果只想让员工访问本部门内的资源,则可以针对部门而非具体的员工来设 置权限。
例如,可以通过对技术部门设置权限,使得只有技术部门的员工可以访问公司的 数据库信息等。Linux管理员在创建用户时,将自动创建一个与其同名的用户组,这个用户组只有该用户一个人
useradd 用户名 #添加用户
passwd 用户名 #设置密码
root用户可以修改其他所有人的密码,且不需要验证
groupadd 组名 # 添加用户组
su命令可以切换用户身份的需求
su - username su命令中间的-号很重要,意味着完全切换到新的用户,即环境变量信息也变更为新用户的信息
一般的顺序是(可以不用遵循)
whoami 先看下当前用户
第一种方法
第二种方法
ctrl + d (logout)退出登录
ssh xiao@10.0.0.10 再输入密码登录
小结
1、超级用户root切换普通用户无需密码
2、普通用户切换超级用户root需要root的密码
3、普通用户权限较小,只能查看基本信息
4、$是普通用户的命令提示符,#是超级用户的命令提示符
userdel 参数 用户名
-r 同时删除用户以及家目录
-f 强制删除用户
在/etc/sudoers
中设置了可执行sudo指令的用户,可以使用其他身份来执行命令,预设身份为root
若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
sudo 选项 参数
-b:在后台执行指令;
-h:显示帮助;
-H:将HOME环境变量设为新身份的HOME环境变量;
-k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;。
-l:列出目前用户可执行与无法执行的指令;
-p:改变询问密码的提示符号;
-s<shell>:执行指定的shell;
-u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份;
-v:延长密码有效期限5分钟;
-V :显示版本信息。
shdo命令用在什么时候?
权限不够,这时候需要sudo ls /root 以root身份去运行,chaoge权利小,root总可以了吧!!
这是由于配置sudo必须编辑/etc/sudoers文件,并且只有root才能修改,咱们可以通过visudo命令直接编辑sudoers文件,使用这个命令还可以检查语法,比直接编辑 vim /etc/sudoers更安全
visudo 编辑sudoers文件 写入 ## Allow root to run any commands anywhere root ALL=(ALL) ALL chaoge ALL=(ALL) ALL #允许chaoge在任何地方,执行任何命令
然后切换用户,就可以使用sudo ls /root/ 的命令了
小结:
想要查看超出权限的命令必须有sudo
必须使用密码登录(当前用户的密码)
时间限制5分钟,超出重新登录
Linux权限的目的是(保护账户的资料)
Linux权限主要依据三种身份来决定:
在Linux中,每个文件都有所属的所有者,和所有组,并且规定了文件的所有者,所有组以及其他人对文件的,可读,可写,可执行等权限。
对于目录的权限来说,可读(r)是读取目录文件列表,可写(w)是表示在目录内新增,修改,删除文件。可执行(x)表示可以进入目录
权限,第一个字母为文件类型,后续9个字母,每3个一组,是三种身份的权限 文件链接数 文件拥有者-属主 文件拥有组-属组 文件大小 最后一次被修改的时间日期 文件名
先分析一下文件的类型
- 一般文件
d 文件夹
l 软连接(快捷方式)
b 块设备,存储媒体文件为主
c 代表键盘,鼠标等设备
r read 可读 4 w write 写入,编辑 2 x executable 可以执行 1
文件权限与数字转化
ls -l /var/log/mysqld.log -rw-r--r-- 1 mysql mysql 6735642 8月 11 14:19 /var/log/mysqld.log 这个就代表mysqld.log文件属主是mysql,属组是mysql,只有mysql用户可以读取编写这个文件,其他人只能读此文件。
每种身份最低是0分,最高是r+w+x 7分
因此三种身份,最高权限是777,最低是000
-rw-rw-r-- 1 root root 0 8月 11 16:41 pyyu.txt 因此可知mysqld.log的权限是 属主是6 r+w(4+2) 属组是4 r(4) 其他人是4 r(4)
id 用户 [root@oldboy_python ~ 16:34:52]#id root uid=0(root) gid=0(root) 组=0(root)
修改属主 chown 要修改的属主 文件
修改数组 chgrp 要修改的属组 文件
chmod 身份 参数 文件
u(user,属主) +(添加)
g(group,属组) -(减去)
o(other,其他人) =(赋值) ?????
a(all,全部)
当前权限 -rw-rw-r-- 1 root root 0 8月 11 16:41 pyyu.txt
方法1
减去属主的写权限
chmod u-w pyyu.txt
查看权限
-r--rw-r-- 1 root root 0 8月 11 16:41 pyyu.txt
方法2
属主添加可读可写可执行权限
chmod 700 pyyu.txt
属主可读可写可执行 属组可读可执行 其他人可读可执行
chmod 755 pyyu.txt
修改文件名,修改文件更改日期 ?????
mv pyyu.txt chaoge.txt
#触摸,修改时间 touch chaoge.txt
软连接也叫做符号链接,常用于安装软件的快捷方式配置,如python,nginx等
ln -s 目标文件(目录) 别名
示例
原始文件
建立软连接
结果
echo $PS1
[\u@\h \W]\$ 这就是linux底下的PS1变量,用于对命令提示符的修改
\u 用户名
@ 是占位符
\h 代表主机名
\W 代表最后一个文件夹路径
\w 当前路径的,绝对路径写法
\t 时间
[ ]
$ 代表用户身份
如何修改PS1变量
PS1="[\u@\h \w \t]\$"
永久生效的方法
vim /etc/profile 相当于合同文件一样,每次开机登录的时候,都会加载这个文件的变量
PS1="[\u@\h \w \t]\$"
修改主机名
hostnamectl set-hostname 主机名 (重新登录会话,主机名即生效)
遇见了yum报错的问题,yum install nginx 的时候,说已经有yum进程存在了,并且pid是 2544
为什么呢?
这是因为你之前用了yum命令,并且没有正确退出,后台已经有yum进程了
如果你不需要他了,弄死他
kill 2544 杀死已经存在的yum进程
如果你执行这个命令反复的失败,进程无法杀死
kill -9 强制杀死进程,一定会杀掉
尽量少用kill -9 ,因为这是流氓命令,会强制祸害到其他进程
咱们在公司中,尽量kill pid 即可
tar命令:用来压缩和解压文件,tar本身不具有压缩功能,他是调用压缩功能实现的
-A或--catenate:新增文件到以存在的备份文件; -B:设置区块大小; -c或--create:建立新的备份文件; -C <目录>:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。 -d:记录文件的差别; -x或--extract或--get:从备份文件中还原文件; -t或--list:列出备份文件的内容; -z或--gzip或--ungzip:通过gzip指令处理备份文件; -Z或--compress或--uncompress:通过compress指令处理备份文件; -f<备份文件>或--file=<备份文件>:指定备份文件; -v或--verbose:显示指令执行过程; -r:添加文件到已经压缩的文件; -u:添加改变了和现有的文件到已经存在的压缩文件; -j:支持bzip2解压文件; -v:显示操作过程; -l:文件系统边界设置; -k:保留原有文件不覆盖; -m:保留文件不被覆盖; -w:确认压缩文件的正确性; -p或--same-permissions:用原来的文件权限还原文件; -P或--absolute-names:文件名使用绝对名称,不移除文件名称前的“/”号; -N <日期格式> 或 --newer=<日期时间>:只将较指定日期更新的文件保存到备份文件里; --exclude=<范本样式>:排除符合范本样式的文件。
常用参数
-x 解压
-c 压缩
-z 以gzip格式压缩,完全可以代替gzip命令(必须注明是 .gz 让别人知道是什么格式)
-v或--verbose:显示指令执行过程;
-f<备份文件>或--file=<备份文件>:指定备份文件;
压缩
tar 参数 压缩后的文件名 要压缩的文件
示例:
tar -cf all.tar *
tar -zcf all.tar.gz *
gzip命令
gzip用来压缩文件,是个使用广泛的压缩程序,被压缩的以".gz"扩展名
gzip可以压缩较大的文件,以60%~70%压缩率来节省磁盘空间
gzip命令-d或--decompress或----uncompress:解开压缩文件; -f或——force:强行压缩文件。 -h或——help:在线帮助; -l或——list:列出压缩文件的相关信息; -L或——license:显示版本与版权信息; -r或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理; -v或——verbose:显示指令执行过程;
tar -zcf all.tar.gz *
实际上执行的是
tar -cf all.tar *
gzip all.tar (对压缩文件再次进行压缩)
gzip -dv all.tar.gz (对all.tar.gz文件解压,解压后得到 all.tar)
gzip -l 文件 (显示压缩文件信息,但并不解压)
解压
tar 参数 压缩后的文件(不管什么格式)
示例:
tar -xf all.tar
tar -xf all.tar.gz
netstat命令是用来打印Linux中网络系统的状态信息(端口信息),可让你得知整个Linux系统的网络情况
示例:
netstat 参数
netstat -tunlp -t或--tcp:显示TCP传输协议的连线状况; -u或--udp:显示UDP传输协议的连线状况; -n或--numeric:直接使用ip地址,而不通过域名服务器; -l或--listening:显示监控中的服务器的Socket; -p或--programs:显示正在使用Socket的程序识别码和程序名称; -a或--all:显示所有连线中的Socket;
netstat -tunlp |grep 80 #过滤出web页面的命令
netstat -tunlp |grep 8000 #过滤出django的端口命令
ps 命令用于查看系统中的进程状态,格式为“ps [参数]”。
ps 命令常用参数 -a 显示所有进程 -u 用户以及其他详细信息 -x 显示没有控制终端的进程
ps -ef|grep nginx #过滤出nginx进程
ps -ef|grep python #过滤出python进程
kill命令用来删除执行中的程序或工作。kill可将指定的信息送至程序。
选项
-a:当处理当前进程时,不限制命令名和进程号的对应关系; -l <信息编号>:若不加<信息编号>选项,则-l参数会列出全部的信息名称; -p:指定kill 命令只打印相关进程的进程号,而不发送任何信号; -s <信息名称或编号>:指定要送出的信息; -u:指定用户。
只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略,下面是常用的信号:
HUP 1 终端断线
INT 2 中断(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 终止
KILL 9 强制终止 (慎用)
CONT 18 继续(与STOP相反, fg/bg命令)
STOP 19 暂停(同 Ctrl + Z)
实例
通常来讲,复杂软件的服务程序会有多个进程协同为用户提供服务,如果逐个去结束这 些进程会比较麻烦,此时可以使用 killall 命令来批量结束某个服务程序带有的全部进程。
例如nginx启动后有2个进程 killall nginx
此项优化为可选项,根据个人情况选择是否调整Linux系统的字符集,字符集就是一套文字符号以及编码。
Linux下常用字符集有:
#查看系统当前字符集
echo $LANG
#检查xshell crt的字符集
#命令修改字符集
export LANG=en_US.utf8
1.修改配置文件/etc/locale.confLANG="zh_CN.UTF-8"
2.更改后查看系统语言变量
locale
乱码核心解决办法
1.系统字符集utf8 2.xshell字符集utf8 3.文件字符集一致zh_CN.UTF-8
linux中文设置:
可以修改变量,临时生效
或者修改写入配置文件
LANG="zh_CN.UTF-8"咱们修改的PATH变量,PS1变量,LANG语言变量,
PATH=""
PS1=""
LANG=""
但是这样重启就失效了,那咱们需要他永久生效,因此需要写入配置文件
那么和用户环境变量有关的配置文件,叫做/etc/profile ,
因此把更改变量的命令,写入到这个文件,以后每次开机,都会读取,达到永久生效的作用export PS1="[\u@\h \w \t]\$"
linux的dns配置文件 /etc/resolv.conf
cat /etc/resolv.conf
命令查看解析dnsnslookup baidu.com
nslookup www.a.shifen.com (百度网址)添加DNS
vim 编辑配置文件 /etc/resolv.conf
# 添加DNS服务器
nameserver 119.29.29.29
nameserver 223.5.5.5
nslookup命令是常用域名查询工具,就是查DNS信息用的命令。 nslookup4有两种工作模式,即“交互模式”和“非交互模式”。在“交互模式”下,用户可以向域名服务器查询各类主机、域名的信息,或者输出域名中的主机列表。而在“非交互模式”下,用户可以针对一个主机或域名仅仅获取特定的名称或所需信息。 进入交互模式,直接输入nslookup命令,不加任何参数,则直接进入交互模式,此时nslookup会连接到默认的域名服务器(即/etc/resolv.conf的第一个dns地址)。或者输入nslookup -nameserver/ip。进入非交互模式,就直接输入nslookup 域名就可以了。
什么是计划任务:
后台运行,到了预定的时间就会自动执行的任务,前提是:事先手动将计划任务设定好。这就用到了crond服务
查看计划任务
tail -f /var/log/cron
添加计划任务
crontab配置文件
在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed
分 时 日 月 周
语法
crontab (选项)(参数)
-e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该用户的计时器设置; -u<用户名称>:指定要设定计时器的用户名称。
写计划任务时,命令必须加上绝对路径,否则会出现这种情况:从日志中看,确实触发了计划任务的执行,但是命令却没有执行成功,比如* * * * * reboot就会出现这种情况,需要将reboot写成/usr/sbin/reboot
调用crontab -e 编辑该用户的计时器 设置
进入编辑模式,并输入命令(每分钟向wenjian.txt插入‘你好啊‘)
结果
crontab任务配置基本格式: * * * * * command 分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天) 命令 第1列表示分钟1~59 每分钟用*或者 */1表示 第2列表示小时1~23(0表示0点) 第3列表示日期1~31 第4列表示月份1~12 第5列标识号星期0~6(0表示星期天) 第6列要运行的命令 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9” 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6” 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
用户
原文:https://www.cnblogs.com/songzijian/p/9796939.html