未总结 alternatives
文件系统介绍 文件及其功能 系统目录结构
目录 内容 bin 目录全称(binary) 存放二进制命令文件(普通用户可以使用) sbin 目录存放二进制命令文件(root用户可以使用) etc 目录存放软件程序或系统程序配置文件 lib 目录会存放需要调取库文件信息 旧软件程序调取库文件 lib64 目录会存放需要调取库文件信息 新软件程序调取库文件 media 可以存放实例视频或图片 可以用于作为默认挂载点 mnt 可以用于作为默认挂载点 opt 目录存放第三方软件程序数据 等价于Windows program files usr 目录存放第三方软件程序数据 等价于Windows program files root 用户信息存放家目录 root用户的家 ~ home 用户信息存放家目录 普通用户的家~ boot 目录存放系统启动相关的数据 dev 目录会存放一些设备文件信息 var 目录全称(variable),用于存放日志文件的 tmp 目录用于临时存放文件信息 类似于Windows 回收站 proc 目录中会存放系统内核配置信息或服务进程信息 不会占用磁盘空间 只会占用内存空间
系统配置信息 文件 路径 网卡配置 /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-eth0 主机名 /etc/hostname 域名配置文件 /etc/resolv.conf 环境变量 /etc/profile /etc/bashrc ~/.bash_profile ~/.bash_profile 开机自动加载命令文件 /etc/rc.d/rc.local 用户登录信息提示文件 /etc/motd 系统版本信息 /etc/[redhat/centos/os(kali是os)]-release 系统存储硬件信息 /proc/cpuinfo
目录 路径 自动加载运行脚本目录 /etc/profile.d/ 系统安装软件目录(rpm 手动方式 yum 自动方式)
日志信息 日志文件 Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们 需要的信息。
内核及系统日志由系统服务rsyslog统一进行管理,日志格式基本相似
用户日志记录系统用户登录及退出系统的相关信息
程序日志由相应的应用程序进行独立管理。如:web服务,ftp服务 常见日志文件
日志文件 作用 /var/log/secure 登录日志。记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录, 比如 SSH登录, su登录,切换用户, sudo授权,甚至添加用户和修 改用户密码都会记录在这 个日志文件中。新版的ubuntu、debian、kali已经没有这个文件了 , 换成了 /var/log/auth.log /var/log/message 通用的系统活动日志。记录内核消息、系统服务(邮件、cron等)的常规信息、非关键网络错误等。 /var/log/cron 每当cron进程开始一个工作时,就 会将相关信息记录在这个 文件中。 /var/log/syslog 所有系统活动信息(比 messages
更全面)。包含内核、服务、应用等除认证外的所有信息。 /var/log/wtmp 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、 关机事件。同样这个文件也是一个二进制文件,不能直接编辑查看, 而需要使用 last命令来查看 /var/run/utmp 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不 断变化,只记录当前登录用户的信息。同样这个文件不能直接编辑查 看,而要使用 w,who,users等命令来查询 /var/log/btmp 记录所有失败登录日志信息。这个文件是二进制文件,不能直接编辑 查看,使用 lastb命令或 last -f /var/log/btmp 命令可以查看btmp文件。 /var/log/cups 涉及所有打印信息的日志。 /var/log/faillog 包含用户登录失败信息。此外,错误登录命令也会记录在本文件中 /var/log/messages 记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大 多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日 志文件。此外, mail,cron,daemon,kern和auth等内容也记录在var/log/messages /var/log/dmesg 包含内核缓冲信息( kernel ring buffer)。在系统启动时,会在屏幕上显示许多与硬件有关的信息。可以用 dmesg命令直接查看内核自检信息 /var/log/auth.log 包含系统授权信息,包括用户登录和使用的权限机制等。 /var/log/boot.log 包含系统启动时的日志。 /var/log/daemon.log 包含各种系统后台守护进程日志信息。 /var/log/dpkg.log 包括安装或 dpkg命令清除软件包的日志。 /var/log/kern.log 包含内核产生的日志,有助于在定制内核时解决问题。 /var/log/lastlog 记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文 件,不能直接编辑查看,而要使用 lastlog命令查看 /var/log/user.log 记录所有等级用户信息的日志。 /var/log/alternatives.log 更新替代信息都记录在这个文件中。 /var/log/anaconda.log 在安装Linux时,所有安装信息都储存在这个文件中。 /var/log/yum.log 包含使用 yum安装的软件包信息。 /var/log/maillog /var/log/mail.log 包含系统运行电子邮件服务器的日志信息。例如, sendmail日志信息就全部送到这个 文件中
比较重要的几个日志:
登录失败记录:/var/log/btmp #lastb 最后一次登录:/var/log/lastlog #lastlog 登录成功记录: /var/log/wtmp #last 登录日志记录:/var/log/secure 目前登录用户信息:/var/run/utmp #w、who、users 历史命令记录:history 仅清理当前用户:history -c
网卡配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 vim /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static IPADDR=10.0.0.5 NETMASK=255.255.255.0 GATEWAY=10.0.0.254 DNS1=10.0.0.254 DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=27a73818-89f3-4991-9890-2da7924a73c4 DEVICE=ens33 ONBOOT=yes
更改配置需要重启网卡systemctl restart network
或 service network restart
域名解析配置 1 2 3 vim /etc/resolv.conf nameserver 10.0.0.254 cat /cat /etc/hosts
系统管理 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 shutdown -h now shutdown -h 0 shutdown -h now shutdown -h 5 init 0 half shutdown -r 0/now reboot init 6 hostname name hostnamectl set-hostname name
环境变量 和变量 环境变量 别名相关的配置文件信息:/etc/profile
、/etc/bashrc
、~/.bash_profile
、~/.bashrc
、/etc/profile.d/
网安关注应急效应,异常占用资源、进程关闭后再次运行,有可能是 profile 被植入脚本运行命令。/etc/profile
、/etc/bashrc
、两个文件写到任意一个都会受到影响(把某个恶意跑进程的脚本放进去)。局部变量优于全局变量
设置别名 1 2 3 4 5 6 alias eth0='cat /etc/sysconfig/network-scripts/ifcfg-ens33' unalias eth0alias eth0='cat /etc/sysconfig/network-scripts/ifcfg-eth0' >> /etc/profile
其他命令 1 2 3 4 5 6 7 8 9 10 history -c free -h df -h
文件管理 文件类型
①文件属性索引节点 --inode(唯一的)–身份证号 ②文件属性信息和文件权限信息 ③文件硬链接数:查看文件数据信息的多个门(类似于挂载) ④文件属主信息:文件管理者/文件创建者 ⑤文件属组信息/所属用户组信息: 便于进行权限整体分配 ⑥文件数据信息大小尺寸 ⑦文件数据最后修改时间信息(Mtime)
文件类型:告诉系统管理者这个文件是什么类型 f(-) d c b s p l
文件类型 字符 含义 普通文件 - 文本 图片等 目录文件 d 目录 链接字文件 | ==Windows 桌面快捷方式 块设备文件 b 存储数据以供系统存取的接口设备,简单而言就是硬盘。 字符设备文件 c 即串行端口的接口设备,例如键盘、鼠标等等。 套接字文件 s 这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为 [s],最常在 /var/run目录中看到这种文件类型 管道文件 p FIFO也是一种特殊的文件类型,它主要的目的是,解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写。
常用命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 mkdir directionName mkdir -p a/b/c/ ls -l ls -lh ls -a ls -li cd cd / cd .. cd - 带'/' 绝对路径,不带'/' 相对路径 rm -r filename filename rm -f cp /路径/旧文件 /路径/新文件cp -r /路径/目录 /路径/目录mv 文件/目录 新目录/mv a b touch filename cat -n filename cat >>a<<EOF #追加新内容 > hello > EOF cat >a<<EOF #覆盖原始内容 > world > EOF head [-n] tail [-n] tail -f echo "123456" >hxjl.txt echo "123456" >>hxjl.txt echo -e 可以实现空格的不同使用 -e \n -e \t -e \c echo $envname grep [-参数] string filename -i -n -c -v rz -y wget url file fileName -i, --install -v -h -U, --update -e, --erase -q, --query -V, --verify -l 扩展用法 rpm -qlp <RPM文件路径> rpm -q --scripts <包名> rpm -qc <包名> rpm -qd <包名> stat filename -c n1-n2
用户及权限管理 权限 字符 权限 w—4 写权限 r----2 读权限 x----1 执行权限 (脚本文件 先赋权 才能再执行)
用户 字符 含义 u 所属主 uid g 所属组 gid o 其他人 others a 所有人 all
权限命令 1 2 3 4 5 chmod XXX filename chmod +x filename chmod u+x,g+x,o+x filename
磁盘管理 vim使用 普通模式的一些快捷命令:
1 2 3 4 5 6 7 8 9 10 11 yy 复制光标所在行 nyy 数字yy 复制连续多行内容 p 粘贴复制/剪切的内容np 粘贴n次复制/剪切的内容 dd 删除光标所在行ndd 删除n行 D 删除本行内容,但是保留空行 dG 删除光标所在位置后的所有行内容 G 快速移动到最后一行gg 快速移动到第一行 nG 快速移动到第n行
末行模式(命令模式):
1 2 3 4 5 6 7 8 9 实现 文件的内容保存 检索 替换 显示行号 检索 :/要检索的内容 替换 : %s/root/ROOT/g --显示行号 :set nu number ESC→ : q不保存退出 q! 强制不保存退出 wq 保存退出wq! 强制保存退出
正则表达式 linux常用命令 常用命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 1.进入到用户根目录 cd ~ 或 cd 2.查看当前所在目录 pwd 3.进入到hadoop用户根目录 cd ~hadoop4.返回到原来目录 cd -5.返回到上一级目录 cd ..6.查看hadoop用户根目录下的所有文件 ls -la7.在根目录下创建一个hadoop的文件夹 mkdir /hadoop8.在/hadoop目录下创建src和WebRoot两个文件夹 分别创建:mkdir /hadoop/src mkdir /hadoop/WebRoot 同时创建:mkdir /hadoop/{src,WebRoot} 进入到/hadoop目录,在该目录下创建.classpath和README文件 分别创建:touch .classpath touch README 同时创建:touch {.classpath,README} 查看/hadoop目录下面的所有文件 ls -la在/hadoop目录下面创建一个test.txt文件,同时写入内容"this is test" echo "this is test" > test.txt查看一下test.txt的内容 cat test.txtmore test.txt less test.txt 向README文件追加写入"please read me first" echo "please read me first" >> README将test.txt的内容追加到README文件中 cat test.txt >> README拷贝/hadoop目录下的所有文件到/hadoop-bak cp -r /hadoop /hadoop-bak进入到/hadoop-bak目录,将test.txt移动到src目录下,并修改文件名为Student.java mv test.txt src/Student.java在src目录下创建一个struts.xml > struts.xml 删除所有的xml类型的文件 rm -rf *.xml删除/hadoop-bak目录和下面的所有文件 rm -rf /hadoop-bak返回到/hadoop目录,查看一下README文件有多单词,多少个少行 wc -w READMEwc -l README返回到根目录,将/hadoop目录先打包,再用gzip压缩 分步完成:tar -cvf hadoop.tar hadoop gzip hadoop.tar 一步完成:tar -zcvf hadoop.tar.gz hadoop 将其解压缩,再取消打包 分步完成:gzip -d hadoop.tar.gz 或 gunzip hadoop.tar.gz 一步完成:tar -zxvf hadoop.tar.gz 将/hadoop目录先打包,同时用bzip2压缩,并保存到/tmp目录下 tar -jcvf /tmp/hadoop.tar.bz2 hadoop 将/tmp/hadoop.tar.bz2解压到/usr目录下面 tar -jxvf hadoop.tar.bz2 -C /usr/ 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
系统命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 1.查看主机名 hostname 2.修改主机名(重启后无效) hostname hadoop 3.修改主机名(重启后永久生效) vi /ect/sysconfig/network 4.修改IP(重启后无效) ifconfig eth0 192.168.12.22 5.修改IP(重启后永久生效) vi /etc/sysconfig/network-scripts/ifcfg-eth0 6.查看系统信息 uname -auname -r7.查看ID命令 id -uid -g8.日期 date date +%Y-%m-%ddate +%Tdate +%Y-%m-%d" " %T9.日历 cal 2012 10.查看文件信息 file filename 11.挂载硬盘 mount umount 加载windows共享 mount -t cifs //192.168.1.100/tools /mnt 12.查看文件大小 du -hdu -ah13.查看分区 df -h14.ssh ssh hadoop@192.168.1.1 15.关机 shutdown -h now /init 0 shutdown -r now /reboot 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
查看版本信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 1 、查看当前操作系统内核信息uname -a $ uname -a zhang@rocky9:~$ uname -a Linux rocky9 5.14 .0 -284.11 .1 .el9_2.x86_64 #1 SMP PREEMPT_DYNAMIC Tue May 9 17 :09 :15 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux 2 、查看当前操作系统版本信息cat /proc /version $ cat /proc /version Linux version 3.10.0-693.21.1.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Wed Mar 7 19:03:37 UTC 20183、查看当前操作系统发行版信息 cat /etc/issue 或 cat /etc/redhat-release$ cat /etc/issue \S Kernel \r on an \m$ cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core)4、查看cpu相关信息,包括型号、主频、内核信息等 cat /proc /cpuinfo$ cat /proc /cpuinfo processor : 0vendor_id : GenuineIntel cpu family : 6 model : 45model name : Intel® Xeon® CPU E5-2660 0 @ 2.20GHzstepping : 7microcode : 0xffffffffcpu MHz : 2199.998cache size : 20480 KB physical id : 0 siblings : 2core id : 0cpu cores : 2apicid : 0initial apicid : 0fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology eagerfpu pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 popcnt aes xsave avx hypervisor lahf_lm xsaveopt bogomips : 4399.99 clflush size : 64cache_alignment : 64address sizes : 44 bits physical, 48 bits virtualpower management:processor : 1vendor_id : GenuineIntel cpu family : 6 model : 45model name : Intel® Xeon® CPU E5-2660 0 @ 2.20GHzstepping : 7microcode : 0xffffffffcpu MHz : 2199.998cache size : 20480 KB physical id : 0 siblings : 2core id : 1cpu cores : 2apicid : 1initial apicid : 1fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology eagerfpu pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 popcnt aes xsave avx hypervisor lahf_lm xsaveopt bogomips : 4399.99 clflush size : 64cache_alignment : 64address sizes : 44 bits physical, 48 bits virtualpower management:5、列出所有版本信息 lsb_release -a$ lsb_release -a -bash: lsb_release: command not found 出现command not found说明没安装lsb_realease,可以执行命令yum install -y redhat-lsb安装lsb_realease,安装完成后,版本信息如下: $ lsb_release -a LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarchDistributor ID: CentOS Description: CentOS Linux release 7.4.1708 (Core) Release: 7.4.1708Codename: Core
用户和组 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 添加一个tom用户,设置它属于users组,并添加注释信息 分步完成:useradd tom usermod -g users tom usermod -c "hr tom" tom 一步完成:useradd -g users -c "hr tom" tom 设置tom用户的密码 passwd tom 修改tom用户的登陆名为tomcat usermod -l tomcat tom 将tomcat添加到sys和root组中 usermod -G sys,root tomcat 查看tomcat的组信息 groups tomcat 添加一个jerry用户并设置密码 useradd jerry passwd jerry 添加一个名为america的组 groupadd america 将jerry添加到america组中 usermod -g america jerry 将tomcat用户从root组和sys组删除 gpasswd -d tomcat root gpasswd -d tomcat sys 将america组名修改为am groupmod -n am america 12345678910111213141516171819202122232425262728293031323334
权限 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 创建a.txt和b.txt文件,将他们设为其拥有者和所在组可写入,但其他以外的人则不可写入: chmod ug+w,o-w a.txt b.txt创建c.txt文件所有人都可以写和执行 chmod a=wx c.txt 或chmod 666 c.txt将/hadoop目录下的所有文件与子目录皆设为任何人可读取 chmod -R a+r /hadoop将/hadoop目录下的所有文件与子目录的拥有者设为root,用户拥有组为users chown -R root:users /hadoop将当前目录下的所有文件与子目录的用户皆设为hadoop,组设为users chown -R hadoop:users *1234567891011121314
帮助文档 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1.内部命令:echo 查看内部命令帮助:help echo 或者 man echo 2.外部命令:ls 查看外部命令帮助:ls --help 或者 man ls 或者 info ls 3.man 文档的类型(1~9) man 7 man man 5 passwd4.快捷键: ctrl + c:停止进程 ctrl + l :清屏 ctrl + r:搜索历史命令 ctrl + q:退出 5.善于用tab 键 1234567891011121314151617
文件相关命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 1.进入到用户根目录 cd ~ 或者 cd cd ~hadoop回到原来路径 cd -2.查看文件详情 stat a.txt3.移动 mv a.txt /ect/改名 mv b.txt a.txt移动并改名 mv a.txt ../b.txt4拷贝并改名 cp a.txt /etc/b.txt5.vi撤销修改 ctrl + u (undo) 恢复 ctrl + r (redo) 6.名令设置别名(重启后无效) alias ll="ls -l" 取消 unalias ll7.如果想让别名重启后仍然有效需要修改 vi ~/.bashrc 8.添加用户 useradd hadoop passwd hadoop 9创建多个文件 touch a.txt b.txttouch /home/{a.txt,b.txt}10.将一个文件的内容复制到里另一个文件中 cat a.txt > b.txt追加内容 cat a.txt >> b.txt 11.将a.txt 与b.txt设为其拥有者和其所属同一个组者可写入,但其他以外的人则不可写入: chmod ug+w,o-w a.txt b.txtchmod a=wx c.txt12.将当前目录下的所有文件与子目录皆设为任何人可读取: chmod -R a+r *13.将a.txt的用户拥有者设为users ,组的拥有者设为jessie: chown users :jessie a.txt14.将当前目录下的所有文件与子目录的用户的使用者为lamport,组拥有者皆设为users , chown -R lamport:users *15.将所有的java语言程式拷贝至finished子目录中: cp *.java finished16.将目前目录及其子目录下所有扩展名是java的文件列出来。 find -name "*.java" 查找当前目录下扩展名是java 的文件 find -name *.java 17.删除当前目录下扩展名是java的文件 rm -f *.java12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
VIM 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 i a/A o/O r + ?替换 0:文件当前行的开头 $:文件当前行的末尾 G:文件的最后一行开头 1 + G到第一行 9 + G到第九行 = :9 dd:删除一行 3dd:删除3行 yy:复制一行 3yy:复制3行 p:粘贴 u:undo ctrl + r:redo "a剪切板a " b剪切板b"ap粘贴剪切板a的内容 每次进入vi就有行号 vi ~/.vimrc set nu :w a.txt另存为 :w >> a.txt内容追加到a.txt :e!恢复到最初状态 :1,$s/hadoop/root/g 将第一行到追后一行的hadoop替换为root :1,$s/hadoop/root/c 将第一行到追后一行的hadoop替换为root(有提示) 1234567891011121314151617181920212223242526272829303132333435
查找 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 1.查找可执行的命令: which ls 2.查找可执行的命令和帮助的位置: whereis ls 3.查找文件(需要更新库:updatedb) locate hadoop.txt 4.从某个文件夹开始查找 find / -name "hadooop*" find / -name "hadooop*" -ls 5.查找并删除 find / -name "hadooop*" -ok rm {} \; find / -name "hadooop*" -exec rm {} \; 6.查找用户为hadoop的文件 find /usr -user hadoop -ls 7.查找用户为hadoop并且(-a)拥有组为root的文件 find /usr -user hadoop -a -group root -ls 8.查找用户为hadoop或者(-o)拥有组为root并且是文件夹类型的文件 find /usr -user hadoop -o -group root -a -type d 9.查找权限为777的文件 find / -perm -777 -type d -ls 10.显示命令历史 history 11.grep grep hadoop /etc/password 12345678910111213141516171819202122232425262728293031323334
打包与压缩 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 1 .gzip压缩gzip a .txt 2 .解压gunzip a .txt .gz gzip -d a .txt .gz 3 .bzip2压缩bzip2 a 4 .解压bunzip2 a .bz2 bzip2 -d a .bz2 5 .将当前目录的文件打包tar -cvf bak.tar . 将/etc/password追加文件到bak.tar中(r ) tar -rvf bak.tar /etc/password 6 .解压tar -xvf bak.tar 7 .打包并压缩gziptar -zcvf a .tar .gz 8 .解压缩tar -zxvf a .tar .gz 解压到/usr/下 tar -zxvf a .tar .gz -C /usr 9 .查看压缩包内容tar -ztvf a .tar .gz zip/unzip 10 .打包并压缩成bz2tar -jcvf a .tar .bz2 11 .解压bz2tar -jxvf a .tar .bz2 12345678910111213141516171819202122232425262728293031323334353637383940
输入输出重定向 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 1 .新建一个文件touch a .txt > b .txt 2 .错误重定向:2 >find /etc -name zhaoxing.txt 2 > error.txt3 .将正确或错误的信息都输入到log .txt中find /etc -name passwd > /tmp/log .txt 2 >&1 find /etc -name passwd &> /tmp/log .txt4 .追加>>5 .将小写转为大写(输入重定向)tr "a-z" "A-Z" < /etc/passwd6 .自动创建文件cat > log .txt << EXIT> ccc > ddd > EXI 7 .查看/etc下的文件有多少个?ls -l /etc/ | grep '^d' | wc -l 8 .查看/etc下的文件有多少个,并将文件详情输入到result.txt中ls -l /etc/ | grep '^d' | tee result.txt | wc -l 123456789101112131415161718192021222324252627
进程控制 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 1.查看用户最近登录情况 last lastlog 2.查看硬盘使用情况 df 3.查看文件大小 du 4.查看内存使用情况 free 5.查看文件系统 /proc 6.查看日志 ls /var/log/7.查看系统报错日志 tail /var/log/messages8.查看进程 top 9.结束进程 kill 1234kill -9 433312345678910111213141516171819202122232425262728
其他命令 远程文件复制:scp scp 命令用于 Linux 之间复制文件和目录,scp是 secure copy 的缩写是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。
scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。
使用scp命令要确保使用的用户具有可读取远程服务器相应文件的权限,否则scp命令是无法起作用的。
从本地复制到远程命令格式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 复制文件 scp local_file remote_username@remote _ip :remote_folder 或者 scp local_file remote_username@remote _ip :remote_file 或者 scp local_file remote_ip :remote_folder 或者 scp local_file remote_ip :remote_file 复制文件夹 scp -r local_folder remote_username@remote _ip :remote_folder 或者 scp -r local_folder remote_ip :remote_folder 12345678910111213
实例:
1 2 3 4 5 6 7 8 scp /home/ space/music/ 1 .mp3 root@xiaoxiaoming .xyz:/home/ root/others/ music scp /home/ space/music/ 1 .mp3 root@xiaoxiaoming .xyz:/home/ root/others/ music/ 001 .mp3 scp /home/ space/music/ 1 .mp3 xiaoxiaoming.xyz:/home/ root/others/ music scp /home/ space/music/ 1 .mp3 xiaoxiaoming.xyz:/home/ root/others/ music/ 001 .mp3 scp - r /home/ space/music/ root@xiaoxiaoming .xyz:/home/ root/others/ scp - r /home/ space/music/ xiaoxiaoming.xyz:/home/ root/others/ 1234567
从远程复制到本地:
1 2 3 scp root@xiaoxiaoming .xyz:/home/ root/others/ music /home/ space/music/ 1 .mp3 scp - r xiaoxiaoming.xyz:/home/ root/others/ /home/ space/music/ 12
-P 参数来设置命令的端口号:
1 2 3 #scp 命令使用端口号 4588 scp -P 4588 remote@xiaoxiaoming .xyz:/usr/local /sin .sh /home/administrator 12
locate查找 locate命令会去保存文档和目录名称的数据库内,查找文件或目录。
一般情况我们只需要输入locate your_file_name
即可查找指定文件。
参数:
查找passwd文件,输入以下命令:
locate与find的区别: find 是去硬盘找,locate 只在/var/lib/slocate资料库中找。
locate的速度比find快,它并不是真的查找,而是查数据库,一般文件数据库在/var/lib/mlocate/mlocate.db中,所以locate的查找并不是实时的,而是以数据库的更新为准,一般是系统自己维护,也可以手工升级数据库 ,命令为:
which命令 which查找$PATH中设置命令及安装文件目录所在位置
1 2 3 python@ubuntu :/var/lib/mlocate $ which locate /usr/bin/locate 12
echo 常见用法:
1 2 3 4 5 6 7 python@ubuntu :~ $ echo -e "hello\t\t world!" 解析转义字符 hello world! python@ubuntu :~ $ echo -E "hello\t\t world!" 不解析转义字符 hello\t\t world! python@ubuntu :~ $ echo $a 输出环境变量 b 123456
设置或显示环境变量:export 在 shell 中执行程序时,shell 会提供一组环境变量。export 可新增,修改或删除环境变量,供后续执行的程序使用。export 的效力仅限于该次登陆操作。
参数说明 :
1 2 3 # export MYENV=7 # export -p 12
修改主机名&ip地址 显示主机名:hostname
临时修改:hostname xxx
永久修改
对于Ubuntu 系统
对于centos系统
1 2 vim /etc/ sysconfig/network 1
在此配置文件中添加一条HOSTNAME=node1
针对centos7系统,可以使用如下命令
1 2 hostnamectl set-hostname xxx 1
一般需要重开shell甚至重启操作系统才能生效。
修改IP地址
ifconfig eth0 192.168.12.22(重启后无效)
1 2 vim /etc/ sysconfig/network-scripts/i fcfg-eth0 1
mount挂载 mount 挂载外部存储设备到文件系统中
1 2 3 mkdir /mnt/cdrom 创建一个目录,用来挂载mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom/ 12
将设备/dev/cdrom挂载到 挂载点 : /mnt/cdrom中
ssh免密登陆 假如 A 要登陆 B 在A上操作:首先生成密钥对
1 2 ssh-keygen (提示时,直接回车即可) 1
再将A自己的公钥拷贝并追加到B的授权列表文件authorized_keys中
批量添加用户 与用户账号有关的系统文件 完成用户管理的工作本质都是对有关的系统文件进行修改,这些系统文件包括/etc/passwd, /etc/shadow, /etc/group等。
/etc/passwd记录用户的基本属性
它的内容类似下面的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 # cat /etc/ passwd root: x:0 :0 :Superuser:/:daemon: x:1 :1 :System daemons:/etc:bin: x:2 :2 :Owner of system commands:/bin:sys: x:3 :3 :Owner of system files:/usr/ sys:adm: x:4 :4 :System accounting:/usr/ adm:uucp: x:5 :5 :UUCP administrator:/usr/ lib/uucp:auth: x:7 :21 :Authentication administrator:/tcb/ files/auth:cron: x:9 :16 :Cron daemon:/usr/ spool/cron:listen: x:37 :4 :Network daemon:/usr/ net/nls:lp: x:71 :18 :Printer administrator:/usr/ spool/lp:sam: x:200 :50 :Sam san:/home/ sam:/bin/ sh12345678910111213
/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:
1 2 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell 1
用户名:
通常长度不超过8个字符,由大小写字母和/或数字组成,不能有冒号(😃。登录名中不能有冒号(😃,因为冒号在这里是分隔符。
为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。
口令:
本身存放用户口令的加密串,但现在许多Linux 系统都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”。
用户标识号:
是一个整数,系统内部用它来标识用户。一般情况下它与用户名是一一对应的,如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。
通常用户标识号的取值范围是0~65 535。0是超级用户root的标识号,1~99由系统保留,作为管理账号,普通用户的标识号从100开始。
组标识号:
记录用户所属的用户组,对应着/etc/group文件中的一条记录。
注释性描述:
一段任意编写的注释,创建账户时可以通过useradd -c 用户名
的-c
参数指定。
主目录:
用户的起始工作目录,用户在登录到系统之后所处的目录。
登录Shell:
用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。
Shell是用户与Linux系统之间的接口。Linux的Shell有许多种,每种都有不同的特点。常用的有sh(Bourne Shell), csh(C Shell), ksh(Korn Shell), tcsh(TENEX/TOPS-20 type C Shell), bash(Bourne Again Shell)等。
可以通过usermod的-s
参数为用户指定某个Shell。如果useradd不通过-s
参数指定shell,那么系统使用bash为默认的登录Shell,即这个字段的值为/bin/bash。
为用户的登录指定特定的Shell可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就自动退出了系统。不过大部分Linux系统要求只有在系统中登记过的shell才能出现在这个字段中。
伪用户(pseudo users)
这些用户的登陆shell为/usr/sbin/nologin,即不能登录。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。
常见的伪用户如下所示:
1 2 3 4 5 6 7 bin 拥有可执行的用户命令文件 sys 拥有系统文件 adm 拥有帐户文件 uucp UUCP使用 lp lp 或lpd子系统使用 nobody NFS使用 123456
还有许多标准的伪用户,例如:audit, cron, mail, usenet等,它们也都各自为相关的进程和文件所需要。
/etc/shadow
对安全性要求较高的Linux系统都把/etc/passwd文件中的口令字段保存在/etc/shadow文件中,超级用户才拥有该文件读权限。
/etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生
字段是:
1 2 登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志 1
"登录名"是与/etc/passwd文件中的登录名相一致的用户账号
"口令"字段存放的是加密后的用户口令字,长度为13个字符。如果为空,则对应用户没有口令,登录时不需要口令;如果含有不属于集合 { ./0-9A-Za-z }中的字符,则对应的用户不能登录。
"最后一次修改时间"表示的是从某个时刻起,到用户最后一次修改口令时的天数。大部分linux系统的时间起点是1970年1月1日。
"最小时间间隔"指的是两次修改口令之间所需的最小天数。
"最大时间间隔"指的是口令保持有效的最大天数。
"警告时间"字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。
"不活动时间"表示的是用户没有登录活动但账号仍能保持有效的最大天数。
"失效时间"字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。
下面是/etc/shadow的一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # cat /etc/shadow root: Dnakfw28zf38w: 8764 : 0 : 168 : 7 :::daemon: *::0 : 0 ::::bin: *::0 : 0 ::::sys: *::0 : 0 ::::adm: *::0 : 0 ::::uucp: *::0 : 0 ::::nuucp: *::0 : 0 ::::auth: *::0 : 0 ::::cron: *::0 : 0 ::::listen: *::0 : 0 ::::lp: *::0 : 0 ::::sam: EkdiSECLWPdSa: 9740 : 0 : 0 ::::1234567891011121314
/etc/group记录用户组信息
每个用户都属于某个用户组;一个组中可以有多个用户,一个用户也可以属于不同的组。
当一个用户同时是多个组中的成员时,在/etc/passwd文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。
用户要访问属于附加组的文件时,必须首先使用newgrp命令使自己成为所要访问的组中的成员。
用户组的所有信息都存放在/etc/group文件中,字段有:
"组名"是用户组的名称,由字母或数字构成。与/etc/passwd中的登录名一样,组名不应重复。
"口令"字段存放的是用户组加密后的口令字。一般Linux 系统的用户组都没有口令,即这个字段一般为空,或者是*。
"组标识号"与用户标识号类似,也是一个整数,被系统内部用来标识组。
"组内用户列表"是属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。
/etc/group文件的一个例子如下:
1 2 3 4 5 6 7 8 root::0 :root bin::2 :root ,bin sys::3 :root ,uucp adm::4 :root ,adm daemon::5 :root ,daemon lp::7 :root ,lp users::20 :root ,sam 1234567
实操 先编辑一个文本用户文件
每一列按照/etc/passwd
密码文件的格式书写,要注意每个用户的用户名、UID、宿主目录都不可以相同,其中密码栏可以留做空白或输入x号。一个范例文件user.txt内容如下:
1 2 3 4 5 6 7 user001::601 : 100 :user :/home/user001 :/bin/bash user002::602 : 100 :user :/home/user002 :/bin/bash user003::603 : 100 :user :/home/user003 :/bin/bash user004::604 : 100 :user :/home/user004 :/bin/bash user005::605 : 100 :user :/home/user005 :/bin/bash user006::606 : 100 :user :/home/user006 :/bin/bash 123456
执行/usr/sbin/newusers
命令
需要root权限:
可以执行命令 vipw
或 vi /etc/passwd
检查 /etc/passwd
文件是否已经出现这些用户的数据,并且用户的宿主目录是否已经创建。
取消 shadow password
功能
将 /etc/shadow
产生的 shadow
密码解码,然后回写到 /etc/passwd
中,并将/etc/shadow
的shadow
密码栏删掉。这是为了方便下一步的密码转换工作,即先取消 shadow password
功能。
执行/usr/sbin/pwunconv
命令:
编辑每个用户的密码对照文件
格式为:
实例文件 passwd.txt
内容如下:
1 2 3 4 5 6 7 user001 :123456 user002 :123456 user003 :123456 user004 :123456 user005 :123456 user006 :123456 123456
执行 /usr/sbin/chpasswd
命令
需要root权限:
创建用户密码,chpasswd
会将经过 /usr/bin/passwd
命令编码过的密码写入 /etc/passwd
的密码栏。
1 2 # chpasswd < passwd.txt 1
将密码编码为 shadow password
执行命令 /usr/sbin/pwconv
将密码编码为 shadow password
,并将结果写入 /etc/shadow
。
这样就完成了大量用户的创建了,之后您可以到/home下检查这些用户宿主目录的权限设置是否都正确,并登录验证用户密码是否正确。
完整步骤
先准备好用户文件user和密码文件passwd
然后运行:
1 2 3 4 5 newusers < user pwunconv chpasswd < passwd pwconv 1234
crontab的使用 crontab命令是cron table的简写,它是cron的配置文件,也可以叫它作业列表。
相关配置文件如下:
/var/spool/cron/ 目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名
/etc/crontab 这个文件负责调度各种管理和维护任务。
/etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。
还可以把脚本放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly目录中,让它每小时/天/星期、月执行一次。
命令格式:
1 2 3 4 5 6 crontab [ -u user ] { -l | -r | -e } //省略用户表表示操作当前用户的crontab -e (编辑工作表) -l (列出工作表里的命令) -r (删除工作表) 12345
crontab -e 进入当前用户的工作表编辑,是常见的vim界面。每行是一条命令。
crontab的命令构成为 时间+动作,其时间有分、时、日、月、周 五种,操作符有
***** 取值范围内的所有数字
/ 每过多少个数字
- 从X到Z
**,**散列数字
基本格式 :
1 2 3 4 5 6 7 8 9 f1 f2 f3 f4 f5 command分 时 日 月 周 命令 第1 列表示分钟0 ~59 每分钟用*或者 */1 表示 第2 列表示小时0 ~23 (0 表示0 点) 第3 列表示日期1 ~31 第4 列表示月份1 ~12 第5 列标识号星期0 ~6 (0 表示星期天) 第6 列要运行的命令 12345678
其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。command表示要执行的命令。
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,以此类推
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,以此类推
当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,以此类推
当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,以此类推
在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup
1 2 0 6 -12 /3 * 12 * /usr /bin/backup1
周一到周五每天下午 5:00 寄一封信给 alex@domain.name
1 2 0 17 * * 1 -5 mail -s "hi" alex@domain.name < /tmp/maildata1
每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分…执行 echo “haha”
1 2 20 0 -23 /2 * * * echo "haha" 1
示例1:
1 2 3 4 5 6 7 8 9 10 11 12 45 4 1 ,10 ,22 * * /etc/ init .d/ smb restart 每月1 、 10 、 22 日的4 : 45 重启smb10 1 * * 6 ,0 /etc/ init .d/ smb restart 每周六、 周日的1 : 10 重启smb0 ,30 18 - 23 * * * /etc/ init .d/ smb restart 每天18 : 00 至23 : 00 之间每隔30 分钟重启smb0 23 * * 6 /etc/ init .d/ smb restart 每星期六的晚上11 : 00 pm重启smb* */ 1 * * * /etc/ init .d/ smb restart 每一小时重启smb* 23 - 7 /1 * * * / etc/init.d/ smb restart 晚上11 点到早上7 点之间,每隔一小时重启smb1234567891011
示例2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 0 */2 * * * /sbin/service httpd restart 每两个小时重启一次apache 50 7 * * * /sbin/service sshd start 每天7 :50 开启ssh服务 50 22 * * * /sbin/service sshd stop 每天22 :50 关闭ssh服务 0 0 1 ,15 * * fsck /home 每月1 号和15 号检查/home 磁盘 1 * * * * /home/bruce/backup 每小时的第一分执行 /home/bruce/backup这个文件 00 03 * * 1 -5 find /home "*.xxx" -mtime +4 -exec rm {} \; 每周一至周五3 点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4 天前的文件。30 6 */10 * * ls 每月的1 、11 、21 、31 日是的6 :30 执行一次ls命令12345678910111213
环境变量问题:
有时创建了一个crontab,但是这个任务却无法自动执行,而手动执行这个任务却没有问题,这种情况一般是由于在crontab文件中没有配置环境变量引起的。
所以注意如下3点:
1)脚本中涉及文件路径时写全局路径;
2)脚本执行要用到java或其他环境变量时,通过source命令引入环境变量,如:
1 2 3 4 5 6 cat start_cbp.shsource /etc/profileexport RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf/usr/local/jboss-4.0.5/bin/run.sh -c mev & 12345
3)当手动执行脚本OK,但是crontab死活不执行时,可以尝试在crontab中直接引入环境变量解决问题。如:
1 2 0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh1
虚拟机 三种网络模式 桥接
在网络网卡上安装了一个桥接协议,让这块网卡处于混杂模式,可以同时连接多个网络的做法。
桥接下,类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样查在这个交换机当中,所以所有桥接下网卡与网卡都是交换模式的,相互可以访问而不干扰。
Host-only (仅与主机通信)
虚拟机使用VMnet1网卡与主机单独组网,主机对于虚拟机相当于路由器
NAT
虚拟机使用VMnet8网卡与主机单独组网,主机对于虚拟机相当于路由器,VMnet8网卡通过NAT地址转换协议与物理机网卡通信
常见问题 修改静态地址后发现无法ping外网 1 2 3 4 5 6 需要设置网关 route add default gw 192.168.33.1添加nameserver vi /etc/resolv.conf nameserver 192.168.33.1 12345
虚拟机克隆后eth0消失 1 2 3 4 5 6 7 直接修改 /etc/ sysconfig/network-script/i fcfg-eth0 删掉UUID HWADDR 配置静态地址 然后: rm -rf /etc/u dev/rules.d/ 70 -persistent-net.rules 然后 reboot 123456