linux命令笔记

linux常用命令

关机/重启

* shutdown -r now   # 立即重启(reboot)
* shutdown -h now   # 立即关机(poweroff)

文件管理

  • cat: 连接文件并打印到标准输出设备上

    1. cat 1.txt # 打印文件到控制台
    2. cat -n 1.txt # 打印文件到控制台并对每一行编号
    3. cat -b 1.txt # 打印文件到控制台并对每一行编号,不包括空白行
    4. cat 1.txt > 2.txt # 把1.txt的内容复制到2.txt中
    5. cat 1.txt >> 2.txt # 把1.txt的内容追加到2.txt中
    6. cat 1.txt 2.txt > 3.txt # 把1.txt和2.txt的内容复制到3.txt中
    7. cat null > 3.txt # 清空3.txt
  • chgrp: 变更文件或目录的所属群组

    1. chgrp -v user 1.txt # 修改1.txt的群组为user
    2. chgro -v -R user test # 修改test文件夹及其下面所有的文件的群组为user
    3. chgrp -v –reference=test2 test # 修改test文件夹的群组与test2的群组相同
  • chown: 指定文件的拥有者改为指定的用户或组

    1. chown user test # 把test文件夹所属用户改为user用户
    2. chown user:user test # 把test文件夹所属用户改为user用户,所属组设为user组
    3. chown -R user:user test # 把test文件夹及其下面所有的文件所属用户改为user用户,所属组设为user组
  • cksum: 检测文件是否被改动,确保文件从一个系统传输到另一个系统的过程中不被损坏

    1. cksum 1.txt # 若文件被改动,则两次输出结果不同
  • cmp: 比较两个文件是否相同(只显示第一次出现不同的位置,一般比较二进制文件)

    1. cmp 1.txt 2.txt # 如果两个文件相同,则不显示信息,否则显示第一个不同的位置
  • diff: 以逐行的方式,比较文本文件的异同处

    1. diff 1.txt 2.txt #
    2. diff 1.txt 2.txt -y # 以并列的方式显示文件的异同之处。
  • file: 查看文件类型

    1. file 1.js # 1.js: ASCII text
    2. file -i 1.js # 1.js: text/plain; charset=us-ascii(显示MIME类别)
  • find: 查找文件(find path -option [ -print ] [ -exec -ok command ] {} \;)

    1. find . -name “*.js” # 查找当前目录下的所有.js的文件
    2. find . -type f # 查找当前目录所有文件
    3. find . -type d # 查找当前目录下的所有目录(文件夹)
    4. find . -name “*.js” -exec ls -l {} \; # 查找当前目录下的所有.js的文件并列出它们的完整路径(-exec参数后面的命令可以操作查找出来之后的结果)
  • ln: 为某一个文件在另外一个位置建立一个同步的链接

    1. ln -s node/index.js aa/index.js # 在aa文件夹下创建一个软连接,指向node/index.js
  • less: 查看文件(可分页和搜索)less 1.html

    1. 内部快捷键:
      • /post # 向下查找
      • ?post # 向上查找
      • n # 重复前一个搜索,接着查找
      • N # 反向重复前一个搜索
      • pagedown # 向下翻动一页
      • pageup # 向上翻动一页
      • -N: # 显示行号
      • -m: # 显示百分比
      • -i: # 忽略搜索大小写
  • mv: 为文件或目录改名、或将文件或目录移入其它位置

    1. mv 1.js 2.js # 把1.js文件名修改为2.js
    2. mv 1.js ../node/ # 移动文件
  • paste: 会把每个文件以列对列的方式,一列列地加以合并

    1. paste 1.txt 2.txt # 按列合并文件(按行合并用cat)
  • rm: 删除一个文件或者目录

    1. rm -f 1.txt # 删除文件,无需确认
    2. rm -rf aa # 删除文件夹及其文件,无需确认
  • tee: 读取标准输入的数据,并将其内容输出成文件

    1. ping baidu.com | tee 1.txt # 把ping的结果实时的存进1.txt文件
    2. ping baidu.com | tee 1.txt -a # 把ping的结果实时的追加到1.txt文件
  • touch: 修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件

    1. touch 1.txt # 文件若不存在,则创建,若存在,则修改时间属性为当前系统时间(可用 ls -l 查看)
    2. touch {1..6}.txt # 创建1.txt, 2.txt, … 6.txt等6个文件
  • cp: 复制文件或目录

    1. cp ../1.txt . # 复制上一次的1.txt文件到本目录
    2. cp -r ../aa . # 复制上一次的aa文件夹到本目录
  • 文件上传

    1. yum install -y lrzsz
    2. rz # 上传
    3. sz # 下载

防火墙

  • firewall-cmd –query-port=80/tcp # 查询防火墙指定端口是否开启
  • firewall-cmd –zone=public –add-port=80/tcp –permanent # 开启防火墙端口(需重新载入)
  • firewall-cmd –zone=public –remove-port=80/tcp –permanent # 关闭防火墙端口(需重新载入)
  • firewall-cmd –reload # 防火墙重新载入
  • systemctl start firewalld # 开启防火墙
  • systemctl stop firewalld # 关闭防火墙
  • firewall-cmd –state # 查看防火墙状态
  • firewall-cmd –list-ports # 查询防火墙已开放的端口
  • firewall-cmd –list-all # 查询防火墙信息

用户管理

  • useradd user # 创建新用户
  • passwd user # 设置密码
  • userdel user # 删除用户
  • su user # 切换用户
  • groupadd testgroup # 添加组
  • groupdel testgroup # 删除组
  • cat /etc/passwd # 查看所有用户
  • cat /etc/group # 查看所有组

发送请求

curl

  • -b [str/url]: 使用cookie字符串或文件用来向服务器发送 Cookie
  • -X [type]: 请求类型(POST)
  • -o [url]: 抓取内容到一个文件
  • -d: 传输数据(-d log=aaaa)
  • -x: 代理(-x 24.10.28.84:32779)

压缩

  • tar -czvf a.tar.gz a.txt # 压缩a.txt文件(c: create创建, z: gzip压缩, v: 显示压缩的文件信息, f: file压缩文件名)
  • tar -tzvf a.tar.gz # 查看压缩包包含哪些文件(t: 不解压查看tar包的内容)
  • tar -xzvf a.tar.gz # 解压(x: 解压tar包)
  • zip -v a.zip a.txt b.txt # 压缩a.txt和b.txt或者向压缩文件追加(v: 显示压缩信息)
  • zip -d a.zip 3.txt # 从压缩包删除文件(d: 删除文件)
  • zip -r aa.zip ./aa # 压缩文件夹(r: 压缩目录)
  • zip -v a.zip {1..6}.txt -x “3.txt” # 压缩1,2,4,5,6.txt文件(x: 排除文件或文件夹)
  • unzip a.zip # 解压到当前目录

vsftpd(配置文件删除后面的注释及空格)

  • yum install vsftpd -y # vsftpd安装
  • useradd ftpadmin -s /sbin/nologin # 新建虚拟宿主用户
  • 配置vsftpd的文件

    1
    2
    3
    4
    5
    6
    7
    8
    listen=YES
    listen_ipv6=NO
    allow_writeable_chroot=YES
    chroot_list_enable=NO
    chroot_local_user=YES
    guest_enable=YES # 启用虚拟用户
    guest_username=ftpadmin # 虚拟宿主用户名
    user_config_dir=/etc/vsftpd/user_conf
  • mkdir /etc/vsftpd/user_conf/ # 虚拟用户配置文件存放路径

  • 生成虚拟用户的数据库文件
    1. vi /etc/vsftpd/login.txt # 奇数行为用户名,偶数行为密码
    2. db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/vsftpd_login.db # 转换成db文件
    3. chmod 600 /etc/vsftpd/vsftpd_login.db # 权限设置
  • 生成一个使用vsftpd_login.db数据文件的PAM认证文件
    1. vi /etc/pam.d/vsftpd # 注释文件内的所有行,添加下面2,3行
    2. auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login crypt=hash
    3. account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login crypt=hash
  • 创建虚拟用户的配置文件

    1. cd /etc/vsftpd/user_conf
    2. vi test # 新建文件(文件名为虚拟用户表中的名字),并写入下面的权限
      1
      2
      3
      4
      5
      6
      local_root=/home/ftpadmin       # 访问目录
      write_enable=YES # 写入的权限
      anon_world_readable_only=NO
      anon_upload_enable=YES
      anon_mkdir_write_enable=YES
      anon_other_write_enable=YES
  • systemctl restart vsftpd # 重启服务

git

常用命令

  • git init # git初始化
  • git add 1.js # 添加文件到暂存区
  • git add . # 添加当前文件夹的所有文件到暂存区
  • git commit -m “…” # 提交到分支
  • git commit -a -m “…” # 从工作区直接提交,跳过暂存区
  • git commit –amend # 合并上次的提交,即如果提交内容少了,可以用此追加提交
  • git rm a.txt # 从暂存区移除文件,并把工作区文件一并删除
  • git rm –cached a.txt # 从暂存区移除文件,不删除本地文件
  • git clone [url] # 克隆现有项目
  • git status -s
    1. ?? # 尚未添加到暂存区
    2. M # 工作区文件修改(表示空格)
    3. M_ # 暂存区文件修改
    4. A_ # 新添加到暂存区
    5. _D # 工作区文件删除
    6. _R # 工作区文件重命名
  • git mv a.txt b.txt # 暂存区和工作区文件重命名(相当于以下三条命令)
    1. mv a.txt b.txt
    2. git rm a.txt
    3. git add b.txt
  • git log # 查看提交历史
    1. -p # 显示每次提交的差异
    2. -2 # 仅显示最近两次提交
    3. –stat # 显示文件提交信息
    4. –pretty= # 格式化显示信息
      1. oneline # 单行显示
      2. short
      3. full
      4. fuller
      5. format:”%h - $an, %ar : %s”
        1. %H # commit完整哈希值
        2. %h # commit简短哈希值
        3. %an # 作者名字
        4. %ae # 作者邮箱
        5. %ad # 作者修订日期
        6. %ar # 作者修订日期,按多久之前显示
        7. %cn # 提交者名字
        8. %ce # 提交者邮箱
        9. %cd # 提交者提交日期
        10. %cr # 提交者提交日期,按多久之前显示
        11. %s # 提交说明
    5. –graph # 显示 ASCII 图形表示的分支合并历史
    6. –since=2.weeks # 从什么日期(1.years1.days5.minutes 2019-01-12)
    7. –until # 到什么日期
    8. -S “aaa” # 查找某次提交记录添加或删除某些字符串的记录
    9. [path] # 查看某个文件或文件夹的提交记录
    10. –author= # 仅显示指定作者相关的提交
  • git reset
    1. 设工作区为A,暂存区为B,分支为C
    2. git reset –soft [HEAD] # 移动分支HEAD到指定位置,不取消暂存(撤销commit命令),只修改C
    3. git reset [HEAD] # 移动分支HEAD到指定位置,并取消暂存(撤销commit命令和add命令),修改B和C
    4. git reset –hard [HEAD] # 移动分支HEAD到指定位置,取消暂存,并撤销本地文件的修改,修改ABC(不安全,可能会丢失版本)
    5. git reset [file] # 取消某个文件暂存(与 git add 相反)
    6. git reset [HEAD] [file] # 某个文件暂存区重置到指定位置,只修改B(相当于A先重置,再add到B,A再恢复)
  • git checkout – [file] # 撤销文件修改
  • git reflog # 查找之前的记录
  • git remote
    1. git remote -v # 查看当前关联的远程库(cat .git/config)
    2. git remote add [pb] [url] # 关联远程库,pb为远程 Git 仓库简写
    3. git remote show [pb] # 查看某个远程库信息
    4. git remote rename [opb] [npb] # 改名
    5. git remote rm [pb] # 移除远程库
  • git revert -n [HEAD] # 只撤销某一步的修改,然后重新提交
  • git diff [] [file] # 比较某文件工作区与暂存区(或指定commit-id)差异
    1. –cached/staged [] [file] # 比较某文件暂存区与版本库(或指定commit-id)差异
    2. HEAD [file] # 比较某文件工作区与版本库差异
    3. git diff [] [] [file] # 比较某文件两个commit-id之间的差异
    4. –stat # 不显示详细信息,只显示有多少行被改动

分支

  • git branch # 查看当前分支
    1. [b] # 创建分支
    2. -d [b] # 删除分支(未合并的分支会删除失败)
    3. -D [b] # 强制删除分支
    4. -v # 查看每个分支的最后一次提交
    5. –merged # 查看哪些分支已经合并到当前分支
    6. –no-merged # 查看所有包含未合并工作的分支
  • git checkout
    1. [b] # 切换分支
    2. -b [b] # 创建并切换分支
  • git merge [b] # 合并某分支到当前分支

整合分支的修改(合并test分支到master)

  1. 合并分支(git merge test)
  2. 变基(提交历史可能会丢失)
    1. git checkout test
    2. git rebase master
    3. git checkout master
    4. git merge test
  3. 不同之处:合并分支的历史记录为并行的,变基的历史记录为串行的
  4. 注意:不要对在你的仓库外有副本的分支执行变基

git远程分支

  1. 当从远程库克隆时,会为你自动将其命名为 origin(git clone -o [test] [url],可以改为test),拉取它的所有数据,创建一个指向它的 master 分支的指针,并且在本地将其命名为 origin/master(跟踪分支)。
  2. Git 也会给你一个与 origin 的 master 分支在指向同一个地方的本地 master 分支。
  3. 本地提交的时候master指针移动,但是origin/master指针不会移动

    a=>b=>c=>d=>e # 远程分支,本地在c处克隆,远程继续提交d和e,远程master指向e处

    a=>b=>c # 本地origin/master指向c处,只要不与服务器连接,指针不移动

    a=>b=>c=>f=>g # 本地master分支初始指向c处,继续提交f和g,master指向g处

  4. git fetch origin: 获取本地没有的远程库origin数据,移动 origin/master 指针指向新的、更新后的位置

    a=>b=>c=>d=>e # 远程分支,本地在c处克隆,远程继续提交d和e,远程master指向e处

    a=>b=>c=>d=>e # 本地origin/master指针移动到远程origin最新处,指向e

    a=>b=>c=>f=>g # 本地master分支初始指向c处,继续提交f和g,master指向g处

  5. git merge origin/master: 合并到当前分支
  6. git checkout -b newBranch origin/master: 新建分支,并指向跟踪分支的位置(跟踪分支和分支不同的是只有一个指针,不含可编辑的副本)
  7. git push origin –delete master: 删除远程分支

git配置自定义服务器

  1. useradd git # 管理员创建用户
  2. passwd git # 设置git用户密码
  3. su git # 切换git用户
  4. mkdir .ssh
  5. chmod 700 .ssh
  6. cd .ssh
  7. touch authorized_keys # 创建保存公钥的文件
  8. chmod 600 authorized_keys
  9. vi authorized_keys # 把公钥写进文件(如果用户的公钥不在文件中,则每次需要输入登录密码)
  10. cd /home/git # 回到主目录
  11. git init –bare test.git # 新建空仓库
  12. 本地测试
  13. git remote add local git@ip:/home/git/test.git # 关联远程库
  14. git push local master # 本地推送

GitWeb

  1. yum install git-instaweb # 安装
  2. git instaweb -p 3000 # 修改监听端口(先进入仓库所在目录)
  3. git instaweb –start # 启动服务

GitLab

基本命令
  • gitlab-ctl reconfigure # 重启配置,并启动gitlab服务
  • gitlab-ctl start # 启动所有
  • gitlab-ctl restart # 重新启动GitLab
  • gitlab-ctl stop # 停止所有
  • gitlab-ctl status # 查看服务状态
  • gitlab-ctl tail # 查看Gitlab日志
  • vim /etc/gitlab/gitlab.rb # 修改默认的配置文件
centos7安装
  • yum install -y curl policycoreutils-python openssh-server # 防火墙中打开HTTP,HTTPS和SSH访问
  • systemctl enable sshd
  • systemctl start sshd
  • firewall-cmd –permanent –add-service=http
  • firewall-cmd –permanent –add-service=https
  • systemctl reload firewalld
  • yum install postfix # 邮件服务
  • systemctl enable postfix
  • systemctl start postfix
  • curl https:#packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash # 下载速度慢,可以先下载安装包,用rpm -ivh安装
  • EXTERNAL_URL=”https:#gitlab.example.com” yum install -y gitlab-ee
邮件配置
  • 修改配置文件/etc/gitlab/gitlab.rb

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    gitlab_rails['smtp_enable'] = true
    gitlab_rails['smtp_address'] = "smtp.qq.com"
    gitlab_rails['smtp_port'] = 465
    gitlab_rails['smtp_user_name'] = "******@qq.com"
    gitlab_rails['smtp_password'] = "授权码"
    gitlab_rails['smtp_domain'] = "smtp.qq.com"
    gitlab_rails['smtp_authentication'] = "login"
    gitlab_rails['smtp_enable_starttls_auto'] = true
    gitlab_rails['smtp_tls'] = true
    gitlab_rails['gitlab_email_from'] = '******@qq.com'
  • gitlab-rails console # 进入控制台

    1. Notify.test_email(‘收件人邮箱’, ‘title’, ‘body’).deliver_now # 发送邮件测试

docker常用命令

  1. docker rm -f id # 删除镜像
  2. docker rmi REPOSITORY:TAG # 删除容器
  3. docker build -t hsiangleev/httptest:v1 . # 构建容器(.为查找当前目录下的Dockerfile)
  4. docker run -d -p 127.0.0.1:3000:3000 hsiangleev/httptest:v1 # 运行容器

linux常见错误

centos7修改网络配置文件

  1. vi /etc/sysconfig/network-scripts/ifcfg-eth0 修改ONBOOT=yes
  2. systemctl restart network.service # 重启网络服务
  3. systemctl status network # 查看网络状态

安装ifconfig

  1. yum search ifconfig
  2. yum install net-tools.x86_64

centOS 7 network服务重启不了

  1. 执行service network restart,提示Restarting network (via systemctl): Job for network.service failed because the control process exited with error code.See "systemctl status network.service" and "journalctl -xe" for details. [失败]
  2. 和 NetworkManager 服务有冲突
  3. 关闭服务service NetworkManager stop
  4. 禁止开机启动 chkconfig NetworkManager off
  5. 网卡重启 service network restart
0%