Menu

10/2/19

Phân quyền file/folder trong linux






Ta cần quan tâm đến 2 lệnh chmod và chown

-chmod: dùng phân duyền truy cập cho file và thư mục
-chown: chuyển quyền sở hữu file và thư mục.

Nếu các bạn không biết sử dụng như thế nào, ta hãy kham khảo lệnh help nhé, kết quả:

[alex@localhost Desktop]$ chmod --help
Usage: chmod [OPTION]... MODE[,MODE]... FILE...
  or:  chmod [OPTION]... OCTAL-MODE FILE...
  or:  chmod [OPTION]... --reference=RFILE FILE...
Change the mode of each FILE to MODE.
With --reference, change the mode of each FILE to that of RFILE.

  -c, --changes          like verbose but report only when a change is made
  -f, --silent, --quiet  suppress most error messages
  -v, --verbose          output a diagnostic for every file processed
      --no-preserve-root  do not treat '/' specially (the default)
      --preserve-root    fail to operate recursively on '/'
      --reference=RFILE  use RFILE's mode instead of MODE values
  -R, --recursive        change files and directories recursively
      --help     display this help and exit
      --version  output version information and exit

tạm hiểu như sau:

-c: khi phân quyền có sự thay đổi thì mới thông báo
-f: làm trong im lặng, bỏ qua thông báo lỗi.
-v:báo cáo chi tiết từng file khi thực thi.
-R: lệnh này quan trọng, dùng đệ quy cho thư mục (tức là áp dụng cho toàn bộ file/folder chon trong thư mục cha.




Each MODE is of the form '[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+'.

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>

For complete documentation, run: info coreutils 'chmod invocation'


Có 3 loại người tương tác với file/folder trong OS linux,

owner: người chủ sở hữu tạo ra file/folder đó.
group: tất cả người dùng thuộc cùng 1 group
other: những người dùng khác, không cùng group hoặc owner

-quyền truy cập file và thư mục tương tứng với các con số, và chữ cái sau

+read : 4 -r
+write: 2 -w
+execute : 1 -e

-các ví dụ sau phân quyền cho file, nếu là thư mục directory sẽ có chữ "d" đầu tiên từ trái qua phải.

-rw- - : tương ứng số 600: chủ sở hữu có quyền đọc/ghi
-rw-r-r-: tương ứng số 644: chủ sở hữu có quyền đọc/ghi, group và other chỉ có quyền read.
-rwxrwxrwx: tương ứng với số 777 full quyền read/write/execute cho owner/group/other


+Lệnh chmod: phân quyền cho file/ thư mục


vd1: chỉ cho phép chủ sở hữu có quyền đọc ghi

[alex@localhost Desktop]$ chmod 600 test.txt 

-kiểm tra lại sau khi phân quyền:

[alex@localhost Desktop]$ ls -l
total 476
-rw-------. 1 alex alex      0 Oct  2 20:16 test.txt

vd2: mình phân full quyền cho folder abc, trong folder abc này có 2 file test và test1. Không quan tâm nó có những gì, ta hãy dùng tùy chọn -R nhé.

[alex@localhost Desktop]$ chmod 777 -R abc

-ta kiểm tra lại:

[alex@localhost abc]$ ls -l
total 4
-rwxrwxrwx. 1 alex alex 14 Aug 28 21:35 test2.txt

-rwxrwxrwx. 1 alex alex  0 Oct  2 20:16 test.txt

+Lệnh chown: thay đổi chủ sở hữu cho file/folder.

Tương tự như lệnh chmod:

vd1: thay đổi quyền sở hữu cho file test.txt có owner là alex, thuộc group root.

[alex@localhost Desktop]$ sudo chown alex:root test.txt

kiểm tra lại,

[alex@localhost Desktop]$ ls -l
total 476
-rw-------. 1 alex root      0 Oct  2 20:16 test.txt


vd2: thay đổi quyền sở hữu cho thư mục abc có owner là alex, thuộc group root., áp dụng đệ quy cho folder:


[alex@localhost Desktop]$ sudo chown alex:root abc

kiểm tra lại,

[alex@localhost Desktop]$ ls -l
total 476
drwxrwxrwx. 2 alex root     39 Oct  2 20:22 abc

















9/19/19

Thao tác ban đầu trên centos


Tìm hiểu hệ điều hành Centos


Hiển thị thông tin ip

-ip add show

Hiển thị trạng thái card

# nmcli -p dev
============================================
Status of devices
============================================
DEVICE TYPE STATE CONNECTION
--------------------------------------------
ens19 ethernet disconnected --
ens18 ethernet connected --
lo loopback unmanaged

Cấu hình ip theo chế độ dhcp

dùng lệnh cd chuyển đến network-scripts vào thay đổi nội dung file ifcfg-eth0

 vi /etc/sysconfig/network-scripts/ifcfg-eth0
nội dung như sau:


DEVICE=eth1
BOOTPROTO=dhcp
TYPE=Ethernet
ONBOOT=yes

Gõ phím “I” để insert, sau khi chỉnh sửa “esc” để thoát ra.
Khi save ta chọn “ :w “ rồi nhấn enter.
-khởi động lại service network 1 lần

systemctl restart network

-gõ lệnh init 6 để khởi động lại Centos

Cấu hình địa chỉ IP tĩnh , chinh sửa nội dung card ens33

HWADDR=00:08:A2:0A:BA:B8
TYPE=Ethernet
BOOTPROTO=none
# Server IP #
IPADDR=192.168.2.203
# Subnet #
PREFIX=24
# Set default gateway IP #
GATEWAY=192.168.2.254
# Set dns servers #
DNS1=192.168.2.254
DNS2=8.8.8.8
DNS3=8.8.4.4
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
# Disable ipv6 #
IPV6INIT=no
NAME=eth0
# This is system specific and can be created using 'uuidgen eth0' command #
UUID=41171a6f-bce1-44de-8a6e-cf5e782f8bd6

DEVICE=ens33

ONBOOT=yes



Hướng dẫn cài đăt GUI cho centos

-cài package vào
[root@centos7 ~]# yum groupinstall "GNOME Desktop" –y

-kiểm tra template mặc định
[root@centos7 ~]# systemctl get-default multi-user.target

-set default-template sau đó kiểm tra lại
[root@centos7 ~]# systemctl set-default graphical.target

-chuyển sang chế độ GUI lập tức
[root@centos7 ~]# systemctl isolate graphical.target

Hướng dẫn cài đặt ibus-unikey

-update hệ thống
#yum -y update

-cài pm ibus-unikey
#yum -y install ibus-gtk ibus-qt

-vào setting toolsàsettingàregion and language
+ add àvietnameseàibus-unikey (vietname-vni)

 



9/16/19

Quản lí user và group


Quản lí user và group trên centos


XEM

-Danh sach user bằng công cụ vim (cat)
[alex@localhost ~]$ vim /etc/passwd
test:x:1001:1001::/home/test:/bin/bash

-user là test
-pass: đã mã hóa là x
-userid là 1001
-group id là 1001
-home directory là /home/test
-shell directory là /bin/bash

-Danh sach group bằng vim |(cat)
[alex@localhost ~]$ vim /etc/group

sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:

-Kiểm tra id user/group

+tìm id user
[alex@localhost ~]$ id -u newuser01
1001

+tìm id group
[alex@localhost ~]$ id -g u11
1006
+xem id của user và group đồng thời
[alex@localhost ~]$ id u11
uid=1001(u11) gid=1006(u11) groups=1006(u11)

-Xem user test thuộc group nao?

[root@localhost Desktop]# groups test
test : Testgroup

+xem lại user01 thuộc primary và secondary group nào?
[root@localhost ~]# groups user01
user01 : u1 g11

TẠO

-Tạo user mới tên là test

[alex@localhost Desktop]$ sudo useradd test

-Xoa user ten u2. tùy chỉnh -r (cho phép xóa luộn thư mục homedir của user.
[root@localhost Desktop]# userdel -r u2

-Thay đổi password cho user test
[alex@localhost Desktop]$ sudo passwd test

-Tạo 1 group tên là Testgroup
[alex@localhost Desktop]$ sudo groupadd Testgroup

-Thêm user01 vào primary group là u1 và secondary group là g11
[root@localhost ~]# usermod -g u1 -G g11 -c "USER 01 COMMENT" user01

THAY ĐỔI VÀ XÓA

+Khóa user u1
# usermod –L u1 #lock user

+Mở khóa user u1
# usermod –U u1 #unlock user

-Chuyển user test vào Testgroup
[root@localhost Desktop]# usermod -g Testgroup test

-Xóa user u11 khỏi group g11
[root@localhost Desktop]# gpasswd -d u11 g11
Removing user u11 from group g11

-Xóa group user01
[root@localhost ~]# groupdel user01


-

Lệnh căn bản linux



vài phím tắt

ctr+u : xóa dòng hiện hành đang gõ lệnh
ctr+a : đưa con trỏ về đầu dòng
ctr+e: đưa con trỏ về cuối dòng

copy và paste trong terminal

ctr+shift+c :copy
ctr+shift+v :dán



Lệnh kiểm tra performance



-giải phóng dung lượng ổ cứng linux

vào software center : xóa pm không cần thiết

-xóa các package không cần thiết

sudo apt-get autoremove

sudo apt-get autoclean

-xem thông tin cpu

linux@kali:~$ cat /proc/cpuinfo

-xem thông tin ram

linux@kali:~$ cat /proc/meminfo

-xem thông tin phiên bản hđh

linux@kali:~$ cat /proc/version

linux@kali:~$ uname -a

-xem ram còn trống?

linux@kali:~$ free -m

-xem ổ cứng chứa os linux còn trống?

linux@kali:~$ df -h

-xem các ổ cứng có trong linux

linux@kali:~$ sudo fdisk -l

-xem dung lượng thư mục hiện tại

linux@kali:~/Desktop/books$ du -sh

-xem theo kiểu đệ quy (cả thư mục con)

linux@kali:~/Desktop/test03$ du -ah

-xem dung lượng cpu, ram, và các process đang chạy (1 cách vắn tắt)

linux@kali:~/Desktop/test03$ top

xóa pm skype với dpkg


apt-get –-purge remove skypeforlinux



Lệnh hệ thống


xem địa chỉ IP

ip add show

thoát khỏi cửa sổ dòng lệnh.

exit

 -log off khỏi linux-OS

Grome-session-quit

-tắt máy

init 0

-khởi động lại máy

init 6

-khởi động lại máy

reboot

 -xem tên máy tính

hostname

 -xóa trắng terminal

clear

- xem lịch hệ thống

cal

 -xem ngày hệ thống

date

Lệnh xử lý tập tin



 LIỆT KÊ


-liệt kê thư mục hiện tại
linux@kali:~$ ls

--liệt kê thư mục hiện tại (bao gồm cả định dạng và file ẩn)

linux@kali:~$ ls -al                

CHUYỂN DIRECTORY

-chuyển từ thư mục hiện tại sang desktop

linux@kali:~$ cd Desktop

-chuyển từ thư mục hiện tại sang thư mục riêng

linux@kali:~/Desktop/test03$ cd

-back lại 1 thư mục trước đó

linux@kali:~/Desktop/test03$ cd ..

-xem hiện tại đang ở thư mục nào?

linux@kali:~$ pwd

TẠO THƯ MỤC-FILE

-tạo một thư mục mới là test04 tại desktop

linux@kali:~/Desktop$ mkdir test04

-tạo 1 file f1.txt tại desktop

linux@kali:~/Desktop$ cat >f1.txt

linux@kali:~/Desktop$ touch f1.txt

XÓA


 Remove: viết tắc lệnh là rm

có các tùy chỉnh:

-i đưa ra xác nhận xóa hay ko : y/n
-f tức là force phải xóa trong silent
-r là xoá có dùng đệ quy, áp dụng cả thư mục con
-v tức là verbose: đưa ra info chi tiết với file đã thao tác.

-xóa tập tin text.txt

linux@kali:~/Desktop$ rm test.txt


-xóa thư mục test04 có dùng đệ quy
linux@kali:~/Desktop$ rm -r test04

ép xóa 1 tập tin
linux@kali:~/Desktop$ rm -f text.txt

ép xóa thư mục có dùng đệ quy
linux@kali:~/Desktop$ rm -rf test03

COPY

-copy file command.pdf sang thư muc test,có yêu cầu xác thực đè chồng (y/n) khi file đã tồn tại

cp -i  linux\ command.pdf test

copy thư mục test02 có nhiều thư mục con sang test03, ta sử dụng đệ quy -r

linux@kali:~/Desktop$ cp -r test02/* test03

copy nội dung file1 sang file 2

linux@kali:~/Desktop$ cp f1.txt f2.txt

copy file và thư mục con test01 sang test02, tạo test02 nếu chưa tồn tại

linux@kali:~/Desktop$ cp -r test01 test02

ĐỔI TÊN, CHUYỂN FILE-THƯ MỤC SANG ĐƯỜNG DẪN KHÁC

Lệnh move

-tương tự với lệnh copy nhưng kí hiệu là mv có thêm tùy chỉnh update nếu file chưa tồn tại -u

move nội dung thư mục test01 sang test02 có cảnh báo đè chồng nều trùng

mv -i test01 test02

move cập nhật nội dung test01 cho test02 nếu file chưa tồn tại, update thông tin file nếu chưa có

mv -u test01 test02

đổi tên f1.txt thành save.txt
linux@kali:~/Desktop$ mv f1.txt save.txt

THÊM , TRUY VẤN NỘI DUNG

viết nội dung (gõ từ bàn phím ) vào tệp txt bằng lệnh cat
linux@kali:~/Desktop$ cat >t.txt
hello, i write a line

xem nội dung file t.txt từ desktop
linux@kali:~/Desktop$ more t.txt
hello, i write a line

hiển thị nội dung 10 dòng đầu file t.txt
linux@kali:~/Desktop$ head t.txt

SAhello, i write a line
SAhello, i write a line
SAhello, i write a line
SAhello, i write a line
SAhello, i write a line
SAhello, i write a line
SAhello, i write a line
SAhello, i write a line
SAhello, i write a line

tương tự, hiển thị 10 dòng cuối file t.txt
linux@kali:~/Desktop$ tail t.txt
5
2
42
34
R23
4R
23

Các thao tác thường dùng



tính năng gợi nhớ lệnh, gõ thiếu lệnh và nhấn tab, tab.…

linux@kali:~$ ca
cabextract           cal                  cardos-tool
cache_check          calc_tickadj         cardselect.py
cache_dump           calendar             caribou-preferences
cachedump            caller               case
cache_metadata_size  cancel               cat
cache_repair         capinfos             catchsegv
cache_restore        capsh                catman
cache_writeback      captoinfo           
cadaver              captype       

tính năng hỏi lệnh này dùng làm gì qua whatis

linux@kali:~$ whatis cal

cal (1)              - displays a calendar and the date of Easter


xem trình trạng sử dụng os linux

linux@kali:~$ df

Filesystem     1K-blocks     Used Available Use% Mounted on
udev             4016328        0   4016328   0% /dev
tmpfs             807824     9976    797848   2% /run
/dev/sda5       25149700 20296260   3552860  86% /
tmpfs            4039112    22164   4016948   1% /dev/shm
tmpfs               5120        4      5116   1% /run/lock
tmpfs            4039112        0   4039112   0% /sys/fs/cgroup
/dev/sda1         307032    26600    280432   9% /boot/efi
tmpfs             807820       12    807808   1% /run/user/131
tmpfs             807820       24    807796   1% /run/user/1001
xem trinh trạng RAM, swap space


linux@kali:~$ free
              total        used        free      shared  buff/cache   available
Mem:        8078228     2210120     3606616      339836     2261492     5224732
Swap:       5897212           0     5897212

xem thông tin file

linux@kali:~/Desktop$ file kaliguide..docx

kaliguide..docx: Microsoft Word 2007+


chuyển windows tabs

alt+tab


tìm đường dẫn 1 ứng dụng đang chạy

cách 1:

linux@kali:~$ whereis libreoffice6.2
libreoffice6: /usr/local/bin/libreoffice6.2

cách 2:

linux@kali:~$ dpkg-query -L libreoffice6.2

result:

/opt/libreoffice6.2/share/xdg/math.desktop
/opt/libreoffice6.2/share/xdg/startcenter.desktop
/opt/libreoffice6.2/share/xdg/writer.desktop
/opt/libreoffice6.2/share/xdg/xsltfilter.desktop



/opt/google/chrome/goole-chrome.desktop
/usr/share/applications/google-chrome.desktop
/usr/local/share/applications/google-chrome.desktop




3/31/19

Thread trong java



Tính kế thừa trong java

-Là một kĩ thuật mà một đối tượng có thể kế thừa tất cả các thuộc tính và hành vi -phương thức của lớp cha.

-Khi kế thừa lớp cha, ta có thể ghi đè-override hay thêm các phương thức khác.

-Chúng ta sử dụng từ khóa extends của lớp con để có thể kế thừa các thuộc tính của lớp cha trừ các thuộc tính private của lớp cha.

Cú pháp như sau:


class ten_lop_con extends ten_lop_cha  
{  
   //cac phuong thuc va cac truong  
}  


Ví dụ 1, -Kế thừa lớp Thread cha thông qua từ khóa extends, và insert phương thức run()

Tạo nhanh 1 thread kế thừa phương thức cha của lớp Thread, cứ mỗi 1s xuất ra câu xin chào, dủ 10 lần thì ngưng.


-Tạo 1 project mới có tên "DemoThread", tôi thực hiện trên IDE của Eclipse.






-Sau khi có project rồi, ta phải tạo thêm package có tện là DemoThread1.

























-Ta click phải vào package, chọn new class, đặt tên là MyThread1, tick chọn checkbox tạo ra phương thức main().























Kết quả như sau:


package DemoThread1;

public class MyThread1
 
{

 public static void main(String[] args) {
  // TODO Auto-generated method stub

 }

}


Tiếp tục, ta tạo ra một class con (có tên là RunThread) kế thừa lớp Thread (lớp cha -sẵn có).



package DemoThread1;

class RunThread extends Thread
{
 
 click phải ở đây chọn Source-->Override/Implement methods--> run().
 
}

public class MyThread1 {

 public static void main(String[] args) {
  // TODO Auto-generated method stub

 }

}


Ta được kết quả sau:


package DemoThread1;

class RunThread extends Thread
{

 @Override
 public void run() {
  // TODO Auto-generated method stub
  super.run();
 }
 
 
 
}

public class MyThread1 {

 public static void main(String[] args) {
  // TODO Auto-generated method stub

 }

}

Ta hãy code chức năng xuất ra câu chào cứ mỗi 1s cho phương thức run() nhé,lưu ý khi dùng 

phương thức Sleep, IDE bắt ta phải thêm khối try/catch để bắt lỗi, click phải vào lỗi màu đỏ,

chọn Surrounds with try/catch. Sau khi code xong ta tiến hành implement vào class MyThread1

tạo 1 class mới có tên là t1, và start nó thôi.




package DemoThread1;

class RunThread extends Thread
{

 @Override
 public void run() 
 {
  for (int i=0;i<10;i++)
  {
   System.out.println("xin chao lan thu "+i);
   try {
    Thread.sleep(1000);
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  
 }
 
 
 
}


public class MyThread1 {

 public static void main(String[] args) {
 
  
  RunThread t1=new RunThread();
  
  t1.start();

 }

}

Kết quả hiển thị.



xin chao lan thu 0
xin chao lan thu 1
xin chao lan thu 2
xin chao lan thu 3
xin chao lan thu 4
xin chao lan thu 5
xin chao lan thu 6
xin chao lan thu 7
xin chao lan thu 8
xin chao lan thu 9


Ví dụ 2, implements interface Runnable có sẵn.

click phải vào src ta chọn new package đặt tên là DemoThread2, trong package DemoThread2, 

ta chọn new class, đặt tên là MyThread2.






















Tạo 1 class tên RunThread, thêm từ khóa implements Runnable

trong class, ta click phải và thêm phương thức Run().



























package DemoThread2;

class RunThread implements Runnable{

 @Override
 public void run() {
  // TODO Auto-generated method stub
  
 }
 
}


public class MyThread2 {

 public static void main(String[] args) {
  // TODO Auto-generated method stub

 }

}

Về phần code tương tự ví dụ 1,

package DemoThread2;

class RunThread implements Runnable{

 @Override
 public void run() {
  for (int i=0;i<10;i++)
  {
   System.out.println("xin chao lan thu "+i);
   try {
    Thread.sleep(1000);
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  
 }
 
}


public class MyThread2 {

 public static void main(String[] args) {

  Thread t1= new Thread(new RunThread());
  t1.start();

 }

}

Kết quả khi run.


xin chao lan thu 0
xin chao lan thu 1
xin chao lan thu 2
xin chao lan thu 3
xin chao lan thu 4
xin chao lan thu 5
xin chao lan thu 6
xin chao lan thu 7
xin chao lan thu 8
xin chao lan thu 9

Ví dụ 3, tạo thread trực tiếp từ Runnable

package DemoThread3;

public class MyThread3 
{

 

 public static void main(String[] args)
 
 
 {
  
  
    Thread t1 =new Thread (new Runnable() { public void run() {
     
     for (int i=0;i<10;i++)
  {
   System.out.println("xin chao lan thu "+i);
   try {
    Thread.sleep(1000);
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
     
     
     
    }});
 

  t1.start();
 

    }
 

}

Nguồn tham khảo: Tác giả Chế Công Bình.