• [技术干货] Linux文件系统&磁盘管理常用命令汇总
    本帖最后由 沙书记 于 2017-9-13 21:54 编辑1. 查看系统磁盘fdisk -lfdisk -lu 2.对磁盘进行分区fdisk /dev/sda 3. 分区格式化mkfs.ext2 /de/sda1 4. 挂载设备mount /dev/sda1 /目录 5.查看文件系统挂载情况mount 6.查看文件系统使用情况df -h 7. 查看设备的文件系统类型file -s /dev/sda1 8. 查看linux内核信息uname -a 9.创建多级目录mkdir -p /xx1/xx2/xx3 10. linux LVM 逻辑卷管理vgdisplay(查看VG)lvdisplay(查看lv)pvdisplay(查看PV)vgscanpvscanlvremove lv名称vgremovepvremove
  • [技术干货] 如何利用Canonical社区的cloud-init源码编译成RPM包进行安装?
    本帖最后由 达康书记 于 2017-9-13 20:33 编辑经常碰到没有repo源或没有依赖包,无法安装cloud-init包。笔者结合自己的实战经验,给出如何利用Canonical社区的cloud-init源码编译成RPM包的方法,一解大家的苦恼。 1、从Canonical社区下载cloud-init-0.7.9.tar.gz源码包 [code][root@SZV1000153057 home]#wget https://launchpad.net/cloud-init/trunk/0.7.9/+download/cloud-init-0.7.9.tar.gz -O /root/rpmbuild/SOURCES[/code] 2、解压cloud-init [code][root@SZV1000153057 home]# tar -zxvf cloud-init-0.7.9.tar.gz [/code] 3、修改SPEC文件,见底下SPEC样例 [code][root@SZV1000153057 home]# scp -r cloud-init-0.7.9 /root/rpmbuild/BUILD [root@SZV1000153057 home]#cp /root/rpmbuild/BUILD/cloud-init-0.7.9/packages/redhat/cloud-init.spec.in /root/rpmbuild/SPECS/cloud-init-0.7.9.spec[/code] 4、编译cloud-init成rpm [code][root@SZV1000153057 home]# rpmbuild -ba /root/rpmbuild/SPECS/cloud-init-0.7.9.spec [root@SZV1000153057 home]# ls /root/rpmbuild/RPMS/x86_64/ cloud-init-0.7.9-0.el7.centos.x86_64.rpm cloud-init-debuginfo-0.7.9-0.el7.centos.x86_64.rpm[/code] 5、安装cloud-init rpm [code][root@SZV1000153057 home]# yum localinstall /root/rpmbuild/RPMS/x86_64/cloud-init-0.7.9-0.el7.centos.x86_64.rpm[/code] FYI,SPEC样例参考: [code][root@SZV1000153057 home]# cat /root/rpmbuild/SPECS/cloud-init-0.7.9.spec ## template: cheetah %{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")} # See: http://www.zarb.org/~jasonc/macros.php # Or: http://fedoraproject.org/wiki/Packaging:ScriptletSnippets # Or: http://www.rpm.org/max-rpm/ch-rpm-inside.html Name: cloud-init Version: 0.7.9 Release: 0%{?dist} Summary: Cloud instance init scripts Group: System Environment/Base License: GPLv3 URL: http://launchpad.net/cloud-init Source0: https://launchpad.net/cloud-init/trunk/%{version}/+download/cloud-init-%{version}.tar.gz BuildArch: x86_64 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: python-devel BuildRequires: python-setuptools BuildRequires: python-cheetah # System util packages needed Requires: shadow-utils Requires: rsyslog Requires: iproute Requires: e2fsprogs Requires: net-tools Requires: procps Requires: shadow-utils Requires: sudo >= 1.7.2p2-3 # Install pypi ´dynamic´ requirements #for $r in $requires #Requires: ${r} #end for # Custom patches #set $size = 0 #for $p in $patches #Patch${size}: $p #set $size += 1 #end for #if $sysvinit #Requires(post): chkconfig #Requires(postun): initscripts #Requires(preun): chkconfig #Requires(preun): initscripts #end if #if $systemd BuildRequires: systemd-units Requires(post): systemd-units Requires(postun): systemd-units Requires(preun): systemd-units #end if %description Cloud-init is a set of init scripts for cloud instances. Cloud instances need special scripts to run during initialization to retrieve and install ssh keys and to let the user run various scripts. %prep %setup -q -n %{name}-%{version} # Custom patches activation #set $size = 0 #for $p in $patches #%patch${size} -p1 #set $size += 1 #end for %build %{__python} setup.py build %install %{__python} setup.py install -O1 \ --skip-build --root $RPM_BUILD_ROOT \ --init-system=systemd # Note that /etc/rsyslog.d didn´t exist by default until F15. # el6 request: https://bugzilla.redhat.com/show_bug.cgi?id=740420 mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/rsyslog.d cp -p tools/21-cloudinit.conf \ $RPM_BUILD_ROOT/%{_sysconfdir}/rsyslog.d/21-cloudinit.conf # Remove the tests rm -rf $RPM_BUILD_ROOT%{python_sitelib}/tests # Required dirs... mkdir -p $RPM_BUILD_ROOT/%{_sharedstatedir}/cloud mkdir -p $RPM_BUILD_ROOT/%{_libexecdir}/%{name} #if $systemd mkdir -p $RPM_BUILD_ROOT/%{_unitdir} cp -p systemd/* $RPM_BUILD_ROOT/%{_unitdir} #end if %clean rm -rf $RPM_BUILD_ROOT %post #if $systemd if [ $1 -eq 1 ] then /bin/systemctl enable cloud-config.service >/dev/null 2>&1 || : /bin/systemctl enable cloud-final.service >/dev/null 2>&1 || : /bin/systemctl enable cloud-init.service >/dev/null 2>&1 || : /bin/systemctl enable cloud-init-local.service >/dev/null 2>&1 || : fi #end if #if $sysvinit #/sbin/chkconfig --add %{_initrddir}/cloud-init-local #/sbin/chkconfig --add %{_initrddir}/cloud-init #/sbin/chkconfig --add %{_initrddir}/cloud-config #/sbin/chkconfig --add %{_initrddir}/cloud-final #end if %preun #if $sysvinit #if [ $1 -eq 0 ] #then # /sbin/service cloud-init stop >/dev/null 2>&1 || : # /sbin/chkconfig --del cloud-init || : # /sbin/service cloud-init-local stop >/dev/null 2>&1 || : # /sbin/chkconfig --del cloud-init-local || : # /sbin/service cloud-config stop >/dev/null 2>&1 || : # /sbin/chkconfig --del cloud-config || : # /sbin/service cloud-final stop >/dev/null 2>&1 || : # /sbin/chkconfig --del cloud-final || : #fi #end if #if $systemd if [ $1 -eq 0 ] then /bin/systemctl --no-reload disable cloud-config.service >/dev/null 2>&1 || : /bin/systemctl --no-reload disable cloud-final.service >/dev/null 2>&1 || : /bin/systemctl --no-reload disable cloud-init.service >/dev/null 2>&1 || : /bin/systemctl --no-reload disable cloud-init-local.service >/dev/null 2>&1 || : fi #end if %postun #if $systemd /bin/systemctl daemon-reload >/dev/null 2>&1 || : #end if %files /lib/udev/rules.d/66-azure-ephemeral.rules #if $sysvinit #%attr(0755, root, root) %{_initddir}/cloud-config #%attr(0755, root, root) %{_initddir}/cloud-final #%attr(0755, root, root) %{_initddir}/cloud-init-local #%attr(0755, root, root) %{_initddir}/cloud-init #end if #if $systemd /usr/lib/systemd/system-generators/cloud-init-generator %{_unitdir}/cloud-* %{_unitdir}/cloud-* #end if %{_sysconfdir}/NetworkManager/dispatcher.d/hook-network-manager %{_sysconfdir}/dhcp/dhclient-exit-hooks.d/hook-dhclient # Program binaries %{_bindir}/cloud-init* %{_libexecdir}/%{name}/uncloud-init %{_libexecdir}/%{name}/write-ssh-key-fingerprints # Docs %doc LICENSE ChangeLog TODO.rst requirements.txt %doc %{_defaultdocdir}/cloud-init/* # Configs %config(noreplace) %{_sysconfdir}/cloud/cloud.cfg %dir %{_sysconfdir}/cloud/cloud.cfg.d %config(noreplace) %{_sysconfdir}/cloud/cloud.cfg.d/*.cfg %config(noreplace) %{_sysconfdir}/cloud/cloud.cfg.d/README %dir %{_sysconfdir}/cloud/templates %config(noreplace) %{_sysconfdir}/cloud/templates/* %config(noreplace) %{_sysconfdir}/rsyslog.d/21-cloudinit.conf %{_libexecdir}/%{name} %dir %{_sharedstatedir}/cloud # Python code is here... %{python_sitelib}/*[/code]
  • [技术干货] 如何手动安全的重置华为云Linux弹性云服务器的密码
    本帖最后由 达康书记 于 2017-12-8 17:05 编辑公有云上云windows服务器登陆密码丢失了如何重置呢?公有云上讲求的是安全,安全,安全!大家不可能都像阿里云那样内置一个aliyun-service在虚拟机里完成各种注入,重置和分区等等的事后操作,这个之前一直被大家质疑和诟病,如你住个酒店,屋子里一直有个监控摄像头一样。 云大厂商亚马逊利用Ec2离线卸卷挂卷方式自助完成的,不过这个在华为云上暂时无法借鉴: [code]http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/WindowsGuide/ResettingAdminPassword_EC2Config.html[/code] 云大厂商微软云利用组策略方式离线卸卷挂卷方式自助完成的,这个也可以很好的在华为云上使用,具体参考: [code]https://docs.microsoft.com/en-us/azure/virtual-machines/windows/reset-local-password-without-agent[/code] 笔者结合多年的经验另辟蹊径,给出一个更加牛B更简单的自助方式重置华为云Linux弹性云服务器的密码,抛砖引玉,请轻拍。 1、关闭原云服务器,卸载其系统盘,并将系统盘挂载到临时云服务器。 [*]原弹性云服务器关机,进入详情页,并选择“云硬盘”页签。 说明:原弹性云服务器关机时,请勿执行强制关机操作,否则可能引起重置密码操作失败。 [*]单击系统盘所在行的“卸载”,卸载该系统盘。 [*]展开临时云服务器的详情页,并选择“云硬盘”页签。 [*]单击“挂载磁盘”,在“挂载磁盘”对话框中,选择2中卸载的系统盘,将其挂载到临时云服务器上。 [*]远程登录临时云服务器,并重置密码。 [*]在临时云服务器的“操作”列下,单击“远程登录”。 [*]执行以下命令,查看原云服务器上卸载的系统盘在临时云服务器上根分区位置(根分区在第一分区)。 [code][root@SZV1000153057 ~]# fdisk -l ....... Disk /dev/xvdb: 42.9 GB, 42949672960 bytes, 83886080 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x000a7cfb Device Boot Start End Blocks Id System /dev/xvdb1 * 2048 75497471 37747712 83 Linux /dev/xvdb2 75497472 83886079 4194304 82 Linux swap / Solaris ......[/code] 2、将上述磁盘的根分区挂载到/mnt目录下进行秘密修改。 [*]挂载磁盘分区 [code][root@SZV1000153057 ~]#mount /dev/xvdb1 /mnt/[/code] [*]使用python对密码:1234qwerP生成一个加密文,随机加盐sha-512单向hash如下 [code][root@SZV1000153057 ~]# python -c "import crypt, getpass;print crypt.crypt('1234qwerP')" $6$TWIuNPv3VartQ1Kh$onI0rkrg7V.Ya.rlrCbBNK0f.LiUk0xQ1anntlUv9TW6/CmncIWxYuKT0hRR0F.MmzC5tYKjNUhPXebyF511W1[/code] [*]将密文改到/mnt/etc/shadow, 修改前如下 [code][root@SZV1000153057 ~]# cat /mnt/etc/shadow | grep root root:$6$MYUPZkL4$/Qs1/7Cqtzn7Fjg5TdescgE9ztQKFZINa6hIzruKGVUE/JSty8/btMzl1H2sEQkd.a5fOU.XyU2HWJWTs/JSE0:17423:0:99999:7:::[/code] 更新修改后如下(第一个和第二个冒号之间): [code][root@SZV1000153057 ~]# cat /etc/shadow | grep root root:$6$TWIuNPv3VartQ1Kh$onI0rkrg7V.Ya.rlrCbBNK0f.LiUk0xQ1anntlUv9TW6/CmncIWxYuKT0hRR0F.MmzC5tYKjNUhPXebyF511W1:17423:0:99999:7:::[/code] [*]卸载挂载分区 [code][root@SZV1000153057 ~]#umount /mnt/[/code] 3、关闭临时云服务器,卸载原云服务器的系统盘,并将其重新挂载回原云服务器后执行重启操作。 [*]临时云服务器关机,并进入详情页,选择“云硬盘”页签。 [*]单击“卸载”,卸载2中临时挂载的数据盘。 [*]展开原Linux云服务器的详情页,选择“云硬盘”页签。 [*]单击“挂载磁盘”,在“挂载磁盘”对话框中,选择2中卸载的数据盘,并设置挂载点为“/dev/sda”。 [*]重启原云服务器。
  • [技术干货] 华为云Linux服务器防火墙iptables使用知多少?
    Iptable的基本概念与结构 iptables组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。 iptables的结构:iptables -> Tables -> Chains -> Rules. 简单地讲,tables由chains组成,而chains又由rules组成,如下图所示。 1437 Iptables的命令详解 [code]iptables [-t table] command [match] [target] iptables [-t table] command [chain] [rules] [-j target][/code] 表(table) [-t table] 选项允许使用标准表之外的任何表。表是包含仅处理特定类型信息包的规则和链的信息包过滤表。 IPTABLES 规则(Rules) Rules包括一个条件和一个目标(target),如果满足条件,就执行目标(target)中的规则或者特定值;如果不满足条件,就判断下一条Rules。 目标值(TargetValues): ACCEPT – 允许防火墙接收数据包 REJECT – 防火墙拒绝数据包,与”DROP”相比会有回应产生 DROP – 防火墙丢弃包 REDIRECT – 防火墙将数据包重定向 SNAT – 源地址翻译,将内网地址转换成公网的合法地址 DNAT – 目标地址翻译,多用在内部服务器的发布 MASQUERADE – 地址伪装,用在外网口地址经常发生变动(如pppoe拨号上网)的情况下 QUEUE – 防火墙将数据包移交到用户空间 RETURN – 防火墙停止执行当前链中的后续Rules,并返回到调用链(the calling chain)中。 IPTABLES命令参数 [code]参数 功能 样例及说明 -A, --append 新增规则(追加方式)到某个规则链中,该规则将会成为规则链中的最后一条规则。 iptables -A INPUT ... -D, --delete 从某个规则链中删除一条规则,可以输入完整规则,或直接指定规则编号加以删除。 iptables -D INPUT 1 删除INPUT链中的第一条规则 -I, --insert **一条规则 iptables -I INPUT 1 --dport 80 -j ACCEPT **一条规则,原本该位置(位置1)上的规则将会往后移动一个顺位,变成第二条规则 -R, --replace 取代现行规则,规则被取代后并不会改变顺序 iptables -R INPUT 1 -s 192.168.0.1 -j DROP -L, --list 列出某规则链中的所有规则。 iptables -L INPUT -S, --list-rules 直接列出某规则链中的规则。 iptables -S INPUT -F, --flush 删除某规则链中的所有规则。 iptables -F INPUT -Z, --zero 将封包计数器归零。封包计数器是用来计算同一封包出现次数,是过滤阻断式攻击不可或缺的工具。 iptables -Z INPUT -N, --new-chain 定义新的规则链。 iptables -N allowed 定义一条名为“allowed”的新链 -X, --delete-chain 删除某个规则链。 iptables -X allowed 删除一条名为“allowed”的新链 -P, --policy 定义过滤政策。也就是未符合过滤条件之封包,预设的处理方式。 iptables -P INPUT DROP -E, --rename-chain 修改某自订规则链的名称。 iptables -E allowed disallowed 将名为“allowed”的链更名为”disallowed” -h 显示帮助信息 iptables -h -p, --protocol 比对通讯协议类型是否相符,可以使用 ! 运算子进行反向比对,例如:-p ! tcp iptables -A INPUT -p tcp (指定协议) -p all 所有协议, -p !tcp 去除tcp外的所有协议。 -s, --src,--source 用来比对封包的来源 IP,可以比对单机或网络,比对网络时请用数字来表示屏蔽,比对 IP 时可以使用 ! 运算子进行反向比对 iptables -A INPUT -s 192.168.1.1 匹配源地址192.168.1.1 -d, --dst,--destination 用来比对封包的目的地 IP,设定方式同上。 iptables -A INPUT -d 192.168.1.1 -j, --jump 用来指定要进行的处理动作 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080 -g, --goto 用于指明包需要进行一个用户自定义链的处理。当使用--jump转到某个链中时,return不会继续后面的链中处理,而是返回至调用--jump的链中。而--goto与之不同。 iptables -N TESTA iptables -A FORWARD -s 192.168.1.1 -j TESTA 上面的例子中-j(jump)相当于调用,自定义链结束后返回 iptables -N TESTB iptables -A FORWARD -s 192.168.1.1 -j TESTB -g(goto)一去不复返 -i, --in-interface 用来比对封包是从哪个网卡进入,可以使用通配字符 + 来做大范围比对 iptables -A INPUT -i eth0 -i eth+ 表示所有的 ethernet 网卡 -i ! eth0 表示eth0以外的所有ethernet网卡 -o, --out-interface 用来比对封包要从哪个网卡送出,设定方式同上。 iptables -A FORWARD -o eth0 -f, --fragment 这意味着在分片的包中,规则只询问第二及以后的片。自那以后由于无法判断这种把包的源端口或目标端口(或者是ICMP类型的),这类包将不能匹配任何指定对他们进行匹配的规则。如果"!"说明用在了"-f"标志之前,表示相反的意思。 iptables -A FORWARD -f -s 192.168.1.0/24 -d 192.168.2.100 -j ACCEPT 指定第二个及其以后的 ip 碎片的数据流向 -c, --set-counters 在创建或更改规则时设置计数器 --set-counters 20 4000,意思是让内核把包计数器设为20,把字节计数器设为4000。 -v, --verbose 在查看规则时显示详细信息 iptables -t filter -L -n -v --line-number -n, --numeric 在查看规则时以数字形式显示 iptables -t filter -L -n -v --line-number -x, --exact 扩展数字,显示包和字节计数器的精确值,代替用K,M,G表示的约数。这个选项仅能用于 -L 命令。 iptables -t filter -L -n –v -x --line-number --sport, --source-port 用来比对封包的来源端口号,可以比对单一端口,或是一个范围 :--sport 22:80,表示从 22 到 80 端口之间都算是符合件 --dport, -destination-port 用来比对封包的目的端口号,设定方式同上。 iptables -A INPUT -p tcp --dport 22 --tcp-flags 比对 TCP 封包的状态旗号,参数分为两个部分,第一个部分列举出想比对的旗号第二部分则列举前述旗号中哪些有被设,未被列举的旗号必须是空的。TCP 状态旗号包括:SYN(同步)、ACK(应答)、 FIN(结束)、RST(重设)、URG(紧急)PSH(***推送)等均可使用于参数中,除此之外还可以使用关键词 ALL 和 NONE 进行比对。比对旗号时,可以使用 ! 运算子行反向比对。 iptables -p tcp --tcp-flags SYN,FIN,ACK SYN --syn 用来比对是否为要求联机之 TCP 封包 iptables -p tcp --syn -m multiport --source-port 用来比对不连续的多个来源埠号,一次最多可以比对 15 个埠,可以使用 ! 运算进行反向比对。 iptables -A INPUT -p tcp -m multiport --source-port 22,53,80,110 -m multiport --destination-port 用来比对不连续的多个目的地埠号,设定方式同上。 iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80,110 -m multiport --port 这个参数比较特殊,用来比对来源埠号和目的埠号相同的封包,设定方式同上。 iptables -A INPUT -p tcp -m multiport --port 22,53,80,110 注意:在本范例中,如果来源端口号为 80目的地埠号为 110,这种封包并不算符合条件。 --icmp-type 用来比对 ICMP 的类型编号,可以使用代码或数字编号来进行比对。 iptables -A INPUT -p icmp --icmp-type 8 可以使用iptables -p icmp --help 来查看有哪些代码可用。 -m limit --limit 用来比对某段时间内封包的平均流量 iptables -A INPUT -m limit --limit 3/hour 表示每小时平均流量是否超过一次 3 个封包。除了每小时平均次外,也可以每秒钟、每分钟或每天平均一次,默认值为每小时平均一次,参数如后: /second、 /minute、/day。除了进行封数量的比对外,设定这个参数也会在条件达成时,暂停封包的比对动作,以避免因骇客使用洪水攻击法,导致服务被阻断。 --limit-burst 用来比对瞬间大量封包的数量 iptables -A INPUT -m limit --limit-burst 5 比对一次同时涌入的封包是否超过 5 个(这是默认值),超过此上限的封将被直接丢弃。 -m mac --mac-source 用来比对封包来源网络接口的硬件地址,这个参数不能用在 OUTPUT 和 Postrouting规则链上,这是因为封包要送出到网后,才能由网卡驱动程序透过 ARP 通讯协议查出目的地的 MAC 地址,所以 iptables 在进行封包比对时,并不知道封包会送到哪个网络接口去。 iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01 --mark 用来比对封包是否被表示某个号码,当封包被比对成功时,我们可以透过 MARK 处理动作,将该封包标示一个号码,号码最不可以超过 4294967296。 iptables -t mangle -A INPUT -m mark --mark 1 -m owner --uid-owner 用来比对来自本机的封包,是否为某特定使用者所产生的,这样可以避免服务器使用 root 或其它身分将敏感数据传送出,可以降低系统被骇的损失。可惜这个功能无法比对出来自其它主机的封包。 iptables -A OUTPUT -m owner --uid-owner 500 -m owner --gid-owner 用来比对来自本机的封包,是否为某特定使用者群组所产生的,使用时机同上。 iptables -A OUTPUT -m owner --gid-owner 0 -m owner --sid-owner 用来比对来自本机的封包,是否为某特定联机(Session ID)的响应封包,使用时机同上。 iptables -A OUTPUT -m owner --sid-owner 100 -m state --state 用来比对联机状态,联机状态共有四种:INVALID、ESTABLISHED、NEW 和 RELATED。 INVALID 表示该封包的联机编号(Session ID)无法辨识或编号不正确。 ESTABLISHED 表示该封包属于某个已经建立的联机。 NEW 表示该封包想要起始一个联机(重设联机或将联机重导向)。 RELATED 表示该封包是属于某个已经建立的联机,所建立的新联机。例如:FTP-DATA 联机必定是源自某个 FTP 联机。 iptables -A INPUT -m state --state RELATED,ESTABLISHED --line-numbers 在列出规则的时候加上行号 iptables -t filter -L -n -v --line-number --modprobe 添加规则时加载必需的模块 iptables -t nat -A PREROUTING -d 192.168.1.44 -p tcp --dport 21 -i eth0 -j DNAT --to 192.168.2.100 --modprobe=ip_nat_ftp[/code]
  • [技术干货] 华为云Linux服务器时经常使用常用命令汇总
    大家使用华为云Linux服务器时经常使用常用命令汇总,高手请飘过,拍砖请绕道。 ls   显示文件或目录 -l 列出文件详细信息l(list) -a 列出当前目录下所有文件及目录,包括隐藏的a(all) mkdir 创建目录 -p 创建目录,若无父目录,则创建p(parent) cd 切换目录 touch 创建空文件 echo 创建带有内容的文件。 cat 查看文件内容 cp 拷贝 mv 移动或重命名 rm 删除文件 -r 递归删除,可删除子目录及文件 -f 强制删除 find 在文件系统中搜索某文件 wc 统计文本中行数、字数、字符数 grep 在文本文件中查找某个字符串 rmdir 删除空目录 tree 树形结构显示目录,需要安装tree包 pwd 显示当前目录 ln 创建链接文件 more、less 分页显示文本文件内容 head、tail 显示文件头、尾内容 ctrl+alt+F1 命令行全屏模式 系统管理命令 stat 显示指定文件的详细信息,比ls更详细 who 显示在线登陆用户 whoami 显示当前操作用户 hostname 显示主机名 uname 显示系统信息 top 动态显示当前耗费资源最多进程信息 ps 显示瞬间进程状态 ps -aux du 查看目录大小 du -h /home带有单位显示目录信息 df 查看磁盘大小 df -h 带有单位显示磁盘信息 ifconfig 查看网络情况 ping 测试网络连通 netstat 显示网络状态信息 man 命令不会用了,找男人 如:man ls clear 清屏 alias 对命令重命名 如:alias showmeit="ps -aux" ,另外解除使用unaliax showmeit kill 杀死进程,可以先用ps 或 top命令查看进程的id,然后再用kill命令杀死进程。 打包压缩相关命令 gzip: bzip2: tar: 打包压缩 -c 归档文件 -x 压缩文件 -z gzip压缩文件 -j bzip2压缩文件 -v 显示压缩或解压缩过程 v(view) -f 使用档名 例: tar -cvf /home/**.tar /home/** 只打包,不压缩 tar -zcvf /home/**.tar.gz /home/** 打包,并用gzip压缩 tar -jcvf /home/**.tar.bz2 /home/** 打包,并用bzip2压缩 当然,如果想解压缩,就直接替换上面的命令 tar -cvf / tar -zcvf / tar -jcvf 中的“c” 换成“x” 就可以了。 关机/重启机器 shutdown -r 关机重启 -h 关机不重启 now 立刻关机 halt 关机 reboot 重启 Linux管道 将一个命令的标准输出作为另一个命令的标准输入。也就是把几个命令组合起来使用,后一个命令除以前一个命令的结果。 例:grep -r "close" /home/* | more 在home目录下所有文件中查找,包括close的文件,并分页输出。 Linux软件包管理 dpkg (Debian Package)管理工具,软件包名以.deb后缀。这种方法适合系统不能联网的情况下。 比如安装tree命令的安装包,先将tree.deb传到Linux系统中。再使用如下命令安装。 sudo dpkg -i tree_1.5.3-1_i386.deb 安装软件 sudo dpkg -r tree 卸载软件 注:将tree.deb传到Linux系统中,有多种方式。VMwareTool,使用挂载方式;使用winSCP工具等; APT(Advanced Packaging Tool)高级软件工具。这种方法适合系统能够连接互联网的情况。 依然以tree为例 sudo apt-get install tree 安装tree sudo apt-get remove tree 卸载tree sudo apt-get update 更新软件 sudo apt-get upgrade 将.rpm文件转为.deb文件 .rpm为RedHat使用的软件格式。在Ubuntu下不能直接使用,所以需要转换一下。 sudo alien **.rpm vim使用 vim三种模式:命令模式、**模式、编辑模式。使用ESC或i或:来切换模式。 命令模式下: :q 退出 :q! 强制退出 :wq 保存并退出 :set number 显示行号 :set nonumber 隐藏行号 /apache 在文档中查找apache 按n跳到下一个,shift+n上一个 yyp 复制光标所在行,并粘贴 h(左移一个字符←)、j(下一行↓)、k(上一行↑)、l(右移一个字符→) 用户及用户组管理 /etc/passwd 存储用户账号 /etc/group 存储组账号 /etc/shadow 存储用户账号的密码 /etc/gshadow 存储用户组账号的密码 useradd 用户名 userdel 用户名 adduser 用户名 groupadd 组名 groupdel 组名 passwd root 给root设置密码 su root su - root /etc/profile 系统环境变量 bash_profile 用户环境变量 .bashrc 用户环境变量 su user 切换用户,加载配置文件.bashrc su - user 切换用户,加载配置文件/etc/profile ,加载bash_profile 更改文件的用户及用户组 sudo chown [-R] owner[:group] {File|Directory} 例如:还以jdk-7u21-linux-i586.tar.gz为例。属于用户hadoop,组hadoop 要想切换此文件所属的用户及组。可以使用命令。 sudo chown root:root jdk-7u21-linux-i586.tar.gz 文件权限管理 三种基本权限 R 读 数值表示为4 W 写 数值表示为2 X 可执行 数值表示为1 例如,当前目录下一个文件jdk-7u21-linux-i586.tar.gz的权限为-rw-rw-r-- -rw-rw-r--一共十个字符,分成四段。 第一个字符“-”表示普通文件;这个位置还可能会出现“l”链接;“d”表示目录 第二三四个字符“rw-”表示当前所属用户的权限。 所以用数值表示为4+2=6 第五六七个字符“rw-”表示当前所属组的权限。 所以用数值表示为4+2=6 第八九十个字符“r--”表示其他用户权限。 所以用数值表示为2 所以操作此文件的权限用数值表示为662 更改权限 sudo chmod [u所属用户 g所属组 o其他用户 a所有用户] [+增加权限 -减少权限] [r w x] 目录名 例如:有一个文件filename,权限为“-rw-r----x” ,将权限值改为"-rwxrw-r-x",用数值表示为765 sudo chmod u+x g+w o+r filename 上面的例子可以用数值表示 sudo chmod 765 filename
  • [技术干货] 如何将Linux原生xen-pv和virtio前端驱动装载到动到initrd中
    XEN和KVM镜像如何兼容统一,必须将Linux原生xen-pv和virtio前端驱动装载到动到initrd中,这个如何做到的呢? 只需要添加module形式存在OS内的驱动,在内核中以build-in形式存在的驱动不需要添加。 [*]RHEL、CentOS、Oracle系列操作系统,以CentOS 7.1为例,需修改“/etc/dracut.conf”文件,在add-driver项中添加xen-pv以及virtio的驱动(xen-pv驱动:xen-blkfront、xen-netfront;virtio驱动:virtio_blk、virtio_scsi 、virtio_net、virtio_pci、virtio_ring、virtio),驱动名之间以空格隔开,保存并退出/etc/dracut.conf文件,执行dracut -f命令,重新生成initrd。 [*]Ubuntu和Debian系列系统,修改/etc/initramfs-tools/modules文件,添加xen-pv以及virtio的驱动(xen-pv驱动:xen-blkfront、xen-netfront;virtio驱动:virtio_blk、virtio_scsi 、virtio_net、virtio_pci、virtio_ring、virtio),驱动名之间是空格隔开,保存并退出/etc/initramfs-tools/modules文件,执行update-initramfs -u命令,重新生成initrd。 [*]SUSE和openSUSE系列系统,修改/etc/sysconfig/kernel文件,在INITRD_MODULES=""添加xen-pv以及virtio的驱动,(xen-pv驱动:xen_vnif、xen_vbd、xen_platform_pci;virtio驱动:virtio_blk、virtio_scsi 、virtio_net、virtio_pci、virtio_ring、virtio),驱动名之间是空格隔开,执行mkinitrd命令,重新生成initrd。 1、以CentOS为例,修改/etc/dracut.conf在add-driver项中添加xen-pv和virtio的驱动(具体格式要根据OS本身的要求来决定): [code][root@CTU10000xxxxx ~]# vim /etc/dracut.conf # additional kernel modules to the default add_drivers+="xen-blkfront xen-netfront virtio_blk virtio_scsi virtio_net virtio_pci virtio_ring virtio" ……[/code] 2、保存并退出/etc/dracut.conf文件,执行dracut -f命令,重新生成initrd。 3、检查是否已经成功装载了XEN和KVM的PVOPS相应模块。 [code][root@CTU10000xxxxx home]# lsinitrd /boot/initramfs-`uname -r`.img | grep xen -rwxr--r-- 1 root root 54888 Jul 16 17:53 lib/modules/2.6.32-573.8.1.el6.x86_64/kernel/drivers/block/xen-blkfront.ko -rwxr--r-- 1 root root 45664 Jul 16 17:53 lib/modules/2.6.32-573.8.1.el6.x86_64/kernel/drivers/net/xen-netfront.ko [root@CTU10000xxxxx home]# lsinitrd /boot/initramfs-`uname -r`.img | grep virtio -rwxr--r-- 1 root root 23448 Jul 16 17:53 lib/modules/2.6.32-573.8.1.el6.x86_64/kernel/drivers/block/virtio_blk.ko -rwxr--r-- 1 root root 50704 Jul 16 17:53 lib/modules/2.6.32-573.8.1.el6.x86_64/kernel/drivers/net/virtio_net.ko -rwxr--r-- 1 root root 28424 Jul 16 17:53 lib/modules/2.6.32-573.8.1.el6.x86_64/kernel/drivers/scsi/virtio_scsi.ko drwxr-xr-x 2 root root 0 Jul 16 17:53 lib/modules/2.6.32-573.8.1.el6.x86_64/kernel/drivers/virtio -rwxr--r-- 1 root root 14544 Jul 16 17:53 lib/modules/2.6.32-573.8.1.el6.x86_64/kernel/drivers/virtio/virtio.ko -rwxr--r-- 1 root root 21040 Jul 16 17:53 lib/modules/2.6.32-573.8.1.el6.x86_64/kernel/drivers/virtio/virtio_pci.ko -rwxr--r-- 1 root root 18016 Jul 16 17:53 lib/modules/2.6.32-573.8.1.el6.x86_64/kernel/drivers/virtio/virtio_ring.ko[/code] 说明: 如果误将build-in形式存在内核中的驱动添加到initrd或initramfs文件中,不会影响虚拟机正常使用,这里全写进去只是为了修改的方便,但是使用lsinitrd命令无法检查到。可使用如下方法确定这些驱动是否以build-in形式存在内核中,例如: [code][root@ CTU10000xxxxx home]# cat /boot/config-`uname -r` | grep CONFIG_VIRTIO | grep y [root@ CTU10000xxxxx home]# cat /boot/config-`uname -r` | grep CONFIG_XEN | grep y[/code]
  • Linux 4.13 发布;Fedora 的 Yum 或将在一两年内退休
    Linus Torvalds 在内核邮件列表上宣布释出 Linux 4.13。主要特性(kernelnewbies 的页面还是空白)包括: 通过结构布局随机化加固内核, 原生支持 TLS 协议, 改善大页交换, 改进写回错误处理, 更好的支持异步 I/O, 改进电源管理, 以及因为 SMB 1.0 相关的漏洞 cifs 挂载默认为 SMB 3.0。 Fedora 的 Yum 或将在一两年内退休 随着 DNF 软件包管理器在最近的 Fedora 版本里面工作日益工作良好,我们可以预见到 Yum 将在之后的 Fedora 版本中谢幕。当然,Yum 还一直广泛用在 RHEL 7 中,而在 Fedora 这边,估计在大约一年后的 Fedora 28 乃至 29 中正式退休。 在 Fedora 开发者邮件列表中有一个讨论 Yum 退休的新话题。看起来在 Fedora 28 或 29 的时候会移除 Yum。DNF 已经提供了与 Yum 一样的能力。 Fedora 也在开发一个 “富依赖” 的支持,而这个功能 Yum 不支持,所以这也表明了 Yum 将在以后的 Fedora 系统中消失。 邮件列表中也提到了 Yum 和 DNF 还存在一些差异需要解决,但是看起来在 2018 年应该可以看到希望。 ​
  • 【云安全】linux操作系统安全加固--(服务和日志)篇
    1、服务 OS-Linx-关闭不需要的服务 建议项:关闭不必要的服务(普通服务和xinetd服务); 操作指南:执行chkconfig --list查看系统启动的服务,关闭不必要的服务; 如:关闭xinetd服务:chkconfig --level 123456 xinetd off 检测方法:逐个检查系统服务,检查系统是否有不必要的服务; 判定条件:支持系统最小化运行的服务。 补充说明:常见不必要服务:bootps,pure-ftpd,pppoe,sendmail,isdn,zebra,cupsd,cups-config-daemon,hplip,hpiod,hpssd,bluetooth,hcid,hidd,sdpd,dund,pand,rsh 2、日志 编号:OS-Linux-审计日志设置建议项:启用syslog系统日志审计功能操作指南: CentOS5.X检查:/etc/rsyslog.conf CentOS6.X及以上,Fedora,Debain,Ubuntu检查:/etc/rsyslog.conf SUSE检查:/etc/syslog-ng/syslog-ng.conf cat /etc/syslog.conf 查看是否有:authpriv.* /var/log/secure检测方法:远程ssh登录成功后检查secure日志是否记录认证信息判定条件:有成功登录的记录认证信息判定为配置成功;补充说明: 将authpirv设备的任何级别的信息记录到/var/log/secure文件中,这主要是一些和认证、权限使用相关的信息。OS-Linux-日志权限设置建议项:系统日志文件由root创立并且其它用户不可读取(日志文件权限不高于600);操作指南:查看如下等日志的访问权限:#ls –l查看下列日志文件权限 /var/log/messages、/var/log/secure、/var/log/auth、/var/log/maillog、/var/log/cron、/var/log/spooler、/var/log/boot.log 如:修改message文件权限,执行命令:chmod 600 messages检测方法:使用ls -l 命令依次检查系统日志的读写权限。判定条件:日志文件权限小于600判断为成功;补充说明:
  • 【云安全】linux操作系统安全加固--(文件服务配置按需)篇
    本部分根据需要,且使用vsftp做为文件服务器时需要参照本部分设置,其它文件系统不涉及;编号:OS-Linux-vsftp配置建议项:安装最新的vsftp服务器操作指南: 执行rpm -qa|grep vsftpd检查是否安装最新的vsftpd,如果没有安装则执行yum install vsftpd安装最新的软件vsftpd包,安装完成后执行service vsftpd start启动vsftp服务。检测方法:执行service vsftpd stauts检查服务是否启动。判定条件:service vsftpd stauts响应OK表示服务正常启动。编号:OS-Linux-禁用匿名登录vsftp服务建议项: vsftp不能匿名登录操作指南: 执行:vim /etc/vsftpd/vsftpd.conf查看: anonymous_enable=NO -----配置为NO为禁止匿名登录,必须要创建用户认证后登录;检测方法:匿名登录vsftp查看登录是否成功;判定条件:匿名登录不成功表示配置正常;编号:OS-Linux-banner信息修改建议项:禁止显示vsftp banner信息操作指南:执行:vim /etc/vsftpd/vsftpd.conf查看: 去掉ftpd_banner=Welcome…的注释 配置完成后重启vsftp服务。检测方法:远程登录FTP查看banner是否已修改。判定条件:banner信息已修改表示配置正常。编号:OS-Linux-限制FTP用户目录建议项:每个FTP用户只能在自己的目录下活动,不能向上遍历;操作指南: 执行:vim /etc/vsftpd/vsftpd.conf查看: chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list 新建/etc/vsftpd/chroot_list,添加用户名,如:user1 #表示user1登录FTP后,只允许在user1用户的home目录中活动 配置完成后重启服务。检测方法:远程登录FTP查看是否可以向上遍历到根目录。判定条件:不能遍历表示表示配置正常。编号:OS-Linux-启用FTP日志记录建议项:开启FTP的日志记录功能操作指南: 执行:vim /etc/vsftpd/vsftpd.conf修改以下行,启用日志记录: xferlog_enable=YES xferlog_std_format=YES 如果需要自定义日志存放位置,xferlog_file=/var/log/ftplog 配置完成后重启服务。检测方法:远程登录FTP查看日志记录是否成。判定条件:能正常记录日志表示配置正常。编号:OS-Linux-FTP网络连接限制建议项:FTP的最大连接数和传输速度必须限制操作指南: 执行:vim /etc/vsftpd/vsftpd.conf修改以下行,启用日志记录: anon_max_rate=0:限制匿名最大传输速率(字节/秒) local_max_rate=0:限制用户最大传输速率(字节/秒) max_clients=0:限制并发客户端连接数 max_per_ip=0:限制同一 IP 地址的并发连接数 配置完成后重启服务。检测方法:查看配置选项是否已修改。判定条件:已修改表示配置正常。
  • Linux 份额相比 2015 年 12 月翻番:NetMarketShare 最新统计
    NetMarketShare公布了8月份最新操作系统份额统计,在最新报告中Lunix操作系统的份额为3.37%,月度占比提升0.84%,相比2015年12月的市场份额实现了翻倍,显著增长。Windows系统整体在全球桌面操作系统的占比则维持在90%,而Ma**则从2015年10月的8%跌至5.94%根据8月统计数据,Windows 7系统占比尽管从上个月48.91%下降至48.43%,Windows 10系统则从上个月的27.63%升至27.99%。外媒估计Linux系统的增长与将Chrome OS计入统计离不开,在开学返校季越来越多的学生开始购入适合教育市场的Chromebook设备使用。