Linux学习笔记(一)

主要侧重下日常常用的命令,然后是基本的使用,并不涉及完整的功能,用到高级功能还是要去搜索啊….
有些命令是redhat系列专有的…写的有点混乱

用户管理

增加一个用户:useradd 用户名
设置当前用户的密码(后面可跟用户名设置指定用户密码):passwd 密码
删除用户(加-r参数 删除用户目录):userdel 用户
创建用户组:groupadd 组名
修改用户名:usermod -l 新用户名 旧用户名
修改用户的组:usermod -g 要加入的组名 用户名
添加附属组:gpasswd -a userName groupName
锁定用户( -u 解锁账户 -d 无密码登陆):passwd -l 用户名
切换用户,root可省略用户名:su userName

显示当前登陆用户名:whoami
显示用户信息:id name
显示组信息:groups name

用户的密码都加密存在/etc/passwd,格式类似:
root:x:0:0:root:/root:/bin/bash
[用户名]:密码:UID:GID:身份描述:主目录:登录shell

网络操作

查看网络状态 :netstat [-tuln 监听 -an全部]
登出:logout
查看路由:netstat -rn
DNS查询:nslookup
端口探测(远程登陆不安全):telnet ip 端口
路由跟踪:traceroute addrs

下载:wget 下载文件URL
抓包:tcpdump -i eth0 -nnX port 21 ([nn:ip端口显示;X:16进制拆分数据包;port:只查看21端口的)

启动ftp服务:service vsftpd start

下载文件(远程机用户名@IP:路径 本地路径)
scp [-r] name@ip:src locaSrc
上传文件
scp [-r] file name@ip:src

setup命令可以配置一些常见配置,如ip,图形化界面,redhead系列特有
手动配置IP看这里

包管理

已安装的软件都在/var/lib/rpm/中的数据库中
安装命令:rpm -ivh 包全名 (参数:安装、详细信息、显示进度)
其他参数:
-U 升级跟包全名
-e 卸载
-q 查询包信息
-qa 全部的已安装包
-qi 查询详细信息
-qip 未安装包
-ql 安装的文件
-qf 文件属于那个包
-V 校验

上面的是手动安装,碰到依赖很多的包是很烦人的,所以就有了yum:
yum list
yum search 关键字
yum -y install name
yum -y update [xxname]
yum -y remove name
yum clean (清缓存)

源码包一般放在 /usr/local/src/name
安装在 /usr/local/name

权限管理

u-用户 g-组 o-其他
权限(读写执行)对应:r=4 、w=2(不包括删除) 、x=1
权限是对下一层的描述,文件的权限就是对文件中数据的描述,目录权限是对文件的描述
常用:最高权限:777,一般文件:644,可执行文件:755
目录最高权限:w 文件最高权限:x
目录有效权限:0、5、7
命令:chmod [-R]
chmod u+x,g-x,o=rw xxx [a=all]

修改所有者:chown user file
修改用户组 :chgrp group file chown命令也可以:chown user:group 除了用:,.都可以

umask 用来查看默认权限 第一个是特殊权限(写在后面)
文件默认权限是 666 目录是 777;在/etc/profile中定义

PS:配合下面的 sudo 权限,使用:chmod u+s xxName 命令可以让某个可执行文件在运行时拥有 root 权限,在运行完毕后撤销 root 权限

ACL权限

用来解决用户身份不够的问题,可以针对单一用户或组来设置特定的权限,递归时会导致权限溢出,尽量少用
查看分区ACL权限是否开启(挂载了ACL):dumpe2fs -h /dev/sda
显示:Default mount options: user_xattr acl即为可用

dumpe2fs命令是查询指定分区详细文件系统信息的命令
-h:仅显示超级块中信息,而不显示磁盘块组的详细信息

临时开启分区ACL权限:
重新挂载根分区,并挂在加入ACL权限:mount -o remount,acl /
永久开启ACL权限:
修改文件/etc/fstab在默认文件系统后加上acl即可

UUID=24f28fc6-717e-4bcd-a5f7-32b959024e26 / ext4 defaults,acl 0 1

重新挂载:mount -o remount /
查看(带+的是有ACL权限的):getfacl fileName
设定:setfacal -m u:name:rx [-R] file [m:设定,u:给用户设定,g:给组设定]
添加默认ACL权限:setfacal -m d:u:name:rx [-R] file
mask 最大有效权限,设定的权限和它做逻辑与运算得到的结果是实际权限
修改mask:-m m:rx fileName
-x 删除
-b 删除所有

sudo权限

root把只能超级用户执行的权限赋予普通用户执行
sudo的操作对象是系统命令
设置sudo,权限:visudo
实际修改的是 /etc/sudoers

格式:root ALL=(ALL) ALL
root:指定个那个用户赋予sudo,前面加%就是给用户组设置
第一个ALL:被管理的电脑IP(可以在那台电脑运行sudo命令)
第二个ALL:可切换的身份,ALL就是可切换为任意用户,可省略
第三个ALL:可以执行的命令,绝对路径,如:/sbin/;写的越详细越安全,参数也限制,可使用通配符!之类,多个条件以,分隔
sudo -l 查看可以执行的sudo命令

文件特殊权限

不要自己去设置,系统会用到

  • SUID/SetUID

    必须是可执行文件 拥有X权限
    SUID权限是第一个,代号s,数字表示4,其他操作和其他权限(基本权限rwx)类似
    执行此程序会变成文件的所有者

  • SGID/SetGID

    对于文件,要求和SUID一样
    权限显示S是无限的权限,有效权限是小s=S+x
    执行文件时,组身份变成文件的所属组
    赋予:g+s或者2755
    对于目录,必须拥有r和x,在目录中创建文件所属组都是上级目录的组,而不是登陆用户的组

  • SBIT/sticky BIT

    只能是目录,其他人需要有最高权限
    赋予:o+t 或者1755,普通用户只能删自己的文件

  • chattr(不可改变位权限)
    chattr +i (insert) 被锁定,不能任何修改(对于目录就是不能新建和删除)。root也不可以
    chattr +a (append) 不能删,只能增加。增加只能用输出重定向 >> 不能用vi
    查看权限:lsattr -a 查看所有文件和目录 -d 查看目录权限

计划任务crontab

服务是否启动 service crond status
查看当前用户任务列表: crontab -l
服务大部分后面会加个d,如果没有安装,安装命令:
yum install vixie-cron
yum install crontabs
添加任务(当前用户):crontab -e [-e -u:指定给用户添加]/[-l -u:查看某个用户任务]
系统级计划任务在/etc/crontab;用户的配置文件在/var/spool/cron/root或者/var/spool/cron/tabs/root
执行crontab -e实际上是修改/var/spool/cron/root下面对应当前账号的文件。
系统服务crond会每分钟从配置文件刷新定时任务、执行
它还存在白名单和黑名单(都是对用户来说):
crontab .allow 白名单(优先,默认不存在)
crontab .deny 黑名单(默认存在)

格式:* * * * * cmd
分钟 小时 日期 月份 星期 命令
0-59 0-23 1-31 1-12 0-7 *就是每分钟、小时、、、
多个使用逗号分割 ;范围使用-
*/2 每隔 2 分钟;1-59/2 从 1 开始每隔 2 分钟(奇数)
* 就是所有时间都匹配

除了使用crontab -e进行添加,还可以将脚本复制到/etc/cron.{daily.weekly...}中的任意一个文件夹下,分别每天、周、月执行【推荐】
这种方式其实是使用的anacron,它会检测/etc/cron.{daily.weekly...}/etc/crontab中的文件是否在系统关机的过程中错过的定时任务,通过命令添加的是不会进行检测的。

/var/spool/anacron/con.{daily.weekly…}内存着最后一次crontab的时间,如果当前时间到记录的时间差大于指定的差值,证明有命令漏执行,就会被anacron进行随机延迟执行,配置文件在/etc/anacrontab可以设置延迟的最大时间,所以这种方式有个缺点就是不知道什么时候执行

所有定时任务的日志保存在/var/log/cron

定时任务at

总体和crontab差不多,只不过它是只执行一次的,首先也是看服务有没有运行,服务名是atd
同样存在白名单和黑名单:
at.allow 白名单(优先,默认不存在)
at.deny 黑名单 (默认存在)

at now +5 minutes然后输入执行的命令就行了,ctrl + d 退出
atq 查询
at -c id 查看具体内容
atrm 删除

服务管理

runlevel 是系统运行级别
init X 是设置系统级别

查看系统自启服务 RPM包服务 (cent6):chkconfig --list

CentOS7之后 ,chkconfig命令已经被systemctl命令取代

其他命令:ps aux/netstat -tuln -an
既然能查看就能修改:chkconfig (--level 2345) httpd on/off括号内的可省略
添加自启动另一种方法:修改/etc/rc.d/rc.local文件【推荐】
以及图形化界面ntsysv,只能修改5等级

启动服务 server xx start/stop/status/restart(/etc/init.d/xxx start)

对于源码包,启动服务的server (redhat系列)、chkconfig都是没效果的,想要支持server命令需要创建一个软连接:
ln -s xxx /etc/init.d/,也就是说server读取的就是/etc/init.d/目录下的文件(实际目录是/etc/rc.d/init.d/)
想要被 chkconfig 识别:修改 init.d 文件中的软连接的脚本,增加:

第一行定义运行级别、启动顺序、关闭顺序,顺序号只要不冲突即可
第二行是描述信息
# chkconfig:345 86 76
# description:source package apache

然后执行chkconfig --add xxx即可
PS:/etc/rc3.d/下面的文件是运行级别3时 系统开启与关闭分别要执行的服务文件,启动顺序与关闭顺序不能和现有的冲突,k开头的是关闭,s开头是开启

centos系列可以使用图形化界面管理,命令setup;然后再补充下系统运行级别:

0 停机,关机
1 单用户,无网络连接,不运行守护进程,不允许非超级用户登录
2 多用户,无网络连接,不运行守护进程
3 多用户,正常启动系统
4 用户自定义
5 多用户,带图形界面
6 重启

一些常用操作

修改计算机名

查看计算机名:hostname
至于修改关键是/etc/hosts文件和/etc/sysconfig/network文件
然后重启reboot或shutdown -r now(-c取消)

设置默认语言

临时设置:export LANG="zh_CN.UTF-8"
永久生效:修改/etc/sysconfig/i18n
英文是:en_US.UTF-8

设置提示忽略大小写

编辑~/.inputrc(没有的话,就新建一个),在最后加一行:
set completion-ignore-case on

管道符

;连接多个命令,无逻辑 如果报错也还是会继续执行下个命令
1&&2 1正确执行才会执行2
1||2 1如果不正确执行2;如果1正确2不会执行
1|2 1的执行结果是2的参数

目录解释

/ 根目录
/bin 命令保存目录(普通用户就可以读取的命令)
/boot 启动目录,启动相关文件
/dev 设备文件保存目录
/etc 配置文件保存目录
/home 普通用户的家目录
/lib 系统库保存目录
/mnt 系统挂载目录
/media 挂载目录
/root 超级用户的家目录
/tmp 临时目录
/sbin 命令保存目录(超级用户才能使用的目录)
/proc 直接写入内存
/sys
/usr 系统软件资源目录
/usr/bin/ 系统命令(普通用户
/usr/sbin/ 系统命令(超级用户)
/var 系统相关文档内容

配置文件一般都在 etc下用户名

杂项

shell连接:ssh name@ip
创建文件:touch
创建文件夹:mkdir
统计字符:wc [-c 字节 ;-w 单词; -l 行]
分屏显示:more
查询字符串:grep 可配合管道符|筛选使用[-i:忽略大小写;-w:搜索整个词汇],如$grep -i hAL /etc/passwd
不断显示文件的最后几行:tail -f fileName ;比如:tail -3 temp是查看最后三行
查看文件内容:cat
查看硬盘信息:df
创建一个软连接:ln -s [原文件] [目标文件]

喜欢就请我吃包辣条吧!

评论框加载失败,无法访问 Disqus

你可能需要魔法上网~~