Linux和Windows目录结构的组织形式有很大不一样,html
Windowspython
划分出了“盘”的概念(C盘、D盘、E盘),已经创建文件系统的硬盘分区被挂载到某一个目录下,用户经过操做目录来实现磁盘读写。mysql
以反斜杠(\)分割目录linux
Linuxnginx
首先是创建一个根(/)文件系统,全部的目录页都是有根目录衍生出来的,web
以斜杠(/)分割目录sql
在Linux底下,全部的文件与目录都是由根目录开始,是目录与文件的源头,而后一个个的分支下来,如同树枝状,所以称为这种目录配置为:目录树。shell
目录树的特色是什么呢?数据库
- 目录树的起始点是根目录(/,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系统中,有几个目录是比较重要的,平时须要注意不要误删除或者随意更改内部文件。django
/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} (文件夹五、六、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 再输入密码登陆
小结
一、超级用户root切换普通用户无需密码
二、普通用户切换超级用户root须要root的密码
三、普通用户权限较小,只能查看基本信息
四、$是普通用户的命令提示符,#是超级用户的命令提示符
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.conf
LANG="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字段,表示每十分钟执行一次。
用户