Linux 常用命令整理

文件、目录类

cd                     # cd 不加任何参数,返回 home 目录
cd -                   # 返回上一次所在目录,并显示其目录名
cd dir                 # 进入到指定目录
pwd                    # 显示当前目录的绝对路径
ls -l                  # 列出文件的详细信息,可简写为 ll
ls | grep "bin"        # 列出包含 "bin" 关键字的文件
mkdir dir              # 创建一个目录
mkdir -p dir/dir       # 创建一个多级目录
mkdir -m 777 dir       # 创建权限为 777 的目录
touch file             # 创建新的空文件
rmdir dir              # 删除空目录
rmdir -p dir/bin       # 删除子空目录 bin 和其父空目录 dir
rm -rf dir/bin         # 删除一个目录中的一个或多个文件或目录, 谨慎使用
rm -rf *.log           # 删除当前目录下所有 ".log" 的文件
find fileName ‐name  *.txt | xargs rm ‐rf   # 将查找出来的文件全部删除, 谨慎使用
cp file dir/file       # 将文件或目录拷贝到另一文件或目录中 
cp ‐R dir1 dir2 /dir   # 拷贝多个目录 (含子目录) 到指定目录
mv dir1 dir2           # 将文件或目录重新命名,或者将文件从一个目录移到另一个目录中

文件查看、处理

cat file                 # 显示文件的内容
cat -n file              # 从1开始对文件的行数编号
cat file1 file2 > file3  # 将文件 file1 和 file2 的内容合并之后放入 file3 中    
head file                # 显示文件的头 10 行内容
tail file                # 显示文件的最后 10 行内容 
tail -f file             # 显示文件最新追加的内容,并监视文件的变化,常用来跟踪日志文件
more file                # 基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容 
less file                # 作用与 more 十分类似, pageUp 向上翻页, pageDown 向下翻页, q 退出 
cat file1 > file2        # 覆盖导入
cat file1 >> file        # 追加导入
wc ‐l [‐m][‐c][‐w] file  # 统计行数、字符数、字节数、单词数

文件查询、搜索

grep keyWord                             # 常与 cat 搭配使用 cat file | grep keyWord
find dir -name "*.log"                   # 搜索指定目录下的 ".log" 文件
find dir -name "*.log" -o -name "*.pid"  # 搜索指定目录下的 ".log" 文件和 ".pid" 文件
find dir -user user1                     # 搜索指定目录下属于 user1 用户的文件

文本编辑 vi 底行模式下

:set nu               # 显示行号
:set nonu             # 不显示行号
:n                    # 跳转到指定第 n 行
:w file               # 另存为
:n1,n2 s/str1/str2/g  # 从 n1 行到 n2 行, 将 str1 替换为 str2
:wq                   # 保存并退出
:q!                   # 强制退出不保存

文本编辑 vi 命令模式下

G                # 到末行
gg               # 到首行
dd               # 删除行
u                # 撤销
yy               # 复制一行
nyy              # 复制 n 行
p                # 粘贴

权限管理

chmod 755 dir/file        # 修改指定文件的权限
chmod ‐R 755 dir          # 递归修改目录及其子文件、目录的权限  
chown user file           # 改变文件的所有者  
chown ‐R user dir         # 改变目录的所有者  
chgrp group1 file         # 改变文件的所有者 
chgrp ‐R group1 dir       # 改变目录的所属组  
chown user1:group1 file   # 同时改变文件的所有者和所属组   
chown ‐R user1:group1 dir # 同时改变目录的所有者和所属组   
whoami                    # 查看当前操作用户  
who                       # 查看当前已登录系统的用户  
id user1                  # 查看用户 user1 的归属 id 信息 

压缩、解压

tar -cvf test.tar test.log      # 仅打包,不压缩
tar -xvf test.tar               # 直接解包
tar -zcvf test.tar.gz test.log  # 打包后,以 gzip 压缩
tar -zcvf test.tar.gz *         # 将当前目录下所有文件压缩
tar -zxvf test.tar.gz           # 直接解压
tar ‐zxvf test.tar.gz ‐C dir    # 解压到新目录,只能是 dir 且已经存在
gzip *                          # 压缩目录下所有文件
gzip -d *                       # 解压缩目录下所有文件
zip test.zip *                  # 将当前目录下所有文件压缩为 zip 包
unzip test.zip                  # 解压缩 zip 包

用户管理

groupadd group1              # 创建组
groupdel group1              # 删除组
groupmod  ‐n group2 group1   # 将 group1 重命名 group2  
useradd user1                # 创建用户
useradd ‐g group1 user1      # 创建 user1 并将其分配到 group1 组下  
userdel ‐r user1             # 删除 user1, "‐r" 参数表示同时也删除 home 目录下的相关目录  
usermod ‐g group2 user1      # 改变 user1 的组为 group2  
usermod ‐G group2 user1      # 将 user1 的添加到 group2 组中来,同时保留原来的主组  
passwd                       # 修改当前用户密码 
passwd user1                 # 修改 user1 用户的密码,仅限 root 用户执行  
su user1                     # 切换到用户 user1 
groups user1                 # 查看用户 user1 所属的组 

网络配置管理

ifconfig -a                  # 查看 ip 信息
ping 127.0.0.1               # 测试主机之间网络的连通性,执行 ping 命令会使用 ICMP 传输协议
ping 192.168.0.1             # 测试从我们的电脑到路由器之间的是否通畅
ping 192.168.0.1 -t -l 65500 # 丢包检查
service network restart      # 重启网络服务 [start , stop]
hostname                     # 查看主机名
netstat -ntlp                # 查询当前系统监听 tcp 端口的进程

远程连接

ssh root@112.74.95.60                      # 远程连接 shell  
logout                                     # 退出连接  
scp ‐r root@112.74.95.60:/user/local/logs  # 远程复制目录,复制文件时不用加 "‐r" 

查看命令帮助

help cd       # 用于内部命令, 如 exit、history、cd、echo 等常驻内存  
ls ‐‐help     # 主要用于外部命令,可通过 "echo $PATH" 命令查看外部命令的存储路径,如 ls,vi 等  
man ls        # 命令手册,可用于所有命令,输入"q"可退出  
type cd       # 查看命令类型,内部 or 外部及命令位置 

系统相关命令

shutdown  ‐h now                    # 立即关机  
shutdown  ‐r now                    # 立即重启  
uname ‐r                            # 查看内核版本   
cal                                 # 日历  
date                                # 时间、日期  
date ‐s "2015‐12‐22 08:00"          # 修改时间  
ntpdate time.nist.gov               # 同步当前时间
history                             # 查看历史命令记录,运行时 "!"+ 命令号,如 !3314 运行 3314 命令  
ps -ef                              # 查看进程  
kill pid                            # 终止进程  
kill ‐9 pid                         # 制终止进程  
top                                 # 查看当前系统资源使用率  
df ‐h                               # 查看磁盘信息  
free ‐m                             # 查看内存信息  
du ‐h file/dir                      # 查看文件/目录大小 ‐h 表示以 K,M,G  
du ‐sh file/dir                     # 查看文件/目录总大小  
mount ‐o loop linux.iso /mnt/dir    # 加载文件系统到指定的加载点
umount /mnt/dir                     # 卸载已经加载的文件系统
rpm ‐ivh xxx.rpm                    # 安装 rpm 包  
rpm ‐e xxx.rpm                      # 卸载 rpm 包 
wget http://url                     # 下载远端 zip 包
echo > fileNme                      # 清空文件内容

Linux系统管理员面试50题

大多数Python程序都是要在服务器端运行的,而服务器端主要的操作系统是Linux.学习Linux系统管理是你成为大牛程序员的必经之路,让我们看看成为Linux系统管理员都需要具备哪些知识和技能?

  1. 命令nslookup是做什么的?
  2. 你如何把CPU占用率最高的进程显示出来?
  3. 如果检查Linux上开放的端口,并将不用的端口屏蔽掉?
  4. 什么是Linux?它和Unix有什么不同?
  5. 详细描述Unix系统启动的过程?
  6. 如何修改文件权限,如何创建一个只读文件?
  7. 详细介绍SUDO命令,它的缺点是什么?
  8. UDP和TCP之间有什么区别?
  9. 描述Linux机器启动的顺序.
  10. 设计一个3层的Web应用.
  11. 概述你如何将互联网流量导入子网.
  12. 你对虚拟化了解吗?它好用吗?
  13. 不同级别的RAID有什么不同?对于Web服务器和数据库服务器你会使用哪一级别的RAID?
  14. 说出开源社区最近的一些开发进展.
  15. 你是否向开源项目做过贡献?
  16. 系统工程师和系统管理员有什么区别?解释一下?
  17. 列出一些系统专家不道德的行为.
  18. 通常情况下Linux系统的交换分区是多大?
  19. 没有名字的目录在Linux系统中表示什么?
  20. 如何列出目录中的所有文件,包括隐藏文件?
  21. 如何添加一个没有登录权限的新的系统用户?
  22. 说明什么是硬链接?硬链接被删除会发生什么?
  23. 系统管理员执行这条命令会发生什么:chmod 444 chmod?
  24. 如何找出一个Linux系统的共有IP和私有IP?
  25. 用bash发邮件如何带附件?
  26. 说出一些在服务器上使用的Linux发行版.
  27. 说明在Linux上重新安装Grub的最简便的方式?
  28. 什么是记录,NS记录,PTR记录,CNAME记录,和MX记录?
  29. 什么是僵尸进程?做什么会导致僵尸进程?
  30. 我们什么时候选择使用脚本,而不是编译型程序?
  31. 如何创建一个简单的主从集群?
  32. 删除一个文件链接的源文件会发生什么?
  33. FTP服务器如何限制访问IP?
  34. 说明Linux的目录结构,/usr/local文件夹里放的是什么?
  35. 什么是git?解释它的结构和工作原理?
  36. 你如何在中午十二点发一封邮件给100个人?
  37. 描述ZFS文件系统.
  38. 如何修改Linux系统的默认运行级别?
  39. 如何修改Linux的内核参数?
  40. 说明SSH和Telnet之间的区别.
  41. 你如何虚拟化一个Linux物理机?
  42. 告诉我一些古怪的Linux命令.
  43. 解释HTTPS的工作原理.
  44. 你知道tor浏览器么?解释它的原理.
  45. 如何在下次启动机器的时候触发强制系统检查?
  46. 你喜欢什么备份技术?
  47. 解释一些SWAP分区.
  48. 解释一下ping死亡攻击.
  49. 你如何嗅探IP包的内容.
  50. OSI层次结构如何确保数据包抵达正确的地址?

    欢迎大家和我一起探讨答案!

关于NFS客户端挂载与mount的几点探讨

最近在学习网络文件系统(NFS),发现mount这个学问很多,在这里总结一下。

NFS客户端开机自动挂载的方法:

第一种方法:将挂载命令写入/etc/rc.local

缺点:偶尔开机挂载不上,工作中除了开机自动配置,还要对是否挂载做监控。

第二种方法:将挂载命令放在/etc/fatab里

单这种配置方法有个误区:fstab会先于网络被Linux系统加载。网络没启动时执行fstab会导致连接不上NFS服务器端,无法实现开机挂载。而且,即使是本地文件,也要注意,fstab最后两列要设置为 0 0.否则有可能会导致无法启动服务器的问题。因此NFS网络文件系统最好不要放在fstab里实现开机挂载。

PS:关于ubuntu系统每次开机都会有1分30秒的等待时间

fstab这个文件大家最好不要乱动,修改前先做备份,我之前就由于不小心删除了一个条目,导致无法开机。由于我电脑装了4个系统,三个linux系统(Ubuntu、Kali、Deeoin),都公用一个swap分区,每次重装或者更改系统时Linux会自动格式化swap分区,导致了这与ubuntu中/etc/fatab中记录的uuid不一样,然后就开机漫长的等待1分30秒才开机,出现:A start job is running for dev-disk-by/x2uuid-7ea*.device(**/1min30s )这样的提示,导致开机也未挂载上swap.解决方法如下:

[code lang=”bash”]
jian@N4010:~$ sudo blkid
[sudo] jian 的密码:
/dev/sda1: UUID="54DE803EDE801A7E" TYPE="ntfs" PARTUUID="ad078914-01"
/dev/sda5: UUID="46957b90-fc30-47ca-b256-049e267e7cf5" TYPE="ext4" PARTUUID="ad078914-05"
/dev/sdb1: UUID="2661b44d-6408-4b1c-b92c-2ab42deca270" TYPE="ext4" PARTUUID="000cf9af-01"
/dev/sdb5: UUID="120e4dc8-74a4-4573-bff0-1685412ca365" TYPE="swap" PARTUUID="000cf9af-05"
/dev/sdb6: LABEL="M-hM-=M-/M-dM-;M-6" UUID="0000678400004823" TYPE="ntfs" PARTUUID="000cf9af-06"
/dev/sdb7: LABEL="M-fM-^VM-^GM-fM-!M-#" UUID="0000678400004823" TYPE="ntfs" PARTUUID="000cf9af-07"
/dev/sdb8: LABEL="M-eM-(M-1M-dM-9M-^P" UUID="0000678400004823" TYPE="ntfs" PARTUUID="000cf9af-08"
/dev/sdb9: LABEL="M-eM-^JM-^^M-eM-^EM-," UUID="0000678400004823" TYPE="ntfs" PARTUUID="000cf9af-09"
/dev/sdb10: UUID="43409185-fa0a-4e17-96f1-f666685aa81e" TYPE="ext4" PARTUUID="000cf9af-0a"
[/code]

使用sudo fdisk -l产看所有分区信息,找到swap对应的swap分区如下:

/dev/sdb5 156258304 167772159 11513856 5.5G 82 Linux 交换 / Solaris

将sbd5对应的UUID=”120e4dc8-74a4-4573-bff0-1685412ca365″,重新写入到fstab:

[code language=”bash”]

jian@N4010:~$ cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use ‘blkid’ to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type><options> <dump> <pass>
# / was on /dev/sda5 during installation
UUID=46957b90-fc30-47ca-b256-049e267e7cf5 / ext4 errors=remount-ro 0 1
# swap was on /dev/sdb5 during installation
UUID=120e4dc8-74a4-4573-bff0-1685412ca365 none swap sw 0 0

[/code]

从启发现再没有恼人的1分30秒等待了

二、关于fstab中的格式与参数说明,MAN给出的信息如下:

The first field (fs_spec).—->This field describes the block special device or remote filesystem to be mounted.

The second field (fs_file).—->This field describes the mount point for the filesystem. For swap partitions, this field
should be specified as `none’. If the name of the mount point contains spaces these can be
escaped as `\040′.

The third field (fs_vfstype).—->This field describes the type of the filesystem.

The fourth field (fs_mntops).T—->his field describes the mount options associated with the filesystem.

The fifth field (fs_freq).—->:This field is used by dump(8) to determine which filesystems need to be dumped. Defaults to
zero (don’t dump) if not present.(意思是是否要转储,应该是读写缓存的意思,实时读写就是0,防止因异常断电导致的数据丢失。)

The sixth field (fs_passno).—->This field is used by fsck(8) to determine the order in which filesystem checks are done at
boot time. The root filesystem should be specified with a fs_passno of 1. Other filesystems
should have a fs_passno of 2. Filesystems within a drive will be checked sequentially, but
filesystems on different drives will be checked at the same time to utilize parallelism
available in the hardware. Defaults to zero (don’t fsck) if not present.

(大概意思是:通过此字段来设置启动时检测文件系统的顺序应该 1 指定文件系统其他文件系统应该用  2。按顺序检查驱动器文件系统不同驱动器文件系统同时利用并行性检查硬件可用默认值零不检查)

所以不重要的文件系统可以设置为0 0,防止因为一些异常而无法开机。

三、fstab与mount的关系

通过mount -o指定挂载参数与在/etc/fstab里指定挂载参数的效果是一样的。

执行mount -a会自动执行/etc/fstab中的挂载参数。(mount  -a, –all  —-> mount all filesystems mentioned in fstab)

四、NfS客户端挂载优化(考虑安全与性能两个方面)

兼顾到安全与性能的挂载方式:

[code lang=”bash”]mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072 10.0.100.128:/date/nfs  /mnt/share[/code]

如果是本地文件系统,使用如下命令:

[code lang=”bssh”]mount  /dev/sdb5 /mnt -o defaults,async,noatime,data=writeback,barrier=0[/code]

本地文件系统挂载时,如果加nodirtime会报错。

五、NFS内核优化建议#NFS内核优化建议

[code lang=”bash”]

vim /etc/sysctl.conf

net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
ne.core.wmem_max = 16777216

执行sysctl -p生效 [/code]

注:如果卸载的时候提示:“umount:/mnt:device is busy”,注意需要退出挂载的目录在进行卸载,如果是NFS server宕机了,则需要强制卸载,可执行umount -lf /mnt
大型网站NFS网络文件系统的替代软件为分布式文件系统Moosefs(mfs)、GlusterFS、FastDFS.

 

Linux 系统启动过程

Linux 系统启动过程

linux启动时我们会看到许多启动信息。

Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段:

  • 内核的引导。
  • 运行init。
  • 系统初始化。
  • 建立终端 。
  • 用户登录系统。

内核引导

当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。

操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。

bg2013081702


运行init

init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。

init 程序首先是需要读取配置文件 /etc/inittab。

 

运行级别

  • 许多程序需要开机启动。它们在Windows叫做”服务”(service),在Linux就叫做”守护进程”(daemon)。
  • init进程的一大任务,就是去运行这些开机启动的程序。
  • 但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。
  • Linux允许为不同的场合,分配不同的开机启动程序,这就叫做”运行级别”(runlevel)。也就是说,启动时根据”运行级别”,确定要运行哪些程序。

bg2013081704

Linux系统有7个运行级别(runlevel):

  • 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
  • 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
  • 运行级别2:多用户状态(没有NFS)
  • 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
  • 运行级别4:系统未使用,保留
  • 运行级别5:X11控制台,登陆后进入图形GUI模式
  • 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

系统初始化

在init的配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了/etc/rc.d/rc.sysinit,而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。

它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。

l5:5:wait:/etc/rc.d/rc 5

这一行表示以5为参数运行/etc/rc.d/rc,/etc/rc.d/rc是一个Shell脚本,它接受5作为参数,去执行/etc/rc.d/rc5.d/目录下的所有的rc启动脚本,/etc/rc.d/rc5.d/目录中的这些启动脚本实际上都是一些连接文件,而不是真正的rc启动脚本,真正的rc启动脚本实际上都是放在/etc/rc.d/init.d/目录下。

而这些rc启动脚本有着类似的用法,它们一般能接受start、stop、restart、status等参数。

/etc/rc.d/rc5.d/中的rc启动脚本通常是K或S开头的连接文件,对于以以S开头的启动脚本,将以start参数来运行。

而如果发现存在相应的脚本也存在K打头的连接,而且已经处于运行态了(以/var/lock/subsys/下的文件作为标志),则将首先以stop为参数停止这些已经启动了的守护进程,然后再重新运行。

这样做是为了保证是当init改变运行级别时,所有相关的守护进程都将重启。

至于在每个运行级中将运行哪些守护进程,用户可以通过chkconfig或setup中的”System Services”来自行设定。

bg2013081705


建立终端

rc执行完毕后,返回init。这时基本系统环境已经设置好了,各种守护进程也已经启动了。

init接下来会打开6个终端,以便用户登录系统。在inittab中的以下6行就是定义了6个终端:

1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

从上面可以看出在2、3、4、5的运行级别中都将以respawn方式运行mingetty程序,mingetty程序能打开终端、设置模式。

同时它会显示一个文本登录界面,这个界面就是我们经常看到的登录界面,在这个登录界面中会提示用户输入用户名,而用户输入的用户将作为参数传给login程序来验证用户的身份。


用户登录系统

一般来说,用户的登录方式有三种:

  • (1)命令行登录
  • (2)ssh登录
  • (3)图形界面登录

 

  • 对于运行级别为5的图形方式用户来说,他们的登录是通过一个图形化的登录界面。登录成功后可以直接进入KDE、Gnome等窗口管理器。
  • 而本文主要讲的还是文本方式登录的情况:当我们看到mingetty的登录界面时,我们就可以输入用户名和密码来登录系统了。
  • Linux的账号验证程序是login,login会接收mingetty传来的用户名作为用户名参数。
  • 然后login会对用户名进行分析:如果用户名不是root,且存在/etc/nologin文件,login将输出nologin文件的内容,然后退出。
  • 这通常用来系统维护时防止非root用户登录。只有/etc/securetty中登记了的终端才允许root用户登录,如果不存在这个文件,则root可以在任何终端上登录。

/etc/usertty文件用于对用户作出附加访问限制,如果不存在这个文件,则没有其他限制。

<p在分析完用户名后,login将搜索 etc=”” passwd以及=”” shadow来验证密码以及设置账户的其它信息,比如:主目录是什么、使用何种shell。如果没有指定主目录,将默认为根目录;如果没有指定shell,将默认为=”” bin=”” bash。<=”” p=”” style=”color: rgb(51, 51, 51); font-family: ‘Open Sans’, ‘Helvetica Neue’, Helvetica, Arial, STHeiti, ‘Microsoft Yahei’, sans-serif; font-size: 12px; white-space: normal; background-color: rgb(255, 255, 255);”>


图形模式与文字模式的切换方式

Linux预设提供了六个命令窗口终端机让我们来登录。

默认我们登录的就是第一个窗口,也就是tty1,这个六个窗口分别为tty1,tty2 … tty6,你可以按下Ctrl + Alt + F1 ~ F6 来切换它们。

如果你安装了图形界面,默认情况下是进入图形界面的,此时你就可以按Ctrl + Alt + F1 ~ F6来进入其中一个命令窗口界面。

当你进入命令窗口界面后再返回图形界面只要按下Ctrl + Alt + F7 就回来了。

如果你用的vmware 虚拟机,命令窗口切换的快捷键为 Alt + Space + F1~F6. 如果你在图形界面下请按Alt + Shift + Ctrl + F1~F6 切换至命令窗口。

 


Linux 关机

在linux领域内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机。

正确的关机流程为:sysnc > shutdown > reboot > halt

关机指令为:shutdown ,你可以man shutdown 来看一下帮助文档。

例如你可以运行如下命令关机:

sync 将数据由内存同步到硬盘中。

shutdown 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机:

shutdown –h 10 ‘This server will shutdown after 10 mins’ 这个命令告诉大家,计算机将在10分钟后关机,并且会显示在登陆用户的当前屏幕中。

Shutdown –h now 立马关机

Shutdown –h 20:25 系统会在今天20:25关机

Shutdown –h +10 十分钟后关机

Shutdown –r now 系统立马重启

Shutdown –r +10 系统十分钟后重启

reboot 就是重启,等同于 shutdown –r now

halt 关闭系统,等同于shutdown –h now 和 poweroff

最后总结一下,不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中。

关机的命令有 shutdown –h now halt poweroff 和 init 0 , 重启系统的命令有 shutdown –r now reboot init 6.


Linux 系统启动过程>>转载自:http://www.imooc.com/wiki/detail/id/1230

ulimit命令(Shell内建命令)

ulimit命令用来限制系统用户对shell资源的访问。如果不懂什么意思,下面一段内容可以帮助你理解: 假设有这样一种情况,当一台 Linux 主机上同时登陆了 10 个人,在系统资源无限制的情况下,这 10 个用户同时打开了 500 个文档,而假设每个文档的大小有 10M,这时系统的内存资源就会受到巨大的挑战。 而实际应用的环境要比这种假设复杂的多,例如在一个嵌入式开发环境中,各方面的资源都是非常紧缺的,对于开启文件描述符的数量,分配堆栈的大 小,CPU 时间,虚拟内存大小,等等,都有非常严格的要求。资源的合理限制和分配,不仅仅是保证系统可用性的必要条件,也与系统上软件运行的性能有着密不可分的联 系。这时,ulimit 可以起到很大的作用,它是一种简单并且有效的实现资源限制的方式。 ulimit 用于限制 shell 启动进程所占用的资源,支持以下各种类型的限制:所创建的内核文件的大小、进程数据块的大小、Shell 进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、单个用户的最大线程数、Shell 进程所能使用的最大虚拟内存。同时,它支持硬资源和软资源的限制。 作为临时限制,ulimit 可以作用于通过使用其命令登录的 shell 会话,在会话终止时便结束限制,并不影响于其他 shell 会话。而对于长期的固定限制,ulimit 命令语句又可以被添加到由登录 shell 读取的文件中,作用于特定的 shell 用户。

语法 ulimit      (选项) 选项

[code lang=”plain”]
-a:显示目前资源限制的设定;
-c :设定core文件的最大值,单位为区块;
-d <数据节区大小>:程序数据节区的最大值,单位为KB;
-f <文件大小>:shell所能建立的最大文件,单位为区块;
-H:设定资源的硬性限制,也就是管理员所设下的限制;
-m <内存大小>:指定可使用内存的上限,单位为KB;
-n <文件数目>:指定同一时间最多可开启的文件数;
-p <缓冲区大小>:指定管道缓冲区的大小,单位512字节;
-s <堆叠大小>:指定堆叠的上限,单位为KB;
-S:设定资源的弹性限制; -t :指定CPU使用时间的上限,单位为秒;
-u <程序数目>:用户最多可开启的程序数目;
-v <虚拟内存大小>:指定可使用的虚拟内存上限,单位为KB。
[/code]

实例:

[code lang=”bash”]
[root@localhost ~]# ulimit -a
core file size (blocks, -c) 0 #core文件的最大值为100 blocks。
data seg size (kbytes, -d) unlimited #进程的数据段可以任意大。
scheduling priority (-e) 0 file size (blocks, -f) unlimited #文件可以任意大。
pending signals (-i) 98304 #最多有98304个待处理的信号。
max locked memory (kbytes, -l) 32 #一个任务锁住的物理内存的最大值为32KB。
max memory size (kbytes, -m) unlimited #一个任务的常驻物理内存的最大值。
open files (-n) 1024 #一个任务最多可以同时打开1024的文件。
pipe size (512 bytes, -p) 8 #管道的最大空间为4096字节。
POSIX message queues (bytes, -q) 819200 #POSIX的消息队列的最大值为819200字节。
real-time priority (-r) 0 stack size (kbytes, -s) 10240 #进程的栈的最大值为10240字节。
cpu time (seconds, -t) unlimited #进程使用的CPU时间。
max user processes (-u) 98304 #当前用户同时打开的进程(包括线程)的最大个数为98304。
virtual memory (kbytes, -v) unlimited #没有限制进程的最大地址空间。
file locks (-x) unlimited #所能锁住的文件的最大个数没有限制。
[/code]

Linux中profile、bashrc、bash_profile之间的区别和联系

今天在学习iptables时突然想到用webbench做压力测试时,在服务器端可以使用命令查看并发访问量,但一时记不起命令了,就使用history |grep netstat 找到了以前的命令:netstat -te |grep -c :80,一时间就觉得history是个好东西,要怎么更改它记录的命令条数呢?(默认是1000条,好像。)于是我在.bashrc,.bash_profile,/etc/profile都找了下,一时间有点搞不清楚它们的作用了,于是google了下,下面做一些记录:

/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.
并从/etc/profile.d目录的配置文件中搜集shell的设置.
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该
文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该
该文件被读取.
~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是”父子”关系.

~/.bash_profile 是交互式、login 方式进入 bash 运行的
~/.bashrc 是交互式 non-login 方式进入 bash 运行的
通常二者设置大致相同,所以通常前者会调用后者。

设置生效:可以重启生效,也可以使用命令:source
alias php=/var/eyouim/pub/php/bin/php
source /etc/profile(立即生效)

在 /etc目录的bash.bashrc和profile是系统级(全局)的配置文件,当在用户主目录下找不到.bash_profile 和.bashrc\时,就会读取这两个文件。.bash_history是bash shell的历史记录文件,里面记录了你在bash shell中输入的所有命令。可通过HISSIZE环境变量设置在历史记录文件里保存记录的条数。

查看了下~/.bash_profile,~/.bashrc这两个文件,代码如下:

[code lang=”bash”]
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

[/code]

 

[code lang=”bash”]
# .bashrc

# User specific aliases and functions

alias rm=’rm -i’
alias cp=’cp -i’
alias mv=’mv -i’

# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
export LANG="zh_CN.UTF-8"
[/code]

不难发现在~/.bash_profile中调用了~/.bashrc,然后又调用了/etc/bashrc。所以一般我们只需要更改~/.bashrc就可以了,如设置命令的别名。而修改历史命令记录条数,我想对所有用户生效,于是更改了/etc/profile,在末尾加入:

[code lang=”bash”]
设置默认中文
export LC_ALL="zh_CN.UTF-8"
#设置超时自动登出
export TMOUT=500
export HISTSIZE=5000
[/code]
所以:对于更改系统的环境变量,一般是修改/etc/profile。

关于LINUX上的SHEBANG符号(#!)


无论我们在编写shell脚本还是python脚本时,在代码的第一行都会加上:#!,今天发现一个问题:在bash中直接运行py程序时即使我使用了正确的shebang行,py程序执行时仍就没有选择正确的解释器,突然想到之前python3 程序开发指南这本书有写到:
在UNIX上,当程序在控制台中被引用时,该文件的头两个字节先被读入。如果这两个字节是ASCII字符#!,shell就会认为该文件将要由解释器执行,并 且该文件的首行指定了要使用那个解释器。该行称为shebang(shell执行)行,如果存在,就必须为可执行文件的首行。
shebang行通常的呈现为如下两种形式之一:
#!/usr/bin/python3 或 #!/usr/bin/env python3
所以我把shebang行改为第一行程序就正确执行了。
下面是关于shebang符号的详细说明:
Shebang这个符号通常在Unix系统的脚本中第一行开头中写到,它指明了执行这个脚本文件的解释程序。

1. 如果脚本文件中没有#!这一行,那么它执行时会默认用当前Shell去解释这个脚本(即:$SHELL环境变量)。

2. 如果#!之后的解释程序是一个可执行文件,那么执行这个脚本时,它就会把文件名及其参数一起作为参数传给那个解释程序去执行。

3. 如果#!指定的解释程序没有可执行权限,则会报错“bad interpreter: Permission denied”。
如果#!指定的解释程序不是一个可执行文件,那么指定的解释程序会被忽略,转而交给当前的SHELL去执行这个脚本。

4. 如果#!指定的解释程序不存在,那么会报错“bad interpreter: No such file or directory”。
注意:#!之后的解释程序,需要写其绝对路径(如:#!/bin/bash),它是不会自动到$PATH中寻找解释器的。

5. 当然,如果你使用”bash test.sh”这样的命令来执行脚本,那么#!这一行将会被忽略掉,解释器当然是用命令行中显式指定的bash。

更详细的内容可以参见:笑看世界的博客
这个博主的博文挺好,以后要常去学习学习!

在vim中粘贴代码时缩进混乱问题

[iframe frameborder=”no” border=”0″ marginwidth=”0″ marginheight=”0″ width=520 height=86 src=”http://music.163.com/outchain/player?type=2&id=28481105&auto=1&height=66″][/iframe]

vim_keyboard有时我们将代码在wim的插入模式下粘贴时,会出现缩进与原来的代码不一致的问题,这会造成向python这类以缩进识别代码的语言无法运行,手动改起来十分麻烦,在网上查了下资料,可以在底行模式下使用如下命令再粘贴:

[code lang=”bash”]set paste[/code]

若觉得太麻烦的话也可以设置键盘映射,map <F10> :set paste<CR> :map <F11> :set nopaste<CR>

这样在粘贴前按F10键启动paste模式,粘贴后按F11取消paste模式即可。其实,paste有一个切换paste开关的选项,这就是pastetoggle。通过它可以绑定快捷键来激活/取消 paste模式。比如::
:set pastetoggle=<F11>

这样减少了一个快捷键的占用,使用起来也更方便一些。但,这是最方便的吗?Vimer们对高效的追求永无止境。还有其他更好地方法吗?你可能想到了,vim寄存器。对,使用vim寄存器 “+p 粘贴即可。根本不用考虑是否自动缩进,是否paste模式,直接原文传递!:”+p”.

vim