> date: 2016-03-18 19:43 ## 书籍 & 教程推荐 - [Linux快速工具教程](http://linuxtools-rst.readthedocs.org/zh_CN/latest/) - [每天一个linux命令](http://www.cnblogs.com/peida/tag/%E6%AF%8F%E6%97%A5%E4%B8%80linux%E5%91%BD%E4%BB%A4/) - [linux下杀死进程(kill)的N种方法](http://blog.csdn.net/andy572633/article/details/7211546) - [linux命令查询](http://wangchujiang.com/linux-command/) - [TCP/IP漫游](http://blog.mrriddler.com/2017/01/13/TCP:IP%E6%BC%AB%E6%B8%B8/) - linux 养成计划: http://www.imooc.com/video/3235 http://www.imooc.com/learn/111 os信息: `cat /etc/os-release` 内核版本: 所有 linux 系统都使用相同的内核, 可以在 https://www.kernel.org/ 查看 发行版本: redhat 系(centos) / debian 系(Ubuntu) 网站统计: http://www.netcraft.com/, 包括 server / os 等占比 Android: quicksshd 用来开启 ssh xshell: ssh 工具; 字体 / 字符编码 时区问题: 安装 tzdata 包, `cp /usr/share/zoneinfo/Asia/Shanghai > /etc/localtime`, 注意 PRC 不一定能生效 (`/etc/timezone`) dns: dig host nslookup whois ``` top -b -n2 -d5 hexdump -C ~/.toprc | head # top -W htop head -n2 ~/.config/htop/htoprc glances curl http://127.0.0.1:61209/api/3/all | python -mjson.tool | head -n50 https://github.com/nicolargo/glances/blob/develop/conf/glances.conf # debian sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list sed -i 's/http.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian-unstable.list ``` ## 服务管理 - [linux 服务管理](http://www.imooc.com/view/537): init.d 方式的服务管理 其实服务的管理很简单: **执行服务的可执行文件** 系统运行级别 run level: 0关机 1单用户模式(系统修复,类似window安全模式) 2不完全cli模式,不包含NFS服务 3完全cli模式 4系统保留 5图形模式 6重启 ip&端口: ip找到你的服务器; 端口查找服务器上面的对应服务, 0~2^16, tcp/udp可以使用相同的端口, 默认端口 ![init.d 服务管理总结](http://7xq89b.com1.z0.glb.clouddn.com/linux-service-manage.png) ``` # 服务管理 systemctl list-unit-files # linux修改了 runlevel 服务管理机制, 现在采用 systemd netstat -tulnp # t->tcp, u->udp, l->正在监听的网络服务, n->使用端口号, p->列出pid, a->all # PRM 独立服务 /etc/init.d/httpd start|stop|status|restart service httpd start|stop|status|restart # rh 系列 # 源码包服务 /path/to/httpd start|stop # 启动服务 /etc/rc.local # 设置服务自启动 ln -s /path/to/httpd /etc/init.d/ # 这样就可以使用 service 来管理 ``` ## 基础知识 严格区分大小写 一切皆文件, 包括硬件 扩展名: 不靠扩展名来区分文件类型, 加扩展名是为了帮助 **人** window 程序无法在 linux 运行 字符界面优势: 占用系统资源更少; 减少出错 / 被攻击 的可能 vmare: cpu 映射 / 克隆 分区: 主分区(最多4个, 由 **硬盘** 决定的) / 扩展分区(最多1个) -> 逻辑分区(多个); 挂载 文件系统: 格式化主要是为了修改 文件系统(FAT32 / NTFS / etx4); 特定区域写入特定数据; 4k对齐, 最小数据块(block)大小 硬链接: 系统通过文件的 i 节点来查找文件, 只要文件的 i 节点不变, 即使改名系统也可以找到这个文件 软链接: 快捷方式 文件时间: mtime 修改时间; atime 访问时间; ctime 改变时间; +10 10天前; 10 10天当天; -10 10天内 文件size: k/m 或者不带单位; +10k 大于 10k; 10k 等于 10k; -10k 小于 10k 系统运行级别: 0~6 特殊字符: 引号 / 通配符 / 反引号 / $xxx / $(xxx) ## 权限 目录: 相对路径 / 绝对路径 文件类型: -(文件) d(目录) l(链接) 权限: r(读) w(些) x(可执行) 用户 / 用户组 / 其他 ## 常用目录作用 usr: unix system resource 推荐放文件: `/root, /home/xxx` ``` /根目录 /lib 函数库 /bin 命令(普通用户可以读取) /usr/bin /sbin 命令, root 才可以执行 /usr/sbin /usr/local/bin 编译安装的软件最好放这里, 根据是否需要 root 权限执行放到不同的目录 /usr/local/sbin /boot 启动相关 /dev 特殊文件, 设备 /etc 配置文件 /root root用户 /home 普通用户 /media 3个空目录, 常用来挂载文件 /mnt /misc /proc 这里2个目录的内容直接写到内存 /sys /tmp 系统临时文件目录 ``` linux之禅 linux哲学 - 没有消息就是最好的消息 - graphical user interfaces make easy tasks easy, while command line interfaces make difficult tasks possible ubuntu wiki 几点忠告: - 不要当传教士 - 不要强迫自己 - 不要 ‘玩’ linux - 不要挑剔发行版 - 不要盲目升级 - 不要配置你不需要的东西 - 不要习惯使用 root;只在需要的时候使用 - 不要用商业眼光对待 linux - 干的正事去 ``` # 管道 | # 重定向 # 0 /dev/stdin 1 /dev/stdout 2 /dev/stderr /dev/null 2>&1 &> >& # 标准错误到标准输入 1>&2 # 标准输出到标准错误 # sudo %sudo ALL=(ALL) NOPASSWD: ALL # visudo # job control xxx & # 命令后台运行 nohup xxx # 将命令的所有输出输出到当前目录的 nohup.out 文件中 jobs -l # 列出当前 回话(session) 中处在后台的命令, 编号从 1 开始 C-z + bg # 将正在运行的命令放到后台 fg + num # 将后台运行的命令放到前台, num 就是 jobs -l 中的 num , 只有一个后台的任务的时候可以不加 # 小技巧 方向键 + tab !xxx: 执行命令历史中第一个 xxx 开头的命令 C-a/e/w/u/k/y/l/r : 行首 / 行尾 / 删除一个单词 / 删除光标前 / 删除光标后 / 还原 / 清屏 / 搜索之前执行的命令 注意查看 `You have new mail in /var/spool/mail/root` # 快捷键 C-c: 终止当前脚本 C-z: 放入后台 C-l: 清屏 C-u: 删除一行 C-a/e: 行首/行尾 C-r: 在历史命令中搜索 # 编译安装 gcc(C语言) / g++(c++) / clang(mac上经常使用) # 编译器 ./configure # shell脚本, 用来检测系统版本, 是否缺少类库, ./configure --help 看看有哪些编译参数可以用 make # 检测文件的依赖关系, 如果文件没有改动, 就不需要重新编译; 默认都是动态编译, 生成动态链接库 make -j # 使用多线程, 注意最好加数字, 限制线程数, 防止占用所有cpu make install ldconfig # 一般C语言的动态链接库都放到 /usr/lib 下, 可以新增一个配置放到 /etc/ld.so.conf.d/ 目录下执行 ldconfig, 就可以添加一个目录了 nm / strip # 查看一个可执行文件(c文件), 定义了哪些函数 ``` - 常用参数 a(--all): 全部 h(human): 人性化显示, 如 `ll -h` h(--help): 帮助 v/V(--version): 版本 v/V(--verbose): 冗长 / 啰嗦 r/R(--recursive): 递归 -p, --parents: 类似递归 ## 环境变量 **进程皆有环境**: 这是为什么有环境变量以及环境变量使用这么普遍的原因 - `$PATH`: 可执行文件的查找路径 - `.bashrc` 等配置文件 - `$PS1`: 终端提示符配置 - `$?`: 上一个程序的返回值 ## 用户管理 分开密码到一个文件的原因: 用户信息 / 用户组 信息经常需要修改, 所以权限不能很苛刻, 但是密码信息安全性要求高 ``` /etc/passwd 用户信息 /etc/shadow 用户密码 /etc/group 用户组信息, 如果当前组只有一个用户且和用户名相同, 则可以省略最后一个标识 /etc/gshadow 用户组密码, 这里可以看到组内的用户 /etc/nologin 不允许其他用户登录 groupadd -g groupmod -ng groupdel useradd -gd usermod -cldg userdel -r passwd -luda su id ```